TC官方合作论坛

 找回密码
 立即注册
查看: 85|回复: 0

[问题] 请教一个有关汇编JMP地址机器码变动的问题

[复制链接]
发表于 2021-2-14 02:00:13 | 显示全部楼层 |阅读模式

马上加入TC

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

x
本帖最后由 bestkakkoii 于 2021-2-14 02:23 编辑

某游戏 图片验证码读取时的原汇编码如下:

bluecg.XEDParseAssemble+A3DC - 85 C9                 - test ecx,ecx
bluecg.XEDParseAssemble+A3DE - 74 08                 - je bluecg.XEDParseAssemble+A3E8
bluecg.XEDParseAssemble+A3E0 - 0F10 00               - movups xmm0,[eax]   //弹出验证码窗口时EAX的值为验证码地址(每次重开游戏都会换)
bluecg.XEDParseAssemble+A3E3 - E9 A6FEFFFF           - jmp bluecg.XEDParseAssemble+A28E
bluecg.XEDParseAssemble+A3E8 - 8B 4C 24 14           - mov ecx,[esp+14]
bluecg.XEDParseAssemble+A3EC - 50                    - push eax
bluecg.XEDParseAssemble+A3ED - 57                    - push edi
bluecg.XEDParseAssemble+A3EE - 51                    - push ecx
bluecg.XEDParseAssemble+A3EF - 8B 4C 24 24           - mov ecx,[esp+24]
bluecg.XEDParseAssemble+A3F3 - 8B D6                 - mov edx,esi
bluecg.XEDParseAssemble+A3F5 - E8 16EDFFFF           - call bluecg.XEDParseAssemble+9110
bluecg.XEDParseAssemble+A3FA - 83 C4 0C              - add esp,0C
bluecg.XEDParseAssemble+A3FD - 8B 74 24 10           - mov esi,[esp+10]
bluecg.XEDParseAssemble+A401 - 8B 7E 10              - mov edi,[esi+10]
bluecg.XEDParseAssemble+A404 - 89 7C 24 0C           - mov [esp+0C],edi


参考了 二漠大大的文章:
二漠又来发帖子了!使用TC的消息路由功能实现了HOOK拦截技术。用一个游戏的血量数值拦截举例!
二漠又来了!再次次揭秘商业脚本的变态功能<游戏加速>! 老规矩,纯TC代码完成!

找了个空的基址 00F8C350
写入代码如下

00F8C350 - 0F10 00 - movups xmm0,[eax] //照抄跳转前的代码
00F8C353 - A3 4C3EF800 - mov [00F83E4C],eax //将eax的值复制给另一个空基址 00F83E4C
00F8C358 - E9 C12CBC77 - jmp bluecg.XEDParseAssemble+A28E //照抄跳转前的代码
00F8C35D - 90 - nop

写入空白地址的机器码如下:
0F 10 00 A3 4C 3E F8 00 E9 C1 2C BC 77 90 //红色机器码部分每次重开写入都会变

原来的改成如下
bluecg.XEDParseAssemble+A3DE - 74 08                 - je bluecg.XEDParseAssemble+A3E8
bluecg.XEDParseAssemble+A3E0 - E9 DBD14388           - jmp 00F8C350   //红色机器码部分每次重开写入都会变
bluecg.XEDParseAssemble+A3E5 - 90                    - nop
bluecg.XEDParseAssemble+A3E6 - 90                    - nop
bluecg.XEDParseAssemble+A3E7 - 90                    - nop
bluecg.XEDParseAssemble+A3E8 - 8B 4C 24 14           - mov ecx,[esp+14]

修改机器码如下: E9 DB D1 43 88 90 90 90

直接在OD或CE上修改可以順利從00F83E4C值中的地址值读取到验证码


現在問題來了
XEDParseAssemble 是 游戏自带的dll中的函数 每次重开游戏都会变动
我试着用大漠FindData能正确抓到 bluecg.XEDParseAssemble+A3E0 (要改写成跳转的原地址) 和 之后要跳转的地址 jmp bluecg.XEDParseAssemble+A28E (撷取EAX后要跳转的地址) 的实际地址


然而
jmp 00F8C350 (原地址改写的)
jmp bluecg.XEDParseAssemble+A28E (撷取完EAX要跳转的)
第一次虽侥幸成功注入重开游戏注入游戏就崩溃了
下了断点重新测试发现 这两条指令因为地址变动机器码会不同导致同样的机器码注入后跳转到完全错误的地址

也异想天开的尝试用大漠IntToData转换,转出来的机器码完全不同
想请教各位大大我要怎么写或用什么方法可以保持更新成正确的机器码用TC注入呢?







回复

使用道具 举报

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

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2021-2-28 15:01 , Processed in 0.040576 second(s), 23 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

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