请教劫持 DLL (非 Win32 API) 的简单方法 - 有完整头文件

2021-09-03 17:44:54 +08:00
 nealot
假设有一个应用程序 x.exe 在运行时会调用 y.dll ;假设 y 是用 C 语言编写的,已经拿到了 y.dll 的头文件 (.h)

现在我想在 y.dll 中的部分函数被调用时,输出函数的调用参数以便观察 (可以输出到临时文件),请问比较简单的方法有哪些?

API 中总共有七八十个函数的样子,需要打印信息函数的有两三个
1610 次点击
所在节点    程序员
9 条回复
ysc3839
2021-09-03 18:19:05 +08:00
只要改其中少数几个的话,可能用 hook 更简单,但是你得在 x.exe 调用 y.dll 之前就 hook 。
codehz
2021-09-03 18:23:28 +08:00
有头文件的话。。你直接把原 dll 改个名,然后你做个假的 dll 转发每个函数进去就好了。。。
janxin
2021-09-03 18:53:43 +08:00
听上去 AheadLib 之类的工具就能满足你的需求
mingl0280
2021-09-03 21:47:22 +08:00
函数打桩(你可以自己搜一下)就行了,这个比较简单,原理就是替换掉函数入口地址上的指令,改成 jmp 到你自己的地址处理完了再接着调用原来的函数。
typetraits
2021-09-03 21:54:12 +08:00
2 楼的方法是最快的,自己写个签名相同的 wrapper 函数编译成 dll,在你自己的 dll 里调用 LoadLibrary GetProcAddress 加载 y.dll 的函数就可以了
liberize
2021-09-03 22:20:13 +08:00
IsaacYoung
2021-09-03 22:55:39 +08:00
微软有 detours 的库 专门 hook 用的
thedrwu
2021-09-04 05:22:29 +08:00
如果不想挂函数钩子也不想 wrap 整个 dll,那就再挂个自己的 dll 把原本的函数地主改了或者设个 jmp 再跳回去。
jones2000
2021-09-04 06:42:39 +08:00
一定要小心。 否则要被请去喝茶。
《刑法》第二百八十五条 [非法侵入计算机信息系统罪;非法获取计算机信息系统数据、非法控制计算机信息系统罪;提供侵入、非法控制计算机信息系统程序、工具罪]

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/799726

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX