Распределенная атака на Delphi Alek Silverstone Хакер, номер #074, стр. 074-104-4 Отладка сетевых программ Для отладки сетевых программ просто необходимо использовать специальный софт для просмотра и исправления входящих/исходящих пакетов. Я для этого предпочитаю юзать X-Spider. В его окне слева есть две важные кнопки: TCP и TCP-прокси. Первая служит для работы с TCP-сервисами. То есть, написав, например, сервер, ты можешь X-Spider'ом подключиться к нему и послать команду <need_work>. На скрине виден ее результат. Вторая служит для перехвата пакетов от клиенту к серверу. Я, например, запустил сервер на 31338-ом порту и поставил параметры X-Spider'а, как на рисунке. Пакеты от клиента попадали в X-Spider, который отправлял их серверу, и наоборот. Таким образом я видел все пакеты и обнаружил ту самую точку в конце каждого. Заключение Ну вот, простейший распределенный подборщик паролей для RAR-архивов создан. Осталось только проверить его. Открываем сервер и компилируем. Для его корректной работы файл dict.txt должен лежать в той же папке. Теперь компилируем клиент. Для него необходимы файлы rar.exe и work.rar. Рассылаем эти два файла вместе с client.exe (или как ты его назвал) своим друзьям, которые согласились помочь. Запускаем у себя сервер и один клиент, вводим свой IP и жмем кнопку. И идем пить чай - пиво оставь на потом, когда пароль будет найден ;). Но это только шаблон, тут есть над чем работать. Например можно добавить brutforce-атаку. Можно добавить автоматическое выключение сервера. Можно для расшифровки использовать не rar.exe, а библиотеку rar.dll или компоненты для работы с RAR-архивами (смотри www.rarlabs.com/rar_add.htm) - так будет быстрее. Вообще, этот код можно использовать для чего угодно. Удачи тебе в написании этого «чего угодно»! Будут вопросы - сначала посмотри исходник, там прокомментирована почти каждая строчка. В случае чего пиши мне. Код клиента procedure TForm1.StartBtnClick(Sender: TObject); var r:string; i,j:integer; SR:TSearchRec; path:string; DONE:boolean; Dict:TStringList; begin path:=ExtractFilePath(Application.ExeName); Memo1.Clear; IdTCPclient1.Host:=Edit1.Text; DONE:=false; repeat IdTCPclient1.Connect; Memo1.Lines.Add('Подключились'); Dict:=TStringList.Create; Memo1.Lines.Add('Получаем работу...'); IdTCPclient1.SendCmd('<need_work>'); repeat r:=IdTCPclient1.ReadLn; Dict.Add(r); until r='.'; Dict.Delete(Dict.Count-1); // удаляем '.' IdTCPclient1.Disconnect; ProgressBar1.Max:=Dict.Count; ProgressBar1.Position:=0; if Dict.Count=0 then DONE:=true; Memo1.Lines.Add('Работа получена. Выполнение...'); for i:=0 to Dict.Count-1 do begin ExpandString(Dict[i]); Memo1.Lines.Add('Проверка: '+Dict[i]+' Вариантов: '+IntToStr(work.Count)'); ProgressBar2.Max:=work.Count; ProgressBar2.Position:=0; for j:=0 to work.Count-1 do begin if ExecAndWait(path+'rar.exe','e -p'+work[j]+' work.rar Output\') then begin |