Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Простая антиотладка на Delphi |

15.10.2006, 13:19
|
|
Участник форума
Регистрация: 06.04.2006
Сообщений: 257
Провел на форуме: 367179
Репутация:
76
|
|
Простая антиотладка на Delphi
Простая Антиотладка на Delphi.
Надеюсь, ты человек грамотный и знаешь, что такое отладчик (debugger). Если нет, то знай, что отладчик – программа, позволяющая следить за выполнением другой проги, отлавливать вызовы определенных функций. Дебаггер позволяет отловить ошибки или разобраться в работе какого-нибудь софта. Примерами являются OllyDebugger, SoftICE, gdb и десятки других мене известных и популярных.
Как ты понимаешь мало-какому програмеру понравиться, когда его прогу отлаживают. Особенно это не нравится шароварщикам и вирусописателям. Ведь если первые могут лишиться денег. То вторые рискуют поплатиться свободой и провести ближайшие пару лет в тюрьме. Поэтому хакеры учатся противодействовать отладчикам. В Интернете большинство материалов, посвященных антиотладке, рассчитаны на профессионалов, я же постараюсь объяснить все просто даже для новичков, а в качестве языка программирования у нас будет выступать Delphi.
Использование специальной api-функций.
В Windows есть специальная api-функция, позволяющая определить находимся ли мы под отладкой. Имя ей IsDebuggerPresent. Она не принимает параметров и возвращает true, если отладчик присутствует. Кстати, в заголовочном файле Windows.pas этой функции нет, поэтому объявить ее нужно самому.
PHP код:
function IsDebuggerPresent():boolean; stdcall; external 'kernel32.dll';
begin
if IsDebuggerPresent()=true then MessageBox(0,'debugger present','DebuggerChecker',0)
else MessageBox(0,'No debugger','DebuggerChecker',0);
end.
Поиск отладчика
Как и любая программа, отладчик имеет свой процесс, а значит может быть обнаружен через список процессов. Получить этот список можно разными способами. Мы будем работать с ToolHelp Api.
PHP код:
var
Snap: dword;
Process: TPROCESSENTRY32;
begin
Snap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if snap<>INVALID_HANDLE_VALUE then
begin
Process.dwSize:=SizeOf(TPROCESSENTRY32);
repeat
if lstrcmp(Process.szExeFile,'OLLYDBG.EXE')=0 then
begin
MessageBox(0,'OllyDBG work!','DebuggerChecker',0);
halt;
end;
until not Process32Next(Snap, Process);
end;
MessageBox(0,'OllyDBG not work!','DebuggerChecker',0);
end.
Большинство отладчиков общаются с пользователями через графический интерфейс. Т.е. мы можем вычислить дебаггер, найдя его окно. Поиск окон осуществляется функцией FindWindow.
PHP код:
var h:HWND;
begin
h := findwindow(nil,'OllyDbg');
If h<>0 then MessageBoxA(0,'OllyDbg work!','DebuggerChecker',0)
else MessageBoxA(0,'OllyDbg not work!','DebuggerChecker',0);
end.
Борьба с брейкпоинтами
Брейкпоинт (бряк) – точка останова, подходя к этой точке, работа программы приостанавливается, и управление передается отладчику. Рассмотрим стандартный взлом: на функцию вывода сообщения (MessageBox) о неправильной регистрации ставится бряк, дальше анализируется близлежащий код и пишет кейген или кряк. Теперь ты понимаешь, почему важно бороться с бряками. Программный брейкпоинт представляет собой байт CCh (опкод команды int3). Нам нужно прочитать первые байты api-функции, перед ее вызовом, и если они равны CC, то нужно воздержаться от вызова( либо восстановить эти байты, прочитав оригинальный файл на диске). Прочитать можно функцией ReadProcessmemory.
PHP код:
function breakpoint(dll:Thandle;addr:pointer):boolean;
var buffer:byte;
i: cardinal;
begin
result:=false;
ReadProcessMemory(dll,addr,@buffer,1,i);
if buffer=$CC then result:=true;
end;
var usr32:thandle;
begin
usr32:=GetModuleHandle('user32.dll');
if breakPoint(usr32,GetProcAddress(usr32,'MessageBoxA'))
then MessageBoxA(0,'Breakpoint on MessageBoxA','DebuggerChecker',0)
else MessageBoxA(0,'MessageBoxA is clear','DebuggerChecker',0)
end.
Вот мы и познакомились с простенькой антиотладкой на Delphi. Теперь ты в состоянии защитить свою программу от начинающего крякера или написать учебный протектор.
© TanKisT email:tank1st@bk.ru
http://hackedpro.org
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|