吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1587|回复: 14
收起左侧

[求助] 如何通过exe实现非DLL HOOK API

  [复制链接]
董督秀 发表于 2024-3-5 21:42
    例如,我想要Hook某目标程序的MessageBox函数。一般情况下,选用DLL补丁进行Hook的话,是必定可以实现的。
    但现在,我想通过exe完成跨进程Hook目标程序的MessageBox函数。例如:目标程序已经在运行。我想编写一个exe控制台程序,输入正在运行的目标进程的PID之后,对目标进程的MessageBox设置Hook。
    要想实现这种需求,都有哪些思路可供参考呢?可以提供出处,例如开源的GitHub项目或者其他参考。

免费评分

参与人数 1吾爱币 +3 热心值 +1 收起 理由
朱朱你堕落了 + 3 + 1 想法很好,不过基本上没戏。

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 董督秀 发表于 2024-5-9 05:32
已自行完美解决。没有用到附加调试/或者硬件断点,也没有用到cc断点。
iokey 发表于 2024-3-5 21:50
易语言 模块源码里有个 超级HOOK 实现了你说的功能。

免费评分

参与人数 1热心值 +1 收起 理由
董督秀 + 1 我的关注点在于,是仅通过单个exe完成跨进程的Hook吗?

查看全部评分

爱飞的猫 发表于 2024-3-5 22:08
本帖最后由 爱飞的猫 于 2024-3-5 22:17 编辑

大概思路(困难模式):

  • 编写一段 Shell Code。它需要做到下述内容:
    • 爬 PEB 表寻找拿到你想要 Hook 的 API 地址
    • 如果没有找到,那就去拿 ntdll.dll 的句柄,找到 RtlInitUnicodeString + LdrLoadDll 这两个函数来加载对应的 DLL,然后再查找一次。
    • 调用 VirtualProtect 将你要 Hook 的地方加入可写权限(一般是改为 PAGE_EXECUTE_READWRITE)。
  • 利用 VirtualAllocEx 在目标进程申请能够放下这段 Shell Code 的内存空间
    • 至少需要可执行权限
    • 利用 WriteProcessMemory 将这段代码写出去
  • 利用 CreateRemoteThreadEx 或其它 API 让目标执行你注入的这段代码

是不是听起来很麻烦?主要麻烦的点是不太方便用高级语言来折腾。


大概思路(简单模式):

  • 写个 DLL
    • DllMain 函数中进行 Hook 即可。
  • 找个 DLL 注入器把你的 DLL 注入到目标进程里就行了

DLL 注入器的代码很多,原理也大差不差:

  • 想办法找到 LoadLibraryW 的地址(提示:同系统不同进程的这个 API 的地址通常是一样的,重启后更变)
  • 利用 VirtualAllocExWriteProcessMemory 把你的 DLL 路径写出到目标进程的内存空间里
  • 调用 CreateRemoteThreadEx,线程地址为 LoadLibraryW 的地址,参数是刚刚写出的 DLL 路径的地址。

论坛里也有很多相关的源码,我随便找了个:x64注入dll源码 64位dll注入

缺点就是比较容易被发现…


如果你不希望注入任何代码,且你知道要修改的对应字节码,那么你得首先想办法得到对应函数的地址(注入代码或枚举目标进程的模块地址,然后计算偏移),最后用 WriteProcessMemory 写出你需要的更改即可。


如果你需要跨进程通信,你可以参考微软的进程间通信指南。

免费评分

参与人数 2吾爱币 +4 热心值 +2 收起 理由
你与明日 + 3 + 1 他这种直接让他用调试附加就行了.上硬件断点或CC断点
董督秀 + 1 + 1 谢谢@Thanks!

查看全部评分

blbljj008 发表于 2024-3-5 23:20

免费评分

参与人数 1吾爱币 +1 收起 理由
董督秀 + 1 谢谢@Thanks!

查看全部评分

 楼主| 董督秀 发表于 2024-3-5 23:38
在r0层面是已经被验证可以实现的。现在考虑的是仅在r3层面的,@爱飞的猫 给我的思路是,可以通过WriteProcessMemory修改函数头跳转到临时申请的内存段里执行shell code。@blbljj008 之前用过类似的,通过dll加载自己的exe,并通过自己的exe对目标exe进行操作。但我的关注点在于,这种方法能仅通过单个exe完成跨进程的Hook吗?
wright365 发表于 2024-3-6 00:29
用CreateRemoteProcess,可以不用dll
a865170 发表于 2024-3-6 04:59
我以前搞过 写shellcode,但是为毛不直接注入一个dll进入
Panel 发表于 2024-3-6 08:12
直接写进shellcode进去
xiaoweng 发表于 2024-3-6 08:30
正常情况一般是写一个dll注入进去进行API,hook,或者用超级HOOK,HOOK,MessageBox的内存地址,然后回调一个接口,在接口里面读取内容,篡改内容,超级HOOK的著名模块有 魔鬼作坊,乐易,等一些开源的超级HOOK
幽溪左畔 发表于 2024-3-6 08:37
本帖最后由 幽溪左畔 于 2024-3-6 08:38 编辑

亲,了解下调试器附加下断点的原理?
https://github.com/DarthTon/Blackbone/blob/master/src/BlackBone/Process/RPC/RemoteHook.cpp
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 14:37

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表