Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Защита от распаковки.


Автор: Ion 28.8.2002, 02:38
Добрый вечер.

Не ответите ли, уважаемые, на такой вопрос: Как можно программно файл, сжатый UPX, защитить от распаковки? Создаю очередной UPX Shell и вот хотелось бы сделать такую возможность. Спасибо.

Автор: Vit 28.8.2002, 03:28
В каком-то из Shell я уже видел подобную фишку - надо его загрузить и посмотреть что он делает, скорее всего он меняет несколько байт в заголовке так чтобы UPX не мог распознать, что это его файл. Только на мой взгляд это совершенно бессмысленная работа, потому что любой запакованный exe можно распаковать по определению - есть целый ряд распаковщиков, которым наплевать чем запакован файл, они просто берут ту копию которая возникает при реальном запуске exe и сбрасывают ее в файл...

Автор: RA 28.8.2002, 04:33
Ну самый простой способ это замена в HEX редакторе строчек

"UPX0", "UPX1", "1.20.UPX!" на что либо другое.

А сложный способ, это смещение точки входа в программу (Entry Point).

И всё это можно реализовать в делфях.

Автор: Ion 28.8.2002, 05:22
Цитата
А сложный способ, это смещение точки входа в программу (Entry Point).
И всё это можно реализовать в делфях.


Как? С чего начинать?

Автор: RA 29.8.2002, 20:40
Код
const
buff_size=50000;

procedure PROTECTUPX;
var
F:File;
decstr:string;
buf:array[1..2218] of Char;
i:integer;
begin

AssignFile(f,'C:\FILE.EXE'); //Открываем фаил
{$I-} Reset(f,1); {$I+}
If IOResult = 0 then
begin

decstr:='....';

for i:=1 to 4 do buf[i]:=chr(241);
Seek(F,440); //позиция строки UPX0
for i:=1 to length(decstr) do
buf[i]:=decStr[i];
BlockWrite(F,buf,4);

for i:=1 to 4 do buf[i]:=chr(241);
Seek(F,480); //позиция строки UPX1
for i:=1 to length(decstr) do  
buf[i]:=decStr[i];
BlockWrite(F,buf,4);

for i:=1 to 4 do buf[i]:=chr(241);
Seek(F,987); //позиция строки 1.20
for i:=1 to length(decstr) do
buf[i]:=decStr[i];
BlockWrite(F,buf,4);

for i:=1 to 4 do buf[i]:=chr(241);
Seek(F,992); //позиция строки UPX!
for i:=1 to length(decstr) do  
buf[i]:=decStr[i];
BlockWrite(F,buf,4);

CloseFile(F);
ShowMessage('Фаил Под защитой');

end;
End;

Автор: RA 29.8.2002, 20:43
это было про первый, метод, ибо он есть простой, а насчёт второго метода я только знаю как его в ручную реализовать, но второй метод хоть и более надёжен но иногда выдаёт испорченные файлы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)