Отправка картинок в CapMonster2 через c# для решения recaptcha2 через картинки

lutic

Client
Регистрация
20.01.2024
Сообщения
40
Благодарностей
30
Баллы
18
Месяца 2-3 назад в теме "Внеконкурсные статьи" был выложен закрытый плагин для решения рекапчи, решение происходило через CapMonster2, но тему удалили. В самом начале разработки никак не получалось подружить Zennoposter и CapMonster2 так, как мне надо (через json не хотело работать), и была вторая проблема - при отправке картинок больше 100кб выскакивала ошибка "The Uri string is too long", хотя использовалось Uri.EscapeDataString. Выкладываю сюда скрипт на c#, возможно кому-то пригодится.
Название самой функции EncodeString за место Uri.EscapeDataString

О предпосылках создания шаблона и почему возникла такая потребность:

Все началось из-за безысходности и желания заработать хоть немного денег в трудные времена, когда разработчиков много, а задачи решают лишь немногие. Нужно было создать бота для прохождения капчи на сайте Epic Games. Selenium и Puppeteer не подходили, так как эмуляция отпечатков была слишком сложной задачей. После успешного решения рекапчи и написания плагина, поступило много предложений по другим видам капчи. К сожалению, не все удалось реализовать, но большинство задач были выполнены.

Какой результат получился:
Получилась замечательная коллекция плагинов для решения капчи, и в этом примере представлен шаблон, показывающий, как можно отправлять изображения рекапчи в CapMonster2. На поиск информации ушло много времени, так как данных о том, как отправлять капчу такого рода из ZennoPoster в CapMonster2, очень мало.

Используя данный шаблон:
Этот шаблон — всего лишь пример того, как можно найти окно рекапчи и сделать его скриншот. Я считаю, что это уже половина решения проблемы, ведь начальная цель достигнута. Все остальные манипуляции, такие как определение типа капчи, идентификация изображения 3x3 или 4x4, или работа с капчей 3x3, которая постоянно исчезает и меняется, — это уже формальности.



1715083234000.png

C#:
string host="1.1.1.1:8080";

string img = ""; //base64 image
string id = "";
string apikey = "checkapy";
string t = "bus";
string setka = "true";
string bodyS  ="method=base64&key="+apikey+"&CapMonsterModule=ZennoLab.ReCaptcha2&TaskDef="+Uri.EscapeDataString(t)+"&IsNotDynamic="+setka+"&body="+EncodeString(img);


//Отправка задания в софт
var answer = ZennoPoster.HTTP.Request(
    method: ZennoLab.InterfacesLibrary.Enums.Http.HttpMethod.POST,
    url: "http://"+host+"/in.php",
    content: bodyS,
    contentPostingType: "application/x-www-form-urlencoded",
    respType: ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly
);

var answerInt  = Regex.Replace(answer,@"[^0-9]","");
id=answerInt;

//получение ответа
answer = ZennoPoster.HTTP.Request( method: ZennoLab.InterfacesLibrary.Enums.Http.HttpMethod.GET, url: @"http://"+host+"/res.php?action=get&id="+id+"&key="+apikey, respType:ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly);

Thread.Sleep(4000);         

//https://stackoverflow.com/questions/6695208/uri-escapedatastring-invalid-uri-the-uri-string-is-too-long
string EncodeString(string str){
    //maxLengthAllowed .NET < 4.5 = 32765;
    //maxLengthAllowed .NET >= 4.5 = 65519;
    int maxLengthAllowed = 65519;
    StringBuilder sb = new StringBuilder();
    int loops = str.Length / maxLengthAllowed;
    
    for (int i = 0; i <= loops; i++){
        sb.Append(Uri.EscapeDataString(i < loops ? str.Substring(maxLengthAllowed * i, maxLengthAllowed) : str.Substring(maxLengthAllowed * i)));
   }
    return sb.ToString();
}
Плюс бонус для тех, кто делает плагин для рекапчи.

C#:
string textRecText(string t){
    if(t.Contains("/m/")){
        string otv =  "";
        if(t=="/m/0k4j"){ otv="car"; }
        else if(t=="/m/06gfj"){ otv="roads"; }
        else if(t=="/m/09d_r"){ otv="mountain"; }
        else if(t=="/m/01bjv"){ otv="bus"; }
        else if(t=="/m/015kr"){ otv="bridge"; }
        else if(t=="/m/0199g"){ otv="bicycle"; }
        else if(t=="/m/019jd"){ otv="boat"; }
        else if(t=="/m/014xcs"){ otv="crosswalk"; }
        else if(t=="/m/01pns0"){ otv="hydrant"; }
        else if(t=="/m/015qff"){ otv="trafficlight"; }
        else if(t=="/m/04_sv"){ otv="motorcycle"; }
        else if(t=="/m/013_1c"){ otv="sculptures"; }
        else if(t=="/m/0pg52"){ otv="taxi"; }
        else if(t=="/m/01lynh"){ otv="stairs"; }
        else if(t=="/m/01jk_4"){ otv="chimney"; }
        else if(t=="/m/013xlm"){ otv="tractors"; }
        else if(t=="/m/015qbp"){ otv="parkingmeters"; }
        else if(t=="/m/0cdl1"){ otv="palm"; }
        else if(t=="/m/0c9ph5"){ otv="flower"; }
        else if(t=="/m/07jdr"){ otv="train"; }
        else if(t=="/m/07j7r"){ otv="tree"; }
        else{  otv=t; }
        return otv;
    }
    return t;
}
Так же прилагаю файл на c# (*.zp) для автоматического определения области создания скриншота рекапчи2 и отправки этих данных в capmonster2.

Спасибо за внимание!
 

Вложения

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

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