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

Компьютерный муравейник

Петя, Волк и Никита

Хакер, номер #073, стр. 073-056-3


Управляющая система

Как ты, наверное, уже догадался, необходимо написать несколько функций, которые будут вызываться в зависимости от параметра action, например вот так:

if($_GET[action]==”register” && isset($_GET[key])) {

register_dll($_GET[key]);

}

Всего таких функций должно быть как минимум три: для регистрации нового клиента, для получения работы и возвращения результата вычислений. Как они будут работать? Тут целесообразно еще ко всему прочему собирать некоторую статистику, поэтому я решил использовать в этой системе для удобства сервер БД MySQL. Когда клиент регистрируется, функция просто добавляет новую запись в таблицу с dll’ками. Когда вызывается функция получения работы, сценарий добавляет запись в таблицу с активными процессами перебора, чтобы ты знал, над каким диапазоном в данный момент работает каждый компьютер. И наконец, когда вызывается процедура получения нового задания, скрипт должен сгенерировать для клиента диапазон перебираемых паролей. Тут, кстати, возможно еще вот что сделать. Поскольку ты будешь располагать сведениями о том, как быстро каждый из клиентов справляется с определенным диапазоном, можно генерировать каждому модулю индивидуальное количество проверяемых вариантов - ведь одно дело, если пользователь работает на дохлом четырехсотом целероне, и совсем другое, если на 3 гГц интеловском камне. Я приведу примерный, поскипанный и прокомментированный, код функции, которая отдает модулю текущее задание. Вот он:

Функция получения задания

function getwork($key) {

/* $arr – строка с подбираемыми символами, $k - ее длина, $M – число вариантов, отдаваемых клиенту за раз, $wo – массив с записью об активном хэше. */

$start=$wo[c_start]; //Начальная комбинация

$l=StrLen($start);

if($l==1) { $La=pow($k,$l);} else {

$La=pow($k,$l)-pow($k,$l-1)*(strpos($arr,$start[0])+1);

} //$La – число возможных вариантов без переноса разряда

/*

Тут порезано. Если осталось вариантов меньше, чем надо отдать пользователю, отдаем все, что есть в пределах текущего количества разрядов, но сдвигаем разряд для следующего клиента. Если же вариантов больше, вычисляем символ, где надо остановиться.

*/

mysql_query("update hashes set c_start=’$start’ where hash=’$wo[hash]’"); //Обновляем табличку, исправляя начальную комбинацию для следующего клиента

Назад на стр. 073-056-2  Содержание  Вперед на стр. 073-056-4