记录一次逆向并自己编写游戏mod

把自己以及朋友做进游戏mod里是一件很好玩的事

 游戏mod作品介绍:  

在游戏里可以升级自己为将军,然后率领军队作战: 

 

 

原版游戏是没有西安的,我自己设计了喜欢的西安市地图: 

可以二战剧本,也可以参与现代战争

 2030年,中国三航母时代:

该游戏版本的mod有很多很多,这只是我做的比较喜欢的一个版本。

我给中国添加了航母并做了增强,众所周知,中国的火箭军也是非常强的,于是我给导弹火箭炮、解放军都做了相应的增强。

喜欢的话,APP下载链接:更多的版本等着你探索

https://pan.baidu.com/s/1-zHy74_SxU2e0X0gzGV5Ow 
提取码:3333

逆向教程:

1.so文件

so文件是一个用C++语言编写,编译得到的二进制库文件,修改so文件可以实现如下效果:

  1. 解除游戏引擎的某些限制,比如单位type,将军星星上限,将军技能上限,挂将上限
  2. 为游戏引擎添加更多功能,比如加入新将军技能,加入新兵种技能

一些概念

汇编语言:由简单的指令构成的编程语言,可以直接逐条翻译成计算机可以执行的二进制。

高级语言:接近人类语言,人类容易理解的编程语言,需要通过复杂的编译环节转化为汇编最终转化为二进制程序。
反汇编:通过软件将程序逆向转化成汇编语言,并进行修改。

IDA PRO 6.8 

解压后应该长这个样子

找到Registry.reg没有,用记事本打开

这个文件是IDA PRO软件的注册机,我们需要正确设置路径才能破解成功。方法非常简单:

然后运行这个文件,如果弹出对话框点确认就好了。

解压后这个样子

进到lib下目录

把这两个文件夹删掉

 

安卓手机普遍使用ARM架构的处理器,该处理器使用的汇编语言指令集是ArmV7。要对so进行反汇编,我们需要掌握一些汇编语言方面的基础知识。

寄存器

寄存器是CPU的组成部分,它们可用来暂存指令数据地址

程序中所有的数据操作都要经过寄存器。

每个寄存器有自己设计的用途,可供我们使用的寄存器主要是

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间的

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值