本帖最后由 geleisisisi 于 2022-4-16 22:36 编辑
古剑3是我遇到最难调试的游戏,我就不明白找一个添加物品的call怎么就这么难。两年来我是辗转反侧如鲠在喉,但是都毫无进展。不过在学了点C++的皮毛后,我突然灵光一闪找到了突破口,花了两个月的时间才追明白运行结构,然后写了个修改器。其实修改器只是附带品,我真正在意的是逆向的过程,和程序的结构与逻辑,于是打算做一个关于古剑3逆向找call的视频。
因为我是只菜鸡,无论是在CE还是C++的方面。所以很多操作或者写法会显得很幼稚,希望大佬们多多指出我的缺点,让我能够有所进益。
使用工具:
Cheat Engine:大部分时候使用的都是CE
Visual Studio:遍历函数名和ID的时候会用到一些非常基础的C++编程,但是跳过也不影响逆向的理解
本视频所需基础:
1.需要拥有基础的汇编知识。比如一些简单的mov,cmp,test,jmp,push,pop
2.能够较为熟练运用CE,尤其是在下断追踪这一块
3.知道什么是栈,什么是call
4.知道什么是结构体
5.最好有一定的找call的经验
6.教程会涉及到大量的指针,所以需要对指针有一定的了解,就算如此还是会很容易就把自己绕晕
目前预定的章节主要分为几个部分:(有可能会变动)
1.共用代码/共用函数的处理方法。
2.成功断下后,根据不停的比较得出结构体大概是怎么样影响函数运行的。
3.介绍rcx结构体,68,69,70,22类型数据,计算函数B3B00,重铸结构体函数B67B0,共用函数B0210的大致结构
4.实战,如何过滤出自己想要的函数。以及获取函数后,如何写汇编码
5.遍历函数名,以及通过函数名获取想要的70类型地址
6.如何获取各种ID
7.类型地址如何追基址。
8.批量添加的困扰
9.添加契约时遇到的判断阻碍
视频地址:
https://www.bilibili.com/video/BV1aL4y157KR
更新至第2章
修改器地址:
https://bbs.3dmgame.com/thread-6290222-1-1.html
代码部分:
第一章:共用代码/共用函数的处理方法
物品数量增减断点:
[Asm] 纯文本查看 复制代码 [ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
alloc(newmem,2048,"Gujian3.exe"+B4278)
label(returnhere)
label(originalcode)
label(exit)
alloc(cmp_addr_item,8)
registersymbol(cmp_addr_item)
newmem:
push rax
mov rax,[cmp_addr_item]
cmp r8,rax
jne originalcode
nop
originalcode:
pop rax
movups [r8],xmm0
mov [r8+0C],r10d
exit:
jmp returnhere
"Gujian3.exe"+B4278:
jmp newmem
nop 3
returnhere:
[DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"Gujian3.exe"+B4278:
movups [r8],xmm0
mov [r8+0C],r10d
//Alt: db 41 0F 11 00 45 89 50 0C
dealloc(cmp_addr_item,8)
unregistersymbol(cmp_addr_item)
断点1:
[Asm] 纯文本查看 复制代码 [ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
alloc(newmem,2048,"Gujian3.exe"+C86FB)
label(returnhere)
label(originalcode)
label(exit)
newmem:
push rax
push rbx
mov rax,[rsp+28]
mov rbx,Gujian3.exe+2E586E8//E8 =rightclick;D0 =mouseup;E0 = mouseclick
mov rbx,[rbx]
cmp rax,rbx
jne originalcode
nop
originalcode:
pop rbx
pop rax
mov qword ptr [rsp+20],00000000
exit:
jmp returnhere
"Gujian3.exe"+C86FB:
jmp newmem
nop 4
returnhere:
[DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"Gujian3.exe"+C86FB:
mov qword ptr [rsp+20],00000000
//Alt: db 48 C7 44 24 20 00 00 00 00
|