.cgi каптча

Nord

Client
Регистрация
22.03.2012
Сообщения
2 375
Благодарностей
1 435
Баллы
113
Встречается очень простая каптча .cgi.
Ее как бы и тессеракт решает, но обычно выдает первые 2-3 цифры, вместо 4х.
67310

67311

67312

67313

67314

67315

Если открывать в стандартном приложении для просмотра - то каждая цифра появляется с задержкой, то есть первая, пару мс - вторая, еще пару - третья и тд, грубо говоря гифка.

67350


Я так понимаю, из-за этого и теззеракт их разгадывает криво.
Есть пачка решенных через рукапчу, в архиве. Только там формат - уже jpg - так сохраняет кубик.
Капмонстр клауд гадает на оть@бись - на уровне тессеракта

Вопрос - Как превратить .cgi в нормальный .jpg чтоб его хавал теззеракт =)


Вот несколько штук в формате cgi - https://zennolab.com/discussion/attachments/captch-zip.67341/

А вот - гифки
67342

67343

67344

67345

67346
 

Вложения

Последнее редактирование:

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 691
Баллы
113

Nord

Client
Регистрация
22.03.2012
Сообщения
2 375
Благодарностей
1 435
Баллы
113
Упс=)
Как превратить .cgi в нормальный .jpg чтоб его хавал теззеракт =)

Скорее нужно было назвать - как распозновать гифки в теззеракте =)
 
Последнее редактирование:

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 385
Баллы
113
надо сюда копать. https://stackoverflow.com/a/17922473
Если бы мне не было так сложно(влом) найти подобные изображения, возможно, моя помощь была бы существеннее
 
  • Спасибо
Реакции: Nord

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 691
Баллы
113
вроде в кубике капчи была фишка объединять скрины через какие то промежутки.... не пользовался ни разу :-)
 
  • Спасибо
Реакции: Nord

Nord

Client
Регистрация
22.03.2012
Сообщения
2 375
Благодарностей
1 435
Баллы
113
вроде в кубике капчи была фишка объединять скрины через какие то промежутки.... не пользовался ни разу :-)
не, там отдельные картинки клеит в одну, а тут - одна картинка, но изображение появляется постепенно =)
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 691
Баллы
113

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 385
Баллы
113
C#:
string img_url = "примеркартинкизатертвсилусекретностиресурса";
byte[] img = ZennoPoster.HTTP.RequestBytes(ZennoLab.InterfacesLibrary.Enums.Http.HttpMethod.GET,img_url,"",cookieContainer:project.Profile.CookieContainer,proxy: project.GetProxy(),UserAgent:project.Profile.UserAgent);
string CaptchaBase64String = Convert.ToBase64String(img);
var result = ZennoPoster.CaptchaRecognition("RuCaptcha.dll", CaptchaBase64String, "");
var tmp = result.Split(new [] {"-|-"}, StringSplitOptions.None);
if (tmp.Length > 1)
    result = tmp[0];
return result;
оз.png
 
  • Спасибо
Реакции: alex1988

Nord

Client
Регистрация
22.03.2012
Сообщения
2 375
Благодарностей
1 435
Баллы
113

bad robot

Client
Регистрация
07.03.2011
Сообщения
178
Благодарностей
28
Баллы
28
если брать не саму капчу, а подождать прогрузки и делать скрин с картинки, и дальше его уже распознавать?
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 764
Благодарностей
2 407
Баллы
113
А может стоит просто взять и сохранить все фреймы отдельно (как это сделать - в шаблончике к этому сообщению).
После чего - возможно есть смысл перевести каждую мелкую картинку в чернобелый (благо она там очень маленькая).
А дальше - просто делаем MD5 (пример тут) из того, что получилось.
Часик собираем MD5 (чтобы собрать коллекцию).
А далее - уже просто гадаем по словарю без каких-то дополнительных решений?
 

Вложения

  • 13,3 КБ Просмотры: 67
  • 150 байт Просмотры: 70
  • 154 байт Просмотры: 67
  • 153 байт Просмотры: 66
  • 146 байт Просмотры: 69
  • Спасибо
Реакции: Nord, Alexmd и RoyalBank

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 691
Баллы
113

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 764
Благодарностей
2 407
Баллы
113
простая пауза на 2 секунды :-)
Если данные получаются GET запросом (или считывается с файла на компьютере) - как здесь сможет помочь пауза?
Или это в Тессеракт|Рукаптчу|КапМонстр2 как-то нужно указывать паузу в качестве параметра, чтобы заставить его сначала воспроизвести анимацию, а уже тогда распознавать?
 
Последнее редактирование:
  • Спасибо
