// вы читаете...

Новости

Обход SoftIce’а



Ну это всё было про SoftIce и WinApi. Теперь же мы попробуем и саму Delphi обмануть! :) Для этого напишем какую-нибудь функцию и поставим в ней BreakPoint, после чего излечим её и вызовем. В результате выполнение программы не прервется, а красная полоска в редакторе так и будет одиноко стоять, символизируя обманутые надежды: :)

function cooltest(i:integer):string; // подопытная функция
begin
result := inttostr(i); // тут поставим BreakPoint :)
result := result+’ cool’;
end;
procedure TForm1.Button4Click(Sender: TObject);
var HealMas:THealRec;
h:string;
begin
HealMas.position := 6;
HealMas.truly := $8b;
Healing(@HealMas,1,integer(@cooltest));
H := cooltest(5);
MessageBoxA(0, pchar(h), ‘Am I healed?’, MB_OK);
end;

Смещение в “6” можно увидеть из дизасма процедуры:

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0044DD12(C)
|
:0044DD64 53 push ebx
:0044DD65 56 push esi
:0044DD66 8BDA mov ebx, edx
:0044DD68 8BF0 mov esi, eax
:0044DD6A 8BD3 mov edx, ebx // вот на эту строчку и ставится int 03 (важно помнить, что нумерация байт в процедуре начинается с нуля!)
:0044DD6C 8BC6 mov eax, esi
:0044DD6E E8E59DFBFF call 00407B58
:0044DD73 8BC3 mov eax, ebx

* Possible StringData Ref from Code Obj ->» cool»
|
:0044DD75 BA8CDD4400 mov edx, 0044DD8C
:0044DD7A E85963FBFF call 004040D8
:0044DD7F 5E pop esi
:0044DD80 5B pop ebx

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0044DD1A(C)
|
:0044DD81 C3 ret

Что ж… Вот и всё. :) Теперь наша шароварная софтина стала немного неуязвимей и она уже может отпугнуть какого-нибудь начинающего крякера. :) Будем надеяться, что этот метод доставит пару приятных минут любителям поковыряться в чужом коде.

Список литературы:
Intel Hex Opcodes And Mnemonics (взято из поставки MASM’а)

Страницы: 1 2 3 4 5 6 7

Обсуждене

Отзывов нет на «Обход SoftIce’а»

Ваш отзыв

Рубрики