您现在的位置: 天下网吧 >> 网吧天地 >> 天下码农 >> 后端开发 >> PHP >> 正文

Delphi中API Hook 探秘

2010-3-10论坛收集未知
IPTOR结构,因为Delphi好像并没有定义IMAGE_IMPORT_DESCRIPTOR结构,也许是我没有找到。在我的程序里,自定义了这个结构,为了找到这个结构都快把我累疯了。你也找找吧,如果找到了可要告诉我哦。
type
PIMAGE_IMPORT_DESCRIPTOR = ^
IMAGE_IMPORT_DESCRIPTOR;
IMAGE_IMPORT_DESCRIPTOR = packed record
OriginalFirstThunk : DWORD;
TimeDateStamp : DWORD;
ForwarderChain : DWORD;
Name : DWORD;
FirstThunk : DWORD;
end;
注意,这里也使用了packed 关键字。packed record相当于C 语言中的structure(知道为什么我把packedrecord 称作结构了吧)。
还记得我们前面提到的GetModuleHandle吗?Delphi的帮助里是这么说的:“Parameters lpModuleName Pointsto a null-terminated string that names a Win32 module(either a .DLL or .EXE file)..If this parameter isNULL, GetModuleHandle returns a handle of the fileused to create the calling process.”如果我们把GetModuleHandle的参数设为NULL,哈哈,一切都有了(你有我有全都有)!
为了保证正确地拦截,我们必须穷举P E 文件中的IMAGE_IMPORT_DESCRIPTOR 数组,看是否有我们的M o d u l e (例如USER32.DLL)。如是,则穷举了IMAGE_THUNK_DATA,看是否引入了我们需拦截的函数。在我的程序里, 我穷举了P E 文件中的IMAGE_IMPORT_DESCRIPTOR 数组,并穷举IMAGE_THUNK_DATA,和我们拦截的函数的真正地址比较,如是,则替换它。这样做的好处是我们不必知道我们拦截的函数是从USER32.DLL、GDI32.DLL还是从KERNEL32.DLL中引入的。
唉,说多了让人心烦,也许你早就全知道啦,实在不行,聪明的你读读代码也就全明白了。还是看看关键的截获代码吧,这是PermuteFunction 的终极版本,只需用它代替原版本,程序就全部完成了。关键的代码只有10行哦。


4.关键的代码
(* ------------------------------------------- *)
(* PermuteFunction功能 :用 NewFunc替代 OldFunc *)
(* Windows Me + Delphi 5.0 *)
(* ------------------------------------------ *)
unit APIHook;
interface
uses
Windows, Classes ;
type
PImage_Import_Entry = ^Image_Import_Entry;
Image_Import_Entry = record
Ch

欢迎访问最专业的网吧论坛,无盘论坛,网吧经营,网咖管理,网吧专业论坛 https://bbs.txwb.com

关注天下网吧微信/下载天下网吧APP/天下网吧小程序,一起来超精彩

本文来源:论坛收集 作者:未知

声明
声明:本站所发表的文章、评论及图片仅代表作者本人观点,与本站立场无关。若文章侵犯了您的相关权益,请及时与我们联系,我们会及时处理,感谢您对本站的支持!联系邮箱:support@txwb.com,系统开号,技术支持,服务联系QQ:1175525021本站所有有注明来源为天下网吧或天下网吧论坛的原创作品,各位转载时请注明来源链接!
天下网吧 网吧天下