本帖最后由 qingyf 于 2019-3-30 01:30 编辑
之前录过一个视频我们使用了CE代码注入的功能修改鬼泣5实现各种功能
地址https://www.52pojie.cn/thread-910487-1-1.html 有兴趣的可以看看
这里贴上之前CE自动汇编无敌的代码
[Lua] 纯文本查看 复制代码 [ENABLE]
alloc(newmem,2048,"DevilMayCry5.exe"+116B0C4)
label(returnhere)
label(originalcode)
label(exit)
newmem:
originalcode:
mov [rdi+10],(float)7000.0
exit:
jmp returnhere
"DevilMayCry5.exe"+116B0C4:
jmp newmem
returnhere:
[DISABLE]
dealloc(newmem)
"DevilMayCry5.exe"+116B0C4:
movss [rdi+10],xmm1
//Alt: db F3 0F 11 4F 10
细心的朋友就发现了
我们注入的地址是"DevilMayCry5.exe"+116B0C4:
这种模块名加地址的格式注入就非常的简单
而且重启游戏后,代码仍然有效
但是 如果我们要注入的地址是动态地址怎么办呢?
比如今天我们要动手的游戏 WEgame版电竞传奇地址格式是2437E8ED - 89 48 10 - mov [eax+10],ecx
这种动态地址注入的话重启游戏后是绝对无效的
甚至可能会导致游戏闪退的各种错误
那么我们应该怎么办呢
没错 就是我们今天要说的AOB注入
所谓AOB注入原理就是通过特征码找到匹配的地址
然后对匹配到的地址进行注入修改操作
反正我们大概知道就是这么个意思就行了
好的教程开始
首先定个小目标
我们今天要实现的是修改每次获得的游戏资源数量 至少得翻个10倍对吧
通过简单的4字节搜索找到钱钱的地址
然后右键什么改写了什么地方
然后我们在游戏中花点钱钱在赚点钱钱后看看结果
代码的意思是把ECX的值放在 [eax+10]里面
[eax+10]也就是 1F401A68+10=1F401A78这就是我们的钱钱的地址
我们可以发现不管赚钱还是败家 都是同一个地址代码在操控着我们的钱钱
我们点击上图的反汇编程序进去瞧一瞧
看见了吗 地址是2496B4AD 不是上一篇鬼泣五月哭视频里的模块加地址这种格式"DevilMayCry5.exe"+116B0C4:
那么按照上篇讲的可以改吗
当然是可以的 但是重启后就改不了了
不相信的小伙伴可以改改试试
为了节约大家时间我就不试了
好 继续 找到这个管钱的地址后作为一个好习惯我们应该看看它除了管钱还管不管其他什么
右键地址选择指令访问的地址
康康我们发现了啥
它不但管钱还管吃喝拉撒!你说巧不巧
既然如此那就盘它
直接工具-自动汇编走起
然后加入框架代码点击AOB注入
此时会弹出两个框 萌新直接确认就行
我实在懒得截图了
CE会自动加入如下代码
[Lua] 纯文本查看 复制代码 [ENABLE]
aobscan(INJECT,89 48 10 EB 37) // should be unique
alloc(newmem,$1000)
label(code)
label(return)
newmem:
code:
mov [eax+10],ecx
jmp 2496B4E9
jmp return
INJECT:
jmp newmem
return:
registersymbol(INJECT)
[DISABLE]
INJECT:
db 89 48 10 EB 37
unregistersymbol(INJECT)
dealloc(newmem)
值得一提的是 ce自作聪明的生成了一行jmp 2496B4E9代码,这行我们要手动删除
因为这个2496B4E9地址是动态的 我们每次启动游戏都不一样
直接删掉即可
代码中的89 48 10 EB 37就是特征码
我们可以测试下在CE中搜索这个特征码
看到了吗 搜索到的地址和我们之前的管家婆地址一模一样啊
接下来就简单了修改代码走起
由于我打算每次金钱改动都加10000,其他小星星啥的改动的时候加1000
所以要处理下共用代码的问题
这个上篇文章讲过
这里不多说了
下面是改过后的代码
[Lua] 纯文本查看 复制代码 [ENABLE]
aobscan(INJECT,89 48 10 EB 37)
alloc(newmem,$1000)
label(code)
label(return)
label(qingyf)
newmem:
cmp [eax+8],3
je qingyf
qingyf:
add [eax+10],#10000
code:
add [eax+10],#1000
jmp return
INJECT:
jmp newmem
return:
registersymbol(INJECT)
[DISABLE]
INJECT:
db 89 48 10 EB 37
unregistersymbol(INJECT)
dealloc(newmem)
然后我们测试下看看
ok可行 好的啰嗦一大堆到此结束
觉得有用的同学加个分呗 |