11. jaan 2008

Kood arhiivist nr 1 (ära luba debuggerit)

Leidsin, et aeg niipalju edasiliikunud, võiks hakata vanu koode avalikustama, mis olid omal ajal aktuaalsed. Antud kood oli mul kunagi ühes kommertstootes, mida üritati debuggeri abil töödelda, siis kui veel häkkimine oli popp. Tegin ühe lihtsa lahenduse, mis isegi toimis 40%....

Nagu ma kunagi ütlesin, hackerite vastu ei saa (peaaegu võimatu), neid tuleb võtta, kui sõpru, kes viitavad koodivigadele....

Kood aastast; 99 vist lausa
....
var
CDDE : Boolean = true;
handler : dword;

function exception_handler(var exceptRec : exception_record;
const EstablisherFrame : Pointer;
var ContextRecord : _Context):integer;stdcall;

begin
asm nop end; CDDE:=false;
inc(contextRecord.Eip);
contextRecord.Dr0:=0;
contextRecord.Dr1:=0;
contextRecord.Dr2:=0;
contextRecord.Dr3:=0;
result:=0;
end;

begin

handler:=dword(@exception_handler);

asm
push handler
push fs:[0]
mov fs:[0],esp
int 3 nop
mov fs:[0],esp
add esp,8
end;

if CDDE then
asm
@@BadNews:

cld
cmp SysUtils.Win32Platform,windows.VER_PLATFORM_WIN32_WINDOWS
jne @@NoCli

@@cliLoop:
cli
jmp @@cliLoop

@@NoCli:
wbinvd
jmp @@BadNews
end;
end;

end.

Kommentaare ei ole: