Wow64Injectx64代码无效,32位程序向64进程注入64dll的问题

圆道 2021-04-20 10:47:58
今天研究32位注入64位DLL到64位程序进程里,找到了大家说的
GitHub上的开源库rewolf-wow64ext
https://github.com/ChengChengCC/Ark-tools/tree/master/Wow64Injectx64
直接可以编译成功,无错误代码。
然后自己额外写了个64位EXE程序运行起来作为被注入的64位进程目标对象

dll是64位的一个简单的 Messagebox.DLL
目标对象是64位程序(自己写的64位的exe执行程序)

发现这份 开源库rewolf-wow64ext 根本无法对64位程序进程进行64位DLL文件注入,源代码提示是注入成功的。
有人知道要怎么修改吗?
...全文
1731 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
圆道 2021-04-23
  • 打赏
  • 举报
回复
引用 15 楼 _mervyn 的回复:
不用啊。。 不是说了吗, 你也可以参照9楼的办法。 另外写一个64位的帮助进程,由这个进程CreateRemoteThread注入。
你这个方法好像有道理,我试试看先!
  • 打赏
  • 举报
回复
引用 18 楼 圆道 的回复:
[quote=引用 14 楼 zjq9931 的回复:]MHOOK这个库也是不错的。
mhook可以把在32位进程里将64位DLL注入到64进程里?[/quote] 不行。唉,怎么这么奇怪的要求呢?
_mervyn 2021-04-22
  • 打赏
  • 举报
回复
引用 13 楼 圆道 的回复:
32进程和64进程 API地址是不一样的。只能借助wow64ext这样的库来获取64API的地址再用RtlCreateUserThread LdrLoadDll 再创建远程线程,但是一注入目标不是没反应就是崩溃。估计还是注入的内容有问题。
不用啊。。 不是说了吗, 你也可以参照9楼的办法。 另外写一个64位的帮助进程,由这个进程CreateRemoteThread注入。
  • 打赏
  • 举报
回复
MHOOK这个库也是不错的。
圆道 2021-04-22
  • 打赏
  • 举报
回复
32进程和64进程 API地址是不一样的。只能借助wow64ext这样的库来获取64API的地址再用RtlCreateUserThread LdrLoadDll 再创建远程线程,但是一注入目标不是没反应就是崩溃。估计还是注入的内容有问题。
牧牛童子 2021-04-22
  • 打赏
  • 举报
回复
留个脚印,后面找时间来琢磨一下。对该主题有兴趣。
圆道 2021-04-22
  • 打赏
  • 举报
回复
引用 14 楼 zjq9931 的回复:
MHOOK这个库也是不错的。
mhook可以把在32位进程里将64位DLL注入到64进程里?
圆道 2021-04-21
  • 打赏
  • 举报
回复
我用的VS2017 是用管理员模式的, 微软官方的detours库。 他只要自身是64位的 将64DLL注入到64进程 ,我是自身是32位的将64DLL注入到64进程 。detours只能完成注入后HOOK API的部分
_mervyn 2021-04-21
  • 打赏
  • 举报
回复
引用 11 楼 圆道 的回复:
DetourCreateProcessWithDllEx 这个函数是不是只能创建进程再注入,如果目标进程已经存在的呢?还能注入吗?
那就不能了。 这种情况的话,修改导入表已经没用了。 只能自己用另外注入方式了。可以用CreateRemoteThread,以LoadLibaray为线程体载入目标DLL。 当然帮助进程还是需要的,这样最稳妥。
_mervyn 2021-04-21
  • 打赏
  • 举报
回复
推荐 微软官方的detours库。 https://github.com/microsoft/detours 有创建并注入的函数 DetourCreateProcessWithDllEx: https://github.com/microsoft/Detours/wiki/DetourCreateProcessWithDllEx 微软官方出品,兼容性根本不用担心,功能强大。自己看下wiki吧。 windows上做注入、hook、文件分析的不二选择。
赵4老师 2021-04-21
  • 打赏
  • 举报
回复
以管理员身份运行
圆道 2021-04-21
  • 打赏
  • 举报
回复
DetourCreateProcessWithDllEx 这个函数是不是只能创建进程再注入,如果目标进程已经存在的呢?还能注入吗?
_mervyn 2021-04-21
  • 打赏
  • 举报
回复
引用 7 楼 圆道 的回复:
我用的VS2017 是用管理员模式的, 微软官方的detours库。 他只要自身是64位的 将64DLL注入到64进程 ,我是自身是32位的将64DLL注入到64进程 。detours只能完成注入后HOOK API的部分
你真的用过吗? 或者你是以前用过? 我上面不是给了你API了吗? 它有注入的功能,基本方式是 suspend启动目标进程,修改导入表,恢复进程运行。 如果是 32位进程注入64位进程,或者64位进程注入32位进程。 它会借助 系统进程rundll32.exe 来完成注入 基本原理是:启动对应位数的系统进程rundll32.exe来加载待注入dll并调用detours事先规定的必须导出的函数(detours实现,不需要用户实现),该导出函数完成对目标进程的注入。(具体可以自己去看源码) 多说无益,自己试了就知道。
引用 9 楼 早打大打打核战争 的回复:
没用,只要系统启用ASLR(Address Space Layout Randomization),这种旁门左道都会失败,因为64位进程会被加载到4GB以上的随机地址 简单的解决方法就是32位注入32位、64位注入64位,64位注入程序作为资源捆绑到32位程序中,需要的时候释放为临时文件,执行它即可
你说的没错,detours就是这么做的。只不过它没有自己写x64的帮助进程,而是利用了系统进程rundll32.exe
  • 打赏
  • 举报
回复
没用,只要系统启用ASLR(Address Space Layout Randomization),这种旁门左道都会失败,因为64位进程会被加载到4GB以上的随机地址
简单的解决方法就是32位注入32位、64位注入64位,64位注入程序作为资源捆绑到32位程序中,需要的时候释放为临时文件,执行它即可
赵4老师 2021-04-20
  • 打赏
  • 举报
回复
提权了吗 ?
圆道 2021-04-20
  • 打赏
  • 举报
回复
看过了,没注入成功,那个开源库有问题,
圆道 2021-04-20
  • 打赏
  • 举报
回复
引用 1 楼 赵4老师 的回复:
提权了吗 ?
他这个Wow64Injectx64库里 都有操作的。

65,198

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