
26.03.2008, 21:13
|
|
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме: 1941233
Репутация:
2726
|
|
вот ещё одно отличие программиста от хакера с античата... программист не будет делать все через жопу ради быстрого эффекта, а подумает сначала (АСМ вставки это признак необразованости и их надо стараться избегать в программах на С и С++ как минимум)
Код:
FARPROC (WINAPI *gGetProcAddress)(HMODULE hModule,LPCTSTR lpProcName);
FARPROC WINAPI fGetProcAddressEip(ULONG dwRetEip,HMODULE hModule,LPCTSTR lpProcName)
{
CHAR szMsg[255];
wsprintf(szMsg,"hModule=%08x,lpProcName=%08x,dwRetEip=%08x",hModule,lpProcName,dwRetEip);
MessageBox(0,szMsg,"GetProcAddress",0);
return gGetProcAddress(hModule,lpProcName);
}
FARPROC __declspec(naked) WINAPI fGetProcAddressStub(HMODULE hModule,LPCTSTR lpProcName)
{
__asm {
push dword ptr [esp]
jmp fGetProcAddressEip
}
}
// ...
Splice(
(ULONG)(GetProcAddress(GetModuleHandle("kernel32.dll"),"GetProcAddress")),
fGetProcAddressStub,
(PULONG)&gGetProcAddress
);
GetProcAddress(GetModuleHandle("kernel32.dll"),"IsDebuggerPresent");
|
|
|