Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #74, ФЕВРАЛЬ 2005 г.

Распределенная атака на 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

Назад на стр. 074-104-3  Содержание  Вперед на стр. 074-104-5