开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 13550|回复: 145
打印 上一主题 下一主题
收起左侧

[易语言纯源码] 【hook】脚本注入,人造指针

    [复制链接]
结帖率:92% (35/38)
跳转到指定楼层
发表于 2024-1-16 15:01:24 | 只看该作者 回帖奖励 |正序浏览 |阅读模式   湖南省长沙市
分享源码
界面截图:
是否带模块: 调用了模块
备注说明: -
本帖最后由 大兔崽子 于 2024-1-17 09:13 编辑


起初,是因为这个原因,想要学习下如何寻找基_址,后面,在一众大佬的热心帮助下。
热心大佬太多,就不一一感谢了。

我终于放弃了找基_址,太难了, CE自带的小游戏 都刷了一遍,多级指针的也玩明白了,但是,依然找不到我这个小游戏的基_址

后面,了解到CE有人造指针,简单来说,就是 通过hook注入自己的脚本,在某个位置,让程序将寄存器的值,赋值到我们指定的 内存地址中,
这样,我们通过访问这个内存地址 ,就能拿到数据的地址了,不再需要寻找游戏的基_址,后续就能做想要的操作了
(当然,也可以注入 其他的汇编操作,比如 在击杀结算的位置,有这么一句话 mov [ebx],eax,// ebx 是经验地址,eax 是当前经验,也就是打完怪了,修改角色的经验值
我们就可以在这句话之前,注入个代码 add eax,3E8 // 3E8 是十六进制,换成10进制就是1000
这样 就实现了,打怪击杀,经验追加1000的效果,升级更快


[开源] 易语言超级模块简单取寄存器地址,以及模拟CE所谓的人造指针开源分享
https://125.confly.eu.org/forum.php?mod=viewthread&tid=14121443&highlight=%E4%BA%BA%E9%80%A0%E6%8C%87%E9%92%88


在这位大佬的源码基础上,我对代码进行了修改与封装,做成了模块,更方便调用了
(上面的源码有问题的,我们只需要取某个寄存器的值,他注入时,将所有寄存器的取值都注入了,这样会导致,寄存器没有压入栈 就会闪退)



模块中有附带一个使用例子, 可以很好上手看懂
内存hook.rar (821.22 KB, 下载次数: 268)

接下来的内容适合 hook小白,大佬就可以跳过了

想要hook,我们首先得找到 hook的目标地址,已这个简单的小游戏为例,先使用ce 寻找到经验的地址

选中找到的地址,按F6,监听是谁改写了这个地址 ,再去操作游戏,让经验值发生变化


进入地址的汇编代码界面



进入这个界面后,标蓝色的  就是我们刚刚的关键位置,我们选择注入 也就要选择在这附近进行注入,
[Asm] 纯文本查看 复制代码
简易游戏.exe+2000 - E8 FAF8FFFF           - call 简易游戏.exe+18FF
简易游戏.exe+2005 - 8B 5D F0              - mov ebx,[ebp-10]
简易游戏.exe+2008 - 89 03                 - mov [ebx],eax   // 这儿是程序的增加经验值的位置
简易游戏.exe+200A - 8B 1D 30B74A00        - mov ebx,[简易游戏.exe+AB730] { (005DE9E0) }
简易游戏.exe+2010 - E8 EFEFFFFF           - call 简易游戏.exe+1004
简易游戏.exe+2015 - 53                    - push ebx
简易游戏.exe+2016 - 51                    - push ecx
简易游戏.exe+2017 - 8B 45 F4              - mov eax,[ebp-0C]


我们只需要简单的了解一点点  汇编知识即可,  比如  mov  是赋值语句,call 是调用子程序   push 是入栈,jmp 是跳转, add 是加法  ...  
eax,ebx,ecx  。。。  等等  这种都是寄存器的代名词,用来暂时存放参与运算的数据和运算结果
其中,eax  代表着  eax 寄存器的值,[eax] 代表的就是  eax地址的值(也就是,eax寄存器的值是一个内存地址,然后 [eax] 代表的是这个内存地址的值,这里要重点注意!!!

mov [ebx],eax // 通过上面简单的了解,我们就能看懂  这句就是说,  将  eax的值,赋值给  ebx指针(也就是ebx寄存器存储的地址)
那么,也就意味着,此时,ebx寄存器 存放的地址 就是我们想要的经验的地址,
那么,我们就可以增加hook代码,让游戏将 ebx的值,也传递给我们,我们拿到地址后,  后面就能为所欲为了!!!

好了,那我们说干就干,怎么hook呢,通常,我们是在选定的位置,  修改原代码,  变成一个  jmp xxxx  ,xxxx 是我们自己申请的内存地址,
也就是  让程序走到这儿时,跳转到我们的代码段, 等运行完,再跳转回来即可,

然后  在32位的程序中, jmp 的代码  是要占用5个字节的,
简易游戏.exe+2008 - 89 03                 - mov [ebx],eax   这句话 只有2个字节,显然不够我们注入 (89 03  代表的就是2个字节)
所以,我们注入的话,  要么 向下 占用字节   ,要么 将注入位置 向上移动一行,往上占用字节

向上的话 ,  就是在  2005  这个位置  进行注入     8B 5D F0 89 03   刚好5个字节
[Asm] 纯文本查看 复制代码
简易游戏.exe+2005 - 8B 5D F0              - mov ebx,[ebp-10]
简易游戏.exe+2008 - 89 03                 - mov [ebx],eax


向下的话  就是    89 03 8B 1D 30B74A00   一共8个字节
[Asm] 纯文本查看 复制代码
简易游戏.exe+2008 - 89 03                 - mov [ebx],eax
简易游戏.exe+200A - 8B 1D 30B74A00        - mov ebx,[简易游戏.exe+AB730] { (005DE9E0) }


这儿我选择向上一行,原因的话  是因为  向上的mov 赋值操作  是对寄存器的操作,  是不容易出错,
mov ebx,[简易游戏.exe+AB730] { (005DE9E0) }    这个操作的话,  有对其他静态地址的操作,  我没有尝试 hook后 会不会出错

很好,我们已经确定好注入的位置了,那么,铺垫了这么久,究竟如何注入呢,

我们双击注入行,  就能在弹出的小框中  查看到 该位置的 内存地址了
00402005  // 要注意, 这是十六进制的 地址,也可以写作  402005  多的0 只是补位,不影响大橘

  
子程序名返回值类型公开备 注
子程序1  
内存Hook.初始化 (程_进程ID, )
程_指针标识 = 内存Hook.注入_寄存器 (进制_十六到十 (“402005”), 5, “ebx”, 0, )


首先初始化 ,主要是用来绑定 游戏的进程ID

然后 通过 模块的  注入_寄存器 传入 注入的地址,以及  要获取的 寄存器 名字 ,这儿,我们的经验地址 暂时是存放在 ebx 寄存器的, 所以,我们就填ebx
注入完成后, 会返回  一个注入标识

后续,通过  内存Hook.取值_寄存器 (程_指针标识)   来获取  寄存器 传递出来的地址 ,
当拿到了  地址,  后面 就可以使用 内存操作类, 对地址 进行  读写操作,  就能为所欲为了,  也可以将 该目标地址  作为 游戏jz,进行偏移,找到附近的 其他地址,
例如,这个游戏中, 就可以  +4  -4  得到 等级 和升级经验的地址


上面,注入的方法,我们是直接写死了  注入地址,通常来说,只要游戏版本不变,通常也不会出问题,  但如果版本变了,  内存地址 可能就发生了变化,导致我们辛辛苦苦写的代码就不能用了

所以我们还可以用第二种方案,  通过特征码去搜索  内存地址 ,然后再注入

比如 上面 这个位置的特征码  就是  8B 5D F0 89 03
我们使用  内存Hook.特征码搜索 (“8B 5D F0 89 03”)   就能拿到 符合这个特征码的  内存地址,  
再进行注入  就没问题了。

要注意的是, 特征码 越短,  符合特征的概率就越大。   可能会导致你搜索的 结果很多,   特征码越长,  搜索的时间也会越长
然后 有的特征码中,  有些码 是动态变量值(可能每次都会发生变化),  需要注意区分  这种位置  就不能写死 特征码  需要用  ?? 来代替  
例如 : 8B 5D ?? 89 ??






在此,感谢  @流年似水!  @传说中的路人甲 @大漠小鸟 @菊部变暖   对hook 知识上的帮助

码字不易,希望大家喜欢,我也是新手,有不对的地方,希望大佬指出,共同进步,

顺便,有没有大佬 教教 这个小游戏的  基_址 究竟是怎么找的, 我跟它斗智斗勇了2天。  哭了。   好了,已经有大佬教会我了  用xdbg查看才能找出来,CE不方便



点评

望尘莫及~   河南省洛阳市  发表于 2024-1-21 10:00

评分

参与人数 31好评 +10 精币 +38 收起 理由
qq376523450 + 1 对应版本的精易模块没打包啊
wa690602724 + 1 感谢分享,很给力!~
ppppzj + 1 + 2 支持开源~!感谢分享
pdtyf0 + 1 支持开源~!感谢分享
ican8 + 1 感谢分享,很给力!~
keyi5566 + 1 感谢分享,很给力!~
Mainli + 1 感谢分享,很给力!~
易语言资源网 + 1 + 3 开源精神必须支持~
3266167 + 1 感谢分享,很给力!~
qiyuer + 1 感谢分享,很给力!~
聿聿 + 1 感谢分享,很给力!~
YzZA + 1 感谢分享,很给力!~
mypursue + 1 感谢分享,很给力!~
无尘666 + 1 感谢分享,很给力!~
pj小黑屋 + 1 感谢分享,很给力!~
t176 + 1 感谢分享,很给力!~
望尘莫及 + 1 感谢分享,很给力!~
qweipuq + 1 感谢分享,很给力!~
1828902364 + 1 感谢分享,很给力!~
风雨3137 + 1 感谢分享,很给力!~
※逍遥游※ + 1 感谢分享,很给力!~
Zźh926 + 1 感谢分享,很给力!~
XXGL2005 + 1 感谢分享,很给力!~
龍貓 + 1 + 2 新技能已get√
难解 + 1 + 1 感谢分享,很给力!~
外星星人 + 1 + 2 新技能已get√
財財 + 1 感谢分享,很给力!~
传说中的路人甲 + 1 + 2 新技能已get√
猫携 + 1 + 1 好!很好!非常好!朕很欣赏你!
虚无の世界 + 1 + 2 支持开源~!感谢分享
小翁哥哥 + 1 + 2 不明觉厉

查看全部评分


本帖被以下淘专辑推荐:

  • · 精品|主题: 21, 订阅: 1
结帖率:92% (35/38)

签到天数: 1 天

来自 143楼
 楼主| 发表于 2024-2-2 10:58:24 | 只看该作者   湖南省长沙市
财付通消息 发表于 2024-2-2 10:21
这个能hook64位的吗?

不能。  64位的汇编指令变化挺大的,  这个就只适合 学习, 真要玩超级hook建议还是用超级Hook模块,论坛能找的到
回复 支持 反对

使用道具 举报

结帖率:88% (28/32)
142
发表于 2025-6-10 15:45:43 | 只看该作者   山东省济宁市
多谢分享~~!
回复 支持 反对

使用道具 举报

结帖率:40% (2/5)

签到天数: 2 天

141
发表于 2025-5-16 11:20:26 | 只看该作者   北京市北京市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:40% (2/5)

签到天数: 2 天

140
发表于 2025-5-16 11:20:05 | 只看该作者   北京市北京市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:100% (2/2)

签到天数: 4 天

139
发表于 2025-5-8 09:56:09 | 只看该作者   陕西省咸阳市
666666666666666
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 5 天

138
发表于 2025-5-8 09:45:33 | 只看该作者   美国

获得个积分,刷点金币
回复 支持 反对

使用道具 举报

137
发表于 2025-5-8 06:17:38 | 只看该作者   江苏省苏州市
666666666666666
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)
136
发表于 2025-3-21 14:50:05 | 只看该作者   广东省惠州市
例子打不开,需要什么模块?
回复 支持 反对

使用道具 举报

135
发表于 2025-3-19 22:38:36 | 只看该作者   广东省深圳市
11111111111111111111111111111111
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 2 天

134
发表于 2025-3-15 12:21:49 | 只看该作者   广西壮族自治区贵港市
感谢大佬
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 2 天

133
发表于 2025-3-14 21:49:38 | 只看该作者   广西壮族自治区贵港市
试试看能不能用
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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