Показать сообщение отдельно

  #9  
Старый 26.03.2008, 21:13
KEZ
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");
 
Ответить с цитированием