开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 28729|回复: 12
收起左侧

[Windows逆向] PC wx逆向hook原理及偏移计算方法

[复制链接]
结帖率:61% (23/38)
发表于 2022-2-19 11:27:40 | 显示全部楼层 |阅读模式   辽宁省沈阳市
论坛很多教程都是直接找偏移调用模块直接HOOK的,今天从hook原理层分析下hook实现的方式,用wx为例
文章内容只做技术分析,技术交流,为保护分析软件隐私部分代码已经被更改,不能直接使用。

Hook (wechatwin_基址 + 偏移, 6, { 96, 86, 232, 0, 0, 0, 0, 97 }, 到整数 (&接收消息), 真)  5个参数

hook地址:wechatwin_基址 + 偏移,

备份长度:6
调用数据: { 96, 86, 232, 0, 0, 0, 0, 97 }
回调地址:到整数 (&接收消息)
是否前置我们的代码: 真
===============================================
    回调偏移 = 寻找字节集 (调用数据, { 232 }, )
    原字节集 = 取空白字节集 (备份长度)
    写入长度 = 取字节集长度 (调用数据)
    ReadProcessMemory (-1, Hook地址, 原字节集, 备份长度, 备份长度)  ' 备份Hook前数据
    JPM_地址 = VirtualAlloc (0, 1024, 位或 (#MEM_COMMIT, #MEM_RESERVE), #PAGE_EXECUTE_READWRITE)  ' <!!!> 申请地址

    回调偏移 = 回调偏移 + 备份长度
    WriteProcessMemory (-1, JPM_地址, 原字节集, 取字节集长度 (原字节集), 0)  ' 恢复之前Hook覆盖掉的代码
    WriteProcessMemory (-1, JPM_地址 + 备份长度, 调用数据, 写入长度, 0)  ' 往申请的内存写入我们首次传过来的数据
    WriteProcessMemory (-1, JPM_地址 + 回调偏移, 偏移计算 (JPM_地址 + 回调偏移 - 1, 回调地址), 4, 0)  ' 目标地址 - 原地址 - 5
    WriteProcessMemory (-1, JPM_地址 + 备份长度 + 写入长度, { 233 } + 偏移计算 (JPM_地址 + 写入长度 + 备份长度, Hook地址 + 备份长度), 5, 0)  ' 跳回Hook后下条执行的地址

    WriteProcessMemory (-1, Hook地址, { 233 } + 偏移计算 (Hook地址, JPM_地址), 5, 0)  ' 写入Hook的Jmp地址
    .计次循环首 (备份长度 - 5, )  ' 这里默认为Jmp  5个字节 多余的填充PON
    填充Dm = 填充Dm + { 144 }
     .计次循环尾 ()
    .如果真 (取字节集长度 (填充Dm) ≠ 0)
        WriteProcessMemory (-1, Hook地址 + 5, 填充Dm, 取字节集长度 (填充Dm), 0)  ' 超过5个字节用PON填充
===============================================

     hook前OD代码样子 (要hook选中项位置)
     (图1)
      hook后OD代码样子 (hook点已被我们自己的代码所替换)
     (图2)
     上方代码具体步骤:
     一、备份原先hook点数据:
          回调偏移 = 寻找字节集 (调用数据, { 232 }, )   ‘调用数据:{ 96, 86, 232, 0, 0, 0, 0, 97 }  回调偏移计算结果为3,即取96,86,232的位置
          原字节集 = 取空白字节集 (备份长度)      ‘====6长度的字节集
          写入长度 = 取字节集长度 (调用数据)      ‘====8
          ReadProcessMemory (-1, Hook地址, 原字节集, 备份长度, 备份长度)  ' 备份Hook前数据  (第一张图片选中行数据)
         (图3)
          JPM_地址 = VirtualAlloc (0, 1024, 位或 (#MEM_COMMIT, #MEM_RESERVE), #PAGE_EXECUTE_READWRITE)  ' <!!!> 申请地址
          JPM_地址 =00AF0000  (如上图)
          回调偏移 = 回调偏移 + 备份长度   ‘3+6=9
          WriteProcessMemory (-1, JPM_地址, 原字节集, 取字节集长度 (原字节集), 0)  ' 在我们新申请的地址,恢复之前Hook覆盖掉的代码
          WriteProcessMemory (-1, JPM_地址 + 备份长度, 调用数据, 写入长度, 0)  ' 往申请的内存写入我们首次传过来的数据{ 96, 86, 232, 0, 0, 0, 0, 97 }
          WriteProcessMemory (-1, JPM_地址 + 回调偏移, 偏移计算 (JPM_地址 + 回调偏移 - 1, 回调地址), 4, 0)  '偏移计算= 目标地址 - 原地址 - 5
          ***偏移计算=回调地址-(JPM_地址 + 回调偏移 - 1)-5   ‘计算出我们自己回调函数的jmp地址,写入{ 96, 86, 232, 0, 0, 0, 0, 97 } 中,0,0,0,0的位置
         (图4)
          WriteProcessMemory (-1, JPM_地址 + 备份长度 + 写入长度, { 233 } + 偏移计算 (JPM_地址 + 写入长度 + 备份长度, Hook地址 + 备份长度), 5, 0)  ' 跳回Hook后下条执行的地址
          (图5)
            写入这条语句
          WriteProcessMemory (-1, Hook地址, { 233 } + 偏移计算 (Hook地址, JPM_地址), 5, 0)  ' 写入Hook的Jmp地址
           (图6)
          在原程序hook点写入我们的jmp地址
          由于jmp 地址只需要五位,如果备份的数据多,这里要把多余的数据用nop填充
           (图7)
           WriteProcessMemory (-1, Hook地址 + 5, 填充Dm, 取字节集长度 (填充Dm), 0)  ' 超过5个字节用PON填充
           到此先备份数据,再执行我们函数的hook代码结束。

           码字不易,请多点赞,赞赏,欢迎技术交流分析 群:674056030



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2024-10-18 18:07:43 | 显示全部楼层   河南省安阳市
有QQhook的代码吗 大神
回复 支持 反对

使用道具 举报

发表于 2024-10-3 20:09:27 | 显示全部楼层   北京市北京市
很好的代码
回复 支持 反对

使用道具 举报

签到天数: 13 天

发表于 2023-3-17 08:53:46 | 显示全部楼层   广东省茂名市

假装能看懂
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 1 天

发表于 2023-3-16 16:33:21 | 显示全部楼层   重庆市重庆市
原来不止我一个人看不懂,哈哈哈....放心了
回复 支持 反对

使用道具 举报

发表于 2022-11-11 20:34:59 | 显示全部楼层   河北省保定市
假装能看懂
回复 支持 反对

使用道具 举报

发表于 2022-6-11 21:41:29 | 显示全部楼层   山西省太原市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:67% (2/3)

签到天数: 1 天

发表于 2022-3-23 23:06:13 | 显示全部楼层   广东省珠海市
一脸懵逼!!!!!!!!!!!!
回复 支持 反对

使用道具 举报

结帖率:97% (97/100)

签到天数: 2 天

发表于 2022-2-21 21:31:17 | 显示全部楼层   内蒙古自治区*
鄙人太菜 看不懂
回复 支持 反对

使用道具 举报

结帖率:94% (29/31)

签到天数: 21 天

发表于 2022-2-21 20:37:44 | 显示全部楼层   四川省成都市
一脸懵逼!!!!!!!!!!!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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