把自己以及朋友做进游戏mod里是一件很好玩的事
游戏mod作品介绍:
在游戏里可以升级自己为将军,然后率领军队作战:
原版游戏是没有西安的,我自己设计了喜欢的西安市地图:
可以二战剧本,也可以参与现代战争
2030年,中国三航母时代:
该游戏版本的mod有很多很多,这只是我做的比较喜欢的一个版本。
我给中国添加了航母并做了增强,众所周知,中国的火箭军也是非常强的,于是我给导弹火箭炮、解放军都做了相应的增强。
喜欢的话,APP下载链接:更多的版本等着你探索
https://pan.baidu.com/s/1-zHy74_SxU2e0X0gzGV5Ow
提取码:3333
逆向教程:
1.so文件
so文件是一个用C++语言编写,编译得到的二进制库文件,修改so文件可以实现如下效果:
- 解除游戏引擎的某些限制,比如单位type,将军星星上限,将军技能上限,挂将上限
- 为游戏引擎添加更多功能,比如加入新将军技能,加入新兵种技能
一些概念
汇编语言:由简单的指令构成的编程语言,可以直接逐条翻译成计算机可以执行的二进制。
高级语言:接近人类语言,人类容易理解的编程语言,需要通过复杂的编译环节转化为汇编最终转化为二进制程序。
反汇编:通过软件将程序逆向转化成汇编语言,并进行修改。
IDA PRO 6.8
解压后应该长这个样子
找到Registry.reg没有,用记事本打开
这个文件是IDA PRO软件的注册机,我们需要正确设置路径才能破解成功。方法非常简单:
然后运行这个文件,如果弹出对话框点确认就好了。
解压后这个样子
进到lib下目录
把这两个文件夹删掉
安卓手机普遍使用ARM架构的处理器,该处理器使用的汇编语言指令集是ArmV7。要对so进行反汇编,我们需要掌握一些汇编语言方面的基础知识。
寄存器
程序中所有的数据操作都要经过寄存器。
每个寄存器有自己设计的用途,可供我们使用的寄存器主要是
R0,R1,R2,R3,R4,R5,R6,R7,R8,R9,R10,R11这12个寄存器。
每个寄存器都能存储4字节的数据。
R15寄存器,又称PC寄存器,用于记录CPU预读取的指令,
其存储的值为当前正在执行的指令位置+4。
此时PC寄存器值为0x00169F84
汇编指令
下面给出一些基础的汇编指令
MOV 指令 参数1:寄存器 参数2:寄存器或常数
将寄存器R6存的值装进寄存器R0里
将常数0x20装进寄存器R1里
(指令后加S不改变指令本身功能)
MOV指令完成了基础的数据操作。
ADD指令 参数1:寄存器 参数2:寄存器或常数
参数3: 寄存器或常数
将R3与0x3A相加的值存入R11
(在某条指令后面加.W是让这条指令占4个字节,不改变该指令本身的功能)
使R3存储的值+1
(ADD指令可以只写2个参数)
ADD指令是用于执行加法。
MUL指令,用法与ADD指令相同,功能是做乘法,不再赘述。
下面来介绍两个重要的指令
LDR,STR指令
介绍之前先科普一些知识
计算机中内存数据与内存地址都用二进制表示,
内存地址使用时一般采用原地址+偏移量。
比如0x00000080向后偏移0x10字节的地址就是0x00000090
LDR 参数1 寄存器 参数2 表达式
将指定内存地址的内存读取到指定寄存器
STR 参数1 寄存器 参数2 表达式
将指定寄存器数据写入到指定内存地址
汇编中的表达式与数学中有很多不同,它能表示的种类非常少。
这里介绍一种,样子是这样的:[寄存器,常数]
还记得寄存器可以表示地址吗?
[R4,0x54]就代表R4所存的内存地址向后偏移0x54的地址
这三句汇编用语言描述是这样的:
将[R4,0x54]内存地址的值取出到R3,这里取了4个字节的数据,可以用LDR指令的变种来取1,2个字节的数据。
用加法指令,使R3的值增加了1.
将R3的值放回[R4,0x54]内存地址,这里写了4个子节的数据,可以用STR指令的变种来写1,2个字节的数据。
也就是说,这三行汇编完成了使[R4,0x54]处数据增加1的效果。
CMP 比较一个寄存器与一个常数或寄存器的大小关系
具体的用处后面会提到
函数的实现
还记得之前讲的寄存器吗?
实现函数靠的就是寄存器。
传参数:计算机并不理解你的函数需要什么参数,你需要手动复制到你要用的寄存器中。
上图是一个调用函数生成随机数的例子
编写函数的人规定R0作为函数的唯一参数,函数生成0至R0-1间的