我最近开始研究api hook方法,现在我的主要研究对象是IAT hook方法,这是因为我发现了一个安全应用程序,其中只有这种hook方法用于防止间谍软件。
然后,在这个安全应用程序中存在的几个资源之间,有屏幕捕获锁定,通常导致白屏捕获,这是因为 IAT 钩子方法已经在表上覆盖了指向原始函数的地址,为“假函数” " 包含锁定屏幕捕获的代码。
所以,我在网上阅读了很多关于 IAT 钩子的内容,并找到了两个网站,其中说绕过这个钩子方法的方法是:
iC0de.org对 IAT 挂钩源代码的回答。
和
MalwareTech在一段文字中解释了 IAT 钩子。
对我来说需要注意的绕过方法是使用GetProcAddress
函数获取原始函数的真实地址。
因此,仅出于教学目的,我想知道如何GetProcAdress
在下面实现此屏幕捕获功能,并最终绕过此安全应用程序中实现的 IAT 钩子:
procedure Print;
var
DCDesk: HDC;
bmp: TBitmap;
begin
bmp := TBitmap.Create;
bmp.Height := Screen.Height;
bmp.Width := Screen.Width;
DCDesk := GetWindowDC(GetDesktopWindow);
BitBlt(bmp.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, DCDesk, 0, 0, SRCCOPY);
bmp.SaveToFile('ScreenShot' + '.bmp');
ReleaseDC(GetDesktopWindow, DCDesk);
bmp.Free;
end;
欢迎任何建议。