Delphi. Создаем билдер (builder)
В сети уже имеется инструкция по созданию билдера (builder) на Delphi, рассказывающая, как изменять код готовой программы. Там применяют поиск нужного текста в WinHex, высчитывание байтов и т.д. Я покажу, как всё сделать проще и быстрее. А раз быстрее, то сделаю еще и извлечение файла, который буду изменять, из программы-билдера.
Первым делом надо создать программу, код которой будем менять. Программа максимально простая: форма с меткой (Label). Метка – ссылка, по клике на нее в браузере будет открываться страница. Вот адрес этой страницы (а соответственно и отображение метки) будем менять.
Итак, код этой программы:
procedure TForm1.FormCreate(Sender: TObject); var url:string; i:integer; begin url:='????????????????????????'; i:=length(url); while url[i]='?' do begin delete(url, length(url), 1); dec(i); end; Label1.caption:=url; end; procedure TForm1.Label1Click(Sender: TObject); begin ShellExecute(0, 'open', PChar(Label1.caption), nil, nil, SW_SHOW); end;
Переменная url имеет значение “много вопросительных знаков“, которое и нужно менять на нужную ссылку. Замечу, что длина строки url (количество знаков) должна быть не меньше длины ссылки, на которую мы будем менять.
Т.к. длина ссылки будет не больше установленной длины url (в данном случае – 24), то в конце останутся лишние вопросительные знаки, которые нужно обрезать, что и делает цикл while. После цикла отображаем в Label текст ссылки.
А по клику на Label открываем ссылку в браузере. Для использования ShellExecute необходимо в uses добавить модуль ShellApi.

После создания и компилирования программы её нужно компилировать в ресурс. Для этого будет нужен файл brcc32.exe, который находится в каталоге bin каталога Delphi (его можно без проблем скопировать в любую удобную вам папку). А также файл со списком ресурсов (в данном случае одним ресурсом) с расширением “rc” (например, File.rc). Создаем такой файл и записываем в него:
FILE1 EXEFILE C:\Project1.exe
Где C:\Project1.exe – путь к первой скомпилированной программе.
Теперь компилируем. Либо в проводнике переносим файл File.rc на brcc32.exe, либо запускаем командную строку и выполняем команду: “brcc32 File.rc” (файл brcc32.exe конечно должен быть в текущем каталоге).
В результате в папке появится файл FILE.RES. Его переносим в новую папку, где будет наш проект билдера.
Теперь создаем непосредственно программу-билдер. На форму кидаем кнопку (Button), поле для ввода (Edit) и метку (Label).
После implementation добавляем строку:
{$R FILE.RES}
И код кнопки:
procedure TForm1.Button1Click(Sender: TObject);
var
ResStream: TResourceStream;
FileName, oldstring, newstring, s: string;
f: file;
l: Longint;
go:boolean;
begin
label1.caption:='wait';
Application.ProcessMessages;
FileName := 'pr.exe';
ResStream:=TResourceStream.Create(HInstance,'FILE1','EXEFILE');
ResStream.SaveToFile(ExtractFilePath(Application.ExeName)+FileName);
ResStream.Free;
oldstring := '????????????????????????';
newstring := Edit1.Text;
s := oldstring;
AssignFile(f, FileName);
Reset(f, 2);
l:=0;
go:=true;
while (l<=(FileSize(f) - Length(oldstring) - 1)) and go do
begin
Seek(f, l);
BlockRead(f, oldstring[1], Length(oldstring));
if oldstring = s then
begin
seek(f, l);
BlockWrite(f, newstring[1], Length(newstring));
go:=false;
end;
inc(l);
end;
CloseFile(f);
label1.caption:='ok';
end;
Немного комментариев:
- определяем имя создаваемого файла и присваиваем label1 значение "wait"
- распаковываем файл из ресурса и сохраняем под именем "pr.exe"
- "oldstring" - строка, которую ищем в созданном файле (она там точно есть)))
- "newstring" - строка, на которую заменяем знаки вопроса
- открываем файл как двоичный для записи в него (Reset(f, 2);) (одну запись определяем как два байта)
- в цикле считываем из файла байты (BlockRead) и при нахождении нужной строки записываем в это место новый текст (BlockWrite)
- закрываем файл и присваиваем label1 значение "ok"
Теперь запускаем билдер, вводим адрес, нажимаем кнопку.

В результате получаем файл pr.exe:

И по клике на метку, происходит переход по ссылке))
Похожие записи из категории Статьи
Метки: builder, delphi, билдер, написать builder, написать билдер, сделать builder, сделать билдер Рубрика: Статьи

Кстати, такой метод хорошо подходит к созданию кряков (патчей).
[Ответить]
В первой программе при компиляции ошибка, ругается на лишнии знаки, игнорируем.
При вставке на ссылку в второй проге windows аварийно зыкрывает программцу (win7)
[Ответить]
Похожая ситуация как и у mao13
[Ответить]
ошибка:
D:\>bcc32.exe File.rc
Embarcadero C++ 6.31 for Win32 Copyright (c) 1993-2010 Embarcadero Technologies,
Inc.
File.rc:
Error E2141 File.rc 1: Declaration syntax error
Error E2206 File.rc 1: Illegal character ‘\’ (0x5c)
*** 2 errors in Compile ***
это не на дельфи, на с++ билдере… (под с++ не катит так?)
[Ответить]
у меня заработало всё после использования Delphi 2007 на 7 не хотел пахать(
[Ответить]
Пошёл код на delphi 7
выключить hide strigs
и вместо
Reset(f, 2);
Reset(f, 1);
[Ответить]
Delphi 7.
Составил первую программу. Пробую компилировать. Ругается на строчку
while url[i]=’?’ do
Ошибка Access violation at address 0044DB07 in module ‘Project.exe’. Read of address FFFFFFFF’.
Текст программы полностью копирую из вашего.
Далее, пробовал запустить вашу из скачанного файла (все еще первую). Ругается на то же самое. Плюс, непонятно откуда в файле Project1.dpr берется строка ‘Application.MainFormOnTaskbar := True;’
[Ответить]
Проблему с ошибкой решил. Оказывается у меня длина метки не была равна числу ?-знаков в коде.
Видимо из-за того, что у меня Delphi 7, вторая программа нормально работает, если сделать замену в reset.
[Ответить]
Здравствуйте читал вашу статью, Есть вопрос, а как сделать, что бы две ссылки меняла. Помогите пожалуйста.
[Ответить]
Zdez Bil Ya Reply:
июля 2, 2011 at 01:00
В целевой программе делаете две переменных, одна, например, “????????”, другая, например, “!!!!!!!”. И в билдере одну строку заменяете на один нужный текст, вторую – на другой.
[Ответить]
блин ! у меня не получаеться делать фейк билдер!! помоги мне плис!!
[Ответить]
что делать
[Error] WARNING. Duplicate resource(s):
[Error] Type EXEFILE, ID FILE1:
[Error] File FILE.RES resource kept; file C:\Program Files (x86)\Borland\Delphi7\Projects\FILE.RES resource discarded.
[Ответить]
спс , получилось
[Ответить]