![]() |
Простая антиотладка на Delphi
Простая Антиотладка на Delphi.
Надеюсь, ты человек грамотный и знаешь, что такое отладчик (debugger). Если нет, то знай, что отладчик – программа, позволяющая следить за выполнением другой проги, отлавливать вызовы определенных функций. Дебаггер позволяет отловить ошибки или разобраться в работе какого-нибудь софта. Примерами являются OllyDebugger, SoftICE, gdb и десятки других мене известных и популярных. Как ты понимаешь мало-какому програмеру понравиться, когда его прогу отлаживают. Особенно это не нравится шароварщикам и вирусописателям. Ведь если первые могут лишиться денег. То вторые рискуют поплатиться свободой и провести ближайшие пару лет в тюрьме. Поэтому хакеры учатся противодействовать отладчикам. В Интернете большинство материалов, посвященных антиотладке, рассчитаны на профессионалов, я же постараюсь объяснить все просто даже для новичков, а в качестве языка программирования у нас будет выступать Delphi. Использование специальной api-функций. В Windows есть специальная api-функция, позволяющая определить находимся ли мы под отладкой. Имя ей IsDebuggerPresent. Она не принимает параметров и возвращает true, если отладчик присутствует. Кстати, в заголовочном файле Windows.pas этой функции нет, поэтому объявить ее нужно самому. PHP код:
Как и любая программа, отладчик имеет свой процесс, а значит может быть обнаружен через список процессов. Получить этот список можно разными способами. Мы будем работать с ToolHelp Api. PHP код:
PHP код:
Брейкпоинт (бряк) – точка останова, подходя к этой точке, работа программы приостанавливается, и управление передается отладчику. Рассмотрим стандартный взлом: на функцию вывода сообщения (MessageBox) о неправильной регистрации ставится бряк, дальше анализируется близлежащий код и пишет кейген или кряк. Теперь ты понимаешь, почему важно бороться с бряками. Программный брейкпоинт представляет собой байт CCh (опкод команды int3). Нам нужно прочитать первые байты api-функции, перед ее вызовом, и если они равны CC, то нужно воздержаться от вызова( либо восстановить эти байты, прочитав оригинальный файл на диске). Прочитать можно функцией ReadProcessmemory. PHP код:
© TanKisT email:tank1st@bk.ru http://hackedpro.org |
улЫбнул этот кусок кода
if breakPoint(usr32,GetProcAddress(usr32,'MessageBoxA ')) then MessageBoxA(0,'Breakpoint on MessageBoxA','DebuggerChecker',0) MessageBoxA в этом слу4ае никогда не сработает, т.к. на нем будет сработан останов хотя как "у4ебный" показательный пример - ни4его, держи + |
вотn еще может кому пригодится:
PHP код:
PHP код:
PHP код:
|
и еще, функция для обнаружения активного SoftIce:
PHP код:
PHP код:
|
Позновательно, но имхо с "бородой". Но всё равно лови +!
|
Да уж, боянчег... :)
|
Цитата:
Но в принципе для тех кто не знает должно быть позновательно. |
Цитата:
а для тех, кто "знает" - лезем к китай4егам и выискуем архивы с сорцами сплойпов для ольки, иды и других "полезных" фи4 |
небезизвестный сплойт для ольки
PHP код:
|
Цитата:
Кстати хотел спросить(в моих ебуках этого нет). Dec выстовляет флаг равенства, когда значение регистра становится равно нулю (ни как не могу вспомнить)? |
| Время: 16:48 |