Информационный сервер для программистов: Исходники со всего света. Паскальные исходники со всего света
  Powered by Поисковый сервер Яndex: Найдется ВСЁ!
На Главную Исходники Форум Информер Страны мира
   ЧАВО - Частые Вопросы и Ответы    >>    a_trace
   
 
 Sequrity: Простая Защита от Трассировки   Dmitry Beloshistov 03.04.2001

Один из методов защиты BP7 программ от трассировки.


 
 

Q:> Как защитить свою программу от трассировки? A: Вообще-то защита программ - отдельная и довольно обширная тема. Можно применять шифрование кода, аппаратные методы защиты и тому подобное. Для небольших программ можно применить следующий метод - перехватить прерывания Int 03h - Step by step tracer и Int 01h - Wait a next step (они используются отладчиками) и создать свой обработчик для них... Тогда при загрузке программы в отладчик можно вполне заблокировать возможность трассировки ;)))) Вот пример кода (100% работает в BP 7.0 под RM, под другими платформами не тестировался, т.к. нужен был лишь 1 раз ;))))) Кстати, не забывайте при отладке, что IDE также использует эти прерывания для трассировки ;))). Const OldInt3:pointer=nil; {step by step tracer INT 03h in MSDOS,PCDOS,DRDOS} OldInt1:Pointer=nil; {stop (wait a next step) INT 01h in MSDOS,PCDOS,DRDOS} TraceFlag:boolean=True; {tracer enabled} Procedure Int3Reboot; Interrupt; {процедура перезагрузки ;))) - новый обработчик прерывания для Int 03h & Int 01h} var Warm:boolean; begin Warm:=true; Asm sti cmp Warm, 0 je @cold mov AX, 0 jmp @boot @cold: mov AX, 1 @boot: mov DS, AX mov AX, 1234h mov [0472h], AX End; Inline ($EA/$00/$00/$FF/$FF); end; {--------------------------------------------} Procedure DisableTrace; {запретить возможность трассировки} begin TraceFlag:=false; GetIntVec($03,OldInt3); {получить адрес прерывания} GetIntVec($03,OldInt1); SetIntVec($03,@Int3Reboot); {установить его на свой обработчик} SetIntVec($03,@Int3Reboot); end; {--------------------------------------------} Procedure EnableTrace; {разрешить возможность трассировки} begin TraceFlag:=true; SetIntVec($03,OldInt1); {восстановить адрес прерывания} SetIntVec($03,OldInt3); end; WBR, Dmitry Beloshistov AKA [-=BDS=-] e-mail: torin@kerin.donetsk.ua