Реакции: Nord

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 691
Баллы
113
Если данные получаются GET запросом - как здесь сможет помочь пауза?
Или это в Тессеракт|Рукаптчу|КапМонстр2 как-то нужно указывать паузу в качестве параметра, чтобы заставить его сначала воспроизвести анимацию, а уже тогда распознавать?
а где написано что гет запрос ? нигде не написано. вот в браузере я бы 2 сек. подождал бы и сделал бы скрин.
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 764
Благодарностей
2 407
Баллы
113
а где написано что гет запрос ? нигде не написано. вот в браузере я бы 2 сек. подождал бы и сделал бы скрин.
Так о браузере также вроде нигде не написано (разговор здесь о самом файле cgi который хранит в себе анимацию gif).
Но, как вариант можно действительно подгрузить эту каптчу в браузере Зеннопостера, подождать, и потом делать скриншот.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 691
Баллы
113

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 764
Благодарностей
2 407
Баллы
113
вот есть направление приложения мозговой деятельности :-) https://www.cyberforum.ru/php-beginners/thread2403980.html
Не совсем мне понятно, как собрать решение на базе тех данных которые можно прочитать по ссылочке. Может поможете?
Первый кадр не хранит информацию о всех остальных кадрах - в данном случае первый кадр хранит только 1 цифру.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 691
Баллы
113
Не совсем мне понятно, как собрать решение на базе тех данных которые можно прочитать по ссылочке. Может поможете?
Первый кадр не хранит информацию о всех остальных кадрах - в данном случае первый кадр хранит только 1 цифру.
так последний кадр вытащить и все. там же все цифры есть.
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 764
Благодарностей
2 407
Баллы
113
так последний кадр вытащить и все. там же все цифры есть.
Последний кадр содержит последнюю цифру, и не содержит информации о всех предыдущих.
Но, в целом, вторая ссылочка, содержащая код (добавлю ниже) - полезная! Спасибо! Сохраняю кодец сразу себе в коллекцию:-)
Извлечение фрейма с GIF:
static IEnumerable<Image> Frames(Image gif) {
  var d = new FrameDimension(gif.FrameDimensionsList[0]);
  for (var i = 0; i < gif.GetFrameCount(d); i++) {
     gif.SelectActiveFrame(d, i);
     var ci = new Bitmap(gif.Width, gif.Height);
     using (var g = Graphics.FromImage(ci))
        g.DrawImageUnscaled(gif, 0, 0);
     yield return ci;
  }
}
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 691
Баллы
113
Последний кадр содержит последнюю цифру, и не содержит информации о всех предыдущих.
Но, в целом, вторая ссылочка, содержащая код (добавлю ниже) - полезная! Спасибо! Сохраняю кодец сразу себе в коллекцию:-)
Извлечение фрейма с GIF:
static IEnumerable<Image> Frames(Image gif) {
  var d = new FrameDimension(gif.FrameDimensionsList[0]);
  for (var i = 0; i < gif.GetFrameCount(d); i++) {
     gif.SelectActiveFrame(d, i);
     var ci = new Bitmap(gif.Width, gif.Height);
     using (var g = Graphics.FromImage(ci))
        g.DrawImageUnscaled(gif, 0, 0);
     yield return ci;
  }
}
код то рабочий ? я вот чот не знаю что вот это означает -> yield :-)
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 764
Благодарностей
2 407
Баллы
113
код то рабочий ? я вот чот не знаю что вот это означает -> yield :-)
Да, вполне годится - возвращает картинку в base64 (на сколько я понял все кадры вместе).
Но, как он будет себя вести с разными GIF - этого не знаю.
Переписал без yield.

C#:
string path = @"c:\Users\User\Desktop\1.cgi";
string base64 = string.Empty;
Image gif = System.Drawing.Image.FromFile (path);
List<Guid> guid = gif.FrameDimensionsList.ToList(); // тут надеялся увидеть несколько кадров
foreach(Guid s in guid) { // здесь хотел перебрать все кадры
    System.Drawing.Imaging.FrameDimension d = new System.Drawing.Imaging.FrameDimension(s); // размеры кадра
    int count = gif.GetFrameCount(d); // считаем количество кадров указанного размера - размера каптчи
    project.SendInfoToLog(count.ToString()); // имеем 1 фрейм - странно :(
    for (var i = 0; i < count; i++) {
        gif.SelectActiveFrame(d, i);
        var ci = new Bitmap(gif.Width, gif.Height);
        using (var g = Graphics.FromImage(ci)) {
            g.DrawImageUnscaled(gif, 0, 0);
        }
        using (var ms = new MemoryStream()) {
              ci.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
              base64= Convert.ToBase64String(ms.GetBuffer());
        }      
    }  
}
string captcha = ZennoPoster.CaptchaRecognition("MonkeyEnter.dll", base64, "");
project.SendInfoToLog(captcha);
 
Последнее редактирование:
  • Спасибо
Реакции: Alexmd и Phoenix78

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 385
Баллы
113
Очень полезная штука! круто! но не заработало сразу, как хочется
C#:
string path = @"c:\Users\User\Desktop\1.cgi";
string base64 = string.Empty;
using(Image gif = System.Drawing.Image.FromFile(path)){//делаем возможным удаление картинки после разгадывания
List<Guid> guid = gif.FrameDimensionsList.ToList(); // тут надеялся увидеть несколько кадров
foreach(Guid s in guid) { // здесь хотел перебрать все кадры
    System.Drawing.Imaging.FrameDimension d = new System.Drawing.Imaging.FrameDimension(s); // размеры кадра
    int count = gif.GetFrameCount(d); // считаем количество кадров указанного размера - размера каптчи
    project.SendInfoToLog(count.ToString()); // имеем 1 фрейм - странно :(
    for (var i = 0; i < count; i++) {
        gif.SelectActiveFrame(d, i);
        var ci = new Bitmap(gif.Width, gif.Height);
        using (var g = Graphics.FromImage(ci)) {
            g.DrawImageUnscaled(gif, 0, 0);
        }
        using (var ms = new MemoryStream()) {
              ci.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
              base64= Convert.ToBase64String(ms.GetBuffer());
        }   
        ci.Dispose();// не знаю, как у Вас, но в версии 7.2.2.1 кубик выделился красным и потребовал добавить эту строчку
    } 
}
string captcha = ZennoPoster.CaptchaRecognition("MonkeyEnter.dll", base64, "");
project.SendInfoToLog(captcha);
}File.Delete(path);//теперь можно спокойно удалять картинку.
Чаще всего, после работы со скачанной картинкой каптчи, хотелось бы ее сразу удалить, а поток все еще открыт. И доступа к файлу нет даже из других кубиков.
Обернув все в using можно удалять где хочешь.
Более элегантного решения не нашел. BAZAg, как это правильно делается?
 
  • Спасибо
Реакции: BAZAg

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 764
Благодарностей
2 407
Баллы
113
Очень полезная штука! круто! но не заработало сразу, как хочется
C#:
string path = @"c:\Users\User\Desktop\1.cgi";
string base64 = string.Empty;
using(Image gif = System.Drawing.Image.FromFile(path)){//делаем возможным удаление картинки после разгадывания
List<Guid> guid = gif.FrameDimensionsList.ToList(); // тут надеялся увидеть несколько кадров
foreach(Guid s in guid) { // здесь хотел перебрать все кадры
    System.Drawing.Imaging.FrameDimension d = new System.Drawing.Imaging.FrameDimension(s); // размеры кадра
    int count = gif.GetFrameCount(d); // считаем количество кадров указанного размера - размера каптчи
    project.SendInfoToLog(count.ToString()); // имеем 1 фрейм - странно :(
    for (var i = 0; i < count; i++) {
        gif.SelectActiveFrame(d, i);
        var ci = new Bitmap(gif.Width, gif.Height);
        using (var g = Graphics.FromImage(ci)) {
            g.DrawImageUnscaled(gif, 0, 0);
        }
        using (var ms = new MemoryStream()) {
              ci.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
              base64= Convert.ToBase64String(ms.GetBuffer());
        }  
        ci.Dispose();// не знаю, как у Вас, но в версии 7.2.2.1 кубик выделился красным и потребовал добавить эту строчку
    }
}
string captcha = ZennoPoster.CaptchaRecognition("MonkeyEnter.dll", base64, "");
project.SendInfoToLog(captcha);
}File.Delete(path);//теперь можно спокойно удалять картинку.
Чаще всего, после работы со скачанной картинкой каптчи, хотелось бы ее сразу удалить, а поток все еще открыт. И доступа к файлу нет даже из других кубиков.
Обернув все в using можно удалять где хочешь.
Более элегантного решения не нашел. BAZAg, как это правильно делается?
Да, при использовании Graphics, MemoryStream, Bitmap необходимо использовать Dispose.
Вместо него можно использовать using.
Как правильно - этого я не знаю - не хочу никого вводить в заблуждение.

Я обычно свожу код так, чтобы у меня таких проблем не было.
Например - одним действием считываю файл в массив байт (допустим в локе, если подозреваю что несколько потоков могут натолкнуться на один файл).
Дальше превращаю этот массив в base64.
И все остальные методы по работе с картинкой принимают на вход строку base64 и возвращают на выход строку.
А внутри методов идёт преобразование строки в Bitmap например, какая-то работа, все Graphics, MemoryStream, Bitmap одеты в using и после этого - обратно идёт перевод в base64.

Иногда бывает так не удобно и нужно подать в метод на вход Bitmap, обработать его в методе и вернуть обратно - тогда ни using ни Dispose внутри методов не использую.
 
  • Спасибо
Реакции: Alexmd

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)