Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #65, АПРЕЛЬ 2006 г.

коммунистические вычисления

ALEK SILVERSTONE

Спецвыпуск: Хакер, номер #065, стр. 065-070-6


В MPICH'е есть много примеров на C++, так что посмотрим что-нибудь на Delphi. Чтобы сделать полноценный пример, я взял свою старую программу для взлома RAR-архива (см. ][ #02/2005) и переписал ее под MPI.

Сразу расскажу, как запускать эту программу. Копируем полученный после компиляции exe'шник, passlist.txt и unrar.dll в папку, расшариваем ее. Допустим, сетевой путь этой папки \\Notebook\Run. Запускаем MPIrun, заходим в настройки и в строке Drive mappings вводим m:\\notebook\run, где m — буква диска, не существующего в ОС.

Затем в строке ввода пути к приложению пишем m:\RARcrack.exe brute_me.rar.

Самый сложный кусок кода главной ветки ты видишь на врезке. В первом цикле нулевая ветвь рассылает остальным первое задание — слова для перебора. Сначала идет размер буфера, потом посылается и сам буфер. Во втором цикле сначала наполняется новый буфер слов. Если слова закончились, то программа выходит из этого цикла. Затем идет получение пакета от другой ветви и сравнение его идентификатора с идентификатором, зарезервированным за пакетом, рапортующим о нахождении пароля. Если определено, что найден как раз нужный пакет, опять же, выходим из цикла. В противном случае отсылаем следующую порцию паролей. Третий цикл ждет любые пакеты от всех ветвей по очереди и посылает им ноль слов: либо файл закончился, либо пароль уже найден. Остальной код с подробными комментариями лежат на диске к журналу.

вот и конец

статьи. Конечно же, очень многое осталось за бортом. Например, еще в 1997 году появился стандарт MPI-2, и сравнительно недавно была выпущена его первая реализация. Изменения довольно значительные: динамическое создание и удаление потоков, нормальный обмен сообщениями через разделяемую память, архитектурно-независимый доступ к файлам, клиент-серверные возможности. Все это позволяет писать не только расчетные задачи, но и системы массового обслуживания — базы данных и т.д. Почему же мы рассматривали MPI-1? Главное объяснение в том, что первый стандарт состоит из 300 страниц, в MPI-2 добавлено 500, причем в это число входят только исправления и дополнения к первому. Изложить все на нескольких журнальных полосах невозможно.

Хочу сказать «большое спасибо» Debugger'у за ноутбук, локальную сеть и кофе, предоставленные на заключительном этапе написания статьи :)

Передача разнородных данных

// переменные

type TOurStruct=record

i:integer;

d:double;

st:array[0..9] of char;

end;

var

p:pointer;

OurStruct:TOurStruct;

buf_pos,buf_size:integer;

Stat:MPI_Status;

// первая ветвь

OurStruct.i:=777;

OurStruct.d:=5.0;

OurStruct.st:='0123456789';

buf_size:=0;

MPI_Pack_size(1,MPI_INT,MPI_COMM_WORLD,@buf_size);

MPI_Pack_size(1,MPI_DOUBLE,MPI_COMM_WORLD,@buf_size);

MPI_Pack_size(10,MPI_CHAR,MPI_COMM_WORLD,@buf_size);

GetMem(p,buf_size);

pos:=0;

MPI_Pack(@buf.i,1,MPI_INT,p,buf_size,@pos,MPI_COMM_WORLD);

MPI_Pack(@buf.d,1,MPI_DOUBLE,p,buf_size,@pos,MPI_COMM_WORLD);

Назад на стр. 065-070-5  Содержание  Вперед на стр. 065-070-7