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

Delphi中API Hook 探秘

2010-3-10论坛收集未知
IMPORT].VirtualAddress;
if RVA = 0 then exit;
ImportDesc := pointer(integer(Dos)+RVA);
While(ImportDesc^.Name<>0) do
begin
DLL := PChar(Integer(Dos) + ImportDesc^.Name);
PermuteAddrInModule(GetModuleHandle(PChar(DLL)),
OldFunc,NewFunc);
Func := Pointer(Integer(DOS) + ImportDesc.LookupTable);
While Func^ <> nil do
begin
f := TrueFunctionAddress(Func^);
if f = OldFunc then
begin
WriteProcesSMemory(GetCurrentProcess,Func,
@NewFunc,4,written);
If Written > 0 then Inc(Result);
end;
Inc(Func);
end;
Inc(ImportDesc);
end;
end;
begin
IsDone := TList.Create;
try
Result := PermuteAddrInModule(GetModuleHandle(nil),
OldFunc,NewFunc);
finally
IsDone.Free;
end;
end;
end.
我们测试一下。运行TRY2..怎么,又失败了?天啊!(我蒙上眼睛)不要这么悲观嘛!我们不要在Delphi的编译环境下运行它们。不必关闭Delphi,我们来到资源管理器,找到刚才编译好的TRY2.exe,再运行它。怎么样,成功了吧?我想,这就是大多数人没有用Delphi编写成功API Hook 的原因吧。不过,你知道其中的原因吗?就算是留给你的作业题了。再测试一下。我们发现TRY2运行时本进程就会挂上钩子,而TESTTRY需要运行TRY2中的BUTTON1后才挂上钩子,这是对的。因为TRY2运行时就会加载TRYDLL.D L L ,而其他的进程需要S e t W i n d o w s H o o k E x(WH_GETMESSAGE, @GetMsgProc, HInstance, 0)运行后才会加载TRYDLL.DLL。
一切OK!怎么样?用它编了什么好程序也让我分享分享哦。

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

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

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

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