导航:
论坛 -> 开源项目
斑竹:joki,ralf_jones
作者:
lsuper (lsuper)
★☆☆☆☆
-
盒子活跃会员
2016/10/5 0:16:54
标题:
DelphiHookUtils @ github
浏览:7359
加入我的收藏
楼主:
开源 DelphiHookUtils,基于 wr960204 武大哥版本修改 ~ 国庆帝都雾霾,一直闷家里发霉,也终于有时间搞搞自己的东东了! 年初基于 wr960204 武稀松大哥的 HookUtils 写了个 x64 的东东,效果很 8 错,不过呢,这个实现基于 BeaEngine 的静态库,额外胖了几百 K,对于我这只有“洁癖”的程序员,着实不爽! 之前关注过 BeaEngine 官网还有个 LDE64(Length Disassembler Engine)的东东,事实上对于武大哥那份 Hook 的实现,BeaEngine 只是为了查找足够的“代码间隙”,其实单个 LDE 应该是 ok 的! 遂,花了两天时间搞了这个东东: https://github.com/delphilite/DelphiHookUtils 基于 LDE64 相对 BeaEngine 的优势非常明显,新 HookUtils 代码编译大约 10K 左右,相对武大哥“原版”,新版 HookUtils 主要修改: 1、参考 wr960204 武稀松 的原始实现: https://code.google.com/p/delphi-hook-library 2、修改 BeaEngine 引擎为 LDE64 长度反编译引擎,大幅降低大小 https://github.com/BeaEngine/lde64 3、去除原始实现对多线程冻结的处理,通常建议 Hook/Unhook 放到单元初始化、析构中做,否则可能因改写内存没挂起其他线程造成错误 4、由 HookUtils 中拆分 COM 相关函数至 HookIntfs 单元 初步 Delphi 2007-10.1 x86/x64 for Win 一切正常,大家有问题及时反馈 !?
----------------------------------------------
-
作者:
2016/10/5 4:17:50
1楼:
谨祝各位老Delphier们共同进步!!
----------------------------------------------
只有偏执狂才能生存!
作者:
2016/10/5 6:41:42
2楼:
强烈支持先。。。已 Star.
----------------------------------------------
-
作者:
yaoyl (云里雾里)
★☆☆☆☆
-
盒子活跃会员
2016/10/5 9:02:54
3楼:
期待你的Lite……
----------------------------------------------
Delphi老菜鸟~
作者:
bdl1 (bdl1)
▲▲▲▲▲
-
普通会员
2016/10/5 9:26:58
4楼:
牛!
----------------------------------------------
-我的博客
作者:
2016/10/5 9:59:02
5楼:
非常感谢!!!学习!祝国庆快乐!
----------------------------------------------
你我,都可以是个造梦者!欢迎加入脚本引擎PaxCompiler交流群303904495http://www.cnblogs.com/fireboxsoft有需要错别字检测软件的朋友可以在我博客上的地址下载使用,备注“2ccc”的朋友可以免费获取超级黄金VVVVVVVVVVIP授权
作者:
2016/10/5 12:57:04
6楼:
先收藏了
----------------------------------------------
-
作者:
2016/10/5 13:02:37
7楼:
期待你的Lite……期待你的Lite……
----------------------------------------------
菩提本无树,明镜亦非台,本来无一物,何处惹尘埃
作者:
2016/10/5 13:06:43
8楼:
已经git下来等需要时在学习,谢谢lusper
----------------------------------------------
-
作者:
2016/10/5 17:58:23
9楼:
楼主实力派
----------------------------------------------
QQ: 9717005 我的Blog:http://www.cnblogs.com/anydelphi/
作者:
2016/10/5 20:41:17
10楼:
赞!
----------------------------------------------
喜欢Delphi,关注Delphi,愿和广大爱好者交朋友。
作者:
2016/10/6 0:39:14
11楼:
https://github.com/delphilite/DelphiHookUtils上不去,楼主能否给个下载包?
----------------------------------------------
-
作者:
2016/10/6 11:57:05
13楼:
好东西 手下了 赞!
----------------------------------------------
-
作者:
2016/10/6 14:32:01
14楼:
@kaida 多谢
----------------------------------------------
-
作者:
2016/10/6 14:43:44
15楼:
lsuper做了件好事啊,我对现有的HookUtils也一直有要修改的想法,只是没时间。 赞一个!
----------------------------------------------
武稀松http://www.raysoftware.cn
作者:
2016/10/6 21:44:51
16楼:
真是太赞了
----------------------------------------------
-
作者:
2016/10/6 21:58:15
17楼:
楼主厉害!
----------------------------------------------
-
作者:
2016/10/6 22:09:40
18楼:
话说回来,这东西的应用场景是哪些方面啊?下的钩子都是自身的,莫非还要注入到对方进程里下钩子吗?
----------------------------------------------
-
作者:
lsuper (lsuper)
★☆☆☆☆
-
盒子活跃会员
2016/10/6 23:52:06
19楼:
@bbnn38 (伟大的咸鱼);AOP 这个思想还是很牛 b 的;搞别的进程远程注入或者 hijack 都可以 ~
----------------------------------------------
-
作者:
yxsoft (yxsoft)
★☆☆☆☆
-
盒子活跃会员
2016/10/7 0:48:18
20楼:
收藏先
----------------------------------------------
Great!
作者:
2016/10/7 8:44:12
21楼:
收藏
----------------------------------------------
-
作者:
jfhyn (贺兰之边)
★☆☆☆☆
-
普通会员
2016/10/7 10:42:49
22楼:
必须顶!
----------------------------------------------
-
作者:
gmxyb (gmxyb)
★☆☆☆☆
-
普通会员
2016/10/7 22:24:34
23楼:
支持~! 不过武大神原来的版本有个小问题(也许是我不会用),不知道解决没有? 这个问题是这样的:在一个dll中用HookProcInModule去钩WinInet.dll中的 HttpOpenRequestW函数成功,但是无法用UnHook卸掉,总是返回 False.
----------------------------------------------
-
作者:
gmxyb (gmxyb)
★☆☆☆☆
-
普通会员
2016/10/7 22:29:04
24楼:
补充一下23楼问题: 在 DLL_PROCESS_ATTACH 时 HookProcInModule,成功; 在 DLL_PROCESS_DETACH 时 UnHook,失败,总是返回 False.
----------------------------------------------
-
作者:
lsuper (lsuper)
★☆☆☆☆
-
盒子活跃会员
2016/10/8 9:53:32
25楼:
@gmxyb (gmxyb):有例子么?我 debug 一下 ~ @google220 (google220):内测中 ~ ;>
----------------------------------------------
-
作者:
gmxyb (gmxyb)
★☆☆☆☆
-
普通会员
2016/10/8 12:48:51
26楼:
@lsuper: dll简化代码如下,dll 其实是个 ActiveX, 被IE载入调用的。 ////////// library HookDemo; uses Windows, SysUtils, WinInet, HookUtils; // 原始指针保存在 old_HttpOpenRequestW 变量中, 复制 WinInet 中的定义 var old_HttpOpenRequestW : function(hConnect: HINTERNET; lpszVerb: LPWSTR; lpszObjectName: LPWSTR; lpszVersion: LPWSTR; lpszReferrer: LPWSTR; lplpszAcceptTypes: PLPSTR; dwFlags: DWORD; dwContext: DWORD_PTR): HINTERNET; stdcall; // 挂接的 Hook函数 new_HttpOpenRequestW function new_HttpOpenRequestW(hConnect: HINTERNET; lpszVerb: LPWSTR; lpszObjectName: LPWSTR; lpszVersion: LPWSTR; lpszReferrer: LPWSTR; lplpszAcceptTypes: PLPSTR; dwFlags: DWORD; dwContext: DWORD_PTR): HINTERNET; stdcall; var s : string; begin // 先直接调用原始函数 Result := old_HttpOpenRequestW(hConnect, lpszVerb, lpszObjectName, lpszVersion, lpszReferrer, lplpszAcceptTypes, dwFlags, dwContext); if Result = nil then begin // 打印错误... Exit; end; // 添加自定义的http标头 s := 'X-MyHttpHeader: HeaderValue'; if not Wininet.HttpAddRequestHeaders(Result, PChar(h), Length(h), Wininet.HTTP_ADDREQ_FLAG_ADD or Wininet.HTTP_ADDREQ_FLAG_REPLACE) then begin // 打印错误... Exit; end; end; procedure _DllEntryPoint(dwReason: DWORD); //èë3ö¿úoˉêy begin case dwReason of DLL_PROCESS_ATTACH : begin if HookUtils.HookProcInModule(PChar('WinInet.dll'), PChar('HttpOpenRequestW'), @new_HttpOpenRequestW, @old_HttpOpenRequestW) then begin // Hook 成功... <--这里正常 end else begin // Hook 失败... end; end; DLL_PROCESS_DETACH : begin if HookUtils.UnHook(@old_HttpOpenRequestW) then begin // UnHook 成功... end else begin // UnHook 失败...<--这里总是失败 end; end; DLL_THREAD_ATTACH : begin end; DLL_THREAD_DETACH : begin end; end; end; begin SysInit.DllProc:=@_DllEntryPoint; _DllEntryPoint(DLL_PROCESS_ATTACH); end.
----------------------------------------------
-
作者:
2016/10/9 0:14:45
27楼:
@gmxyb 失败是因为你赋值的old_HttpOpenRequestW变量是在你调用的那份DLL里,加载到HOOK内存里的那一份DLL的old_HttpOpenRequestW变量值未赋值,old_HttpOpenRequestW这个变量必须是能跨进程访问的。
----------------------------------------------
-
作者:
lsuper (lsuper)
★☆☆☆☆
-
盒子活跃会员
2016/10/9 10:44:42
28楼:
@xiucai (xiucai):每个 dll 在自己的进程空间内都有自己的堆和栈数据结构,所有没问题 @gmxyb (gmxyb):感谢反馈,确实是个小 bug,已改,同时整合了你这个小例子,请更新 git ~ ;>
----------------------------------------------
-
作者:
gmxyb (gmxyb)
★☆☆☆☆
-
普通会员
2016/10/9 13:17:56
29楼:
@lsuper 非常感谢 ~ @xiucai dll与加载它的主进程是在同一个地址空间的,不涉及跨进称问题。
----------------------------------------------
-
作者:
2016/11/2 13:27:34
30楼:
杩欎釜蹇呴』鏀寔
----------------------------------------------
我和我追逐的梦,擦肩而过
作者:
dna32r (DNA32r)
★☆☆☆☆
-
盒子活跃会员
2016/11/3 15:53:16
31楼:
用我翻译的HackerDisasmEngine吧 同时支持x86和x64 而且我也写了一个另外的库
----------------------------------------------
-
作者:
2016/11/3 16:07:41
32楼:
楼上的有下载地址吗?
----------------------------------------------
(C)(P)Flying Wang
作者:
jingzu (123456)
★☆☆☆☆
-
盒子活跃会员
2021/8/9 8:21:11
33楼:
要求 1:hook 任意地址 2:JMP到我们myfuc后,在我们的myfuc先执行hook掉的代码,再执行我们代码。 这样的要求如何做呢?
----------------------------------------------
永远是DELPHI初学者。
作者:
jingzu (123456)
★☆☆☆☆
-
盒子活跃会员
2021/8/9 8:25:30
34楼:
...... push ebp ...... mov ebp,esp 77c8003b 8908 mov dword prt ds:[eax],ecx //hook这里 假如我们要读出ecx的值 77c8003d 8950 04 mov dwrod ptr ds:[eax+0x4],edx 77c80041 mov ebx,[eax] ..... add ebx,[eax+0x4] ..... mov eax,ebx ..... mov esp,ebp ..... pop ebp ..... ret function myfunction() begin //注意在裸函数里面不能进行变量的申请和赋值 asm mov dword ptr ds:[eax],ecx mov dword ptr ds:[eax+0x4],edx //这两条是原来的代码我们不能破坏,要加上去 //这里开始我们要读出ecx寄存器里的值了 //要保证我们的代码不会破坏堆栈和寄存器的值 mov result,ecx //将ecx的值赋值给result jmp retAddress //这里因为不需要转换成机器码,所以直接jmp回去地址就行了 end; end; 这样,如何实现?
----------------------------------------------
永远是DELPHI初学者。
作者:
abencat (远离delphi的人)
★☆☆☆☆
-
盒子活跃会员
2021/8/9 10:01:12
35楼:
跟着大神的脚本学习
----------------------------------------------
delphi爱好者
作者:
2021/8/9 22:17:39
36楼:
不错,还带有DEMO,感觉入门了不错,还带有DEMO,感觉入门了
----------------------------------------------
-
作者:
2023/10/1 17:28:42
37楼:
谢谢分享
----------------------------------------------
-
作者:
2023/10/2 16:09:43
38楼:
撸大哥是我坚持D的路上,坚强后盾
----------------------------------------------
-
作者:
yxsoft (yxsoft)
★☆☆☆☆
-
盒子活跃会员
2023/10/2 16:34:32
39楼:
感觉会用到,先顶!!
----------------------------------------------
Great!
作者:
mynet (if)
★☆☆☆☆
-
盒子活跃会员
2023/10/7 9:55:56
40楼:
谢谢分享!
----------------------------------------------
-