首页
社区
课程
招聘
[原创]记一次安卓游戏破解
发表于: 2013-4-20 20:52 27761

[原创]记一次安卓游戏破解

2013-4-20 20:52
27761
需要的工具:IDA,APK改之理,八门神器

起因:CatWar2,钻石不够,而且用八门神器修改之后,钻石数会自动清0


线索:


顺藤摸瓜,搜索bg_sysmsg



发现其被引用于libhelloworld.so文件中

.so 文件是动态链接库文件,相当于 win下的 .dll 文件


于是操起IDA,ALT+T搜索bg_sysmsg



经过一番观察,根据函数名,来到了
ShopScene2::init(void)


出现在初始化里,然后在函数列表里找到ShopScene2::ShowSysMsg(int)。
.text:000E864A MOVS R0, 0x3F800000
.text:000E864E BL _ZN7cocos2d11CCDelayTime18actionWithDurationEf ; cocos2d::CCDelayTime::actionWithDuration(float)


用了延迟,第一张图的提示,也是显示一段时间就消失了了。猜测就是调用这个函数,显示信息。

再次查找引用


进入第一个函数,这个函数引用了一个很可疑的函数:WRIntEncrypt::Get(void)

BL _ZN12WRIntEncrypt3GetEv ; WRIntEncrypt::Get(void)


看一下这个类的所有函数,目测就是要找的了。


来到构造函数:
(PS:R0是this指针)
.text:000F1260 PUSH {R4-R6,LR}
.text:000F1262 MOVS R5, #0
.text:000F1264 STR R5, [R0]
.text:000F1266 MOVS R4, R0
.text:000F1268 BLX lrand48
.text:000F126C STR R5, [R4,#8]
.text:000F126E STR R0, [R4,#4]
.text:000F1270 BLX lrand48
.text:000F1274 STR R0, [R4,#0xC]
.text:000F1276 STR R5, [R4,#0x10]
.text:000F1278 MOVS R0, R4
.text:000F127A POP {R4-R6,PC}


确定这个类成员有5个,初始化之后
+0     0
+4     随机数1
+8     0
+c     随机数2
+10  0

再看WRIntEncrypt::Set(int)
(PS:R1是参数,就是要设置的数值)
.text:000F1118 LDR R3, [R0,#4]
.text:000F111A STR R1, [R0,#0x10]
.text:000F111C EORS R3, R1
.text:000F111E STR R3, [R0]
.text:000F1120 LDR R3, [R0,#0xC]
.text:000F1122 EORS R1, R3
.text:000F1124 STR R1, [R0,#8]
.text:000F1126 BX LR

从这里就看到
+0     未加密值 异或 随机数1
+4     随机数1
+8     未加密值 异或 随机数2
+c     随机数2
+10  未加密值

struct EncryptInt
{
  int eint1;//加密数值
  int key1;//随机密钥
  int eint2;//加密数值
  int key2;//随机密钥
  int realint;//原始数值
};

也就是说,游戏保存了三份数据,二份是加密过,一次是未加密的。

再看看WRIntEncrypt::Get(void)
.text:000F120C PUSH {R4,LR}
.text:000F120E LDR R3, [R0,#EncryptInt]
.text:000F1210 LDR R2, [R0,#EncryptInt.key1]
.text:000F1212 LDR R1, [R0,#EncryptInt.key2]
.text:000F1214 MOVS R4, R0
.text:000F1216 EORS R2, R3
.text:000F1218 LDR R3, [R0,#EncryptInt.eint2]
.text:000F121A EORS R3, R1
.text:000F121C LDR R1, [R0,#EncryptInt.realint]
.text:000F121E MOVS R0, #1
.text:000F1220 CMP R3, R1
.text:000F1222 BEQ loc_F123C
.text:000F1224 CMP R2, R3
.text:000F1226 BEQ loc_F1246
.text:000F1228
.text:000F1228 loc_F1228 ; CODE XREF: WRIntEncrypt::Get(void)+38j
.text:000F1228 ; WRIntEncrypt::Get(void)+3Ej
.text:000F1228 MOVS R0, R4
.text:000F122A BL _ZN12WRIntEncrypt8CheatingEv ; WRIntEncrypt::Cheating(void)


与加密的数值做了比较,不相等就进入作弊处理WRIntEncrypt::Cheating(void)

知道了加密怎么处理,就很容易了。回到手机,八门神器定位到realint

struct EncryptInt
{
  int eint1;
  int key1;
  int eint2;
  int key2;
  int realint;
};

然后eint1,eint2,realint都改为0xFFFFFF,key1,key2清零。任何数值异或0都不变。





不会APKDIY,只能先这样了。最后发现,钻石退出以后,重新进入游戏会清0.可能还有别的地方有验证。不过修改完钻石,把英雄升级之后,基本就无敌了。也算是够用了。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (22)
雪    币: 18
活跃值: (33)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
有什么工具啊
崇拜啊
2013-4-20 22:56
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
3
无Root下怎么改?
2013-4-20 22:58
0
雪    币: 7067
活跃值: (2900)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
分析的很不错。很清晰。
2013-4-20 23:29
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
破解手机软件的工具都有什么?
2013-4-21 06:27
0
雪    币: 2307
活跃值: (1023)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
6
对apk做手术不需要root,看楼主的分析,应该是可以直接修改so文件爆破的。
2013-4-21 08:12
0
雪    币: 2957
活跃值: (2783)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
7
需要的工具:IDA,APK改之理,八门神器(需要root)
2013-4-21 12:13
0
雪    币: 2957
活跃值: (2783)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
8
对apk做手术不需要root,看楼主的分析,应该是可以直接修改so文件爆破的。


求组织
2013-4-21 12:15
0
雪    币: 357
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
碰到so文件就没办法了,lz是高人啊`
2013-4-22 13:04
0
雪    币: 84
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
lz是怎么想到要改so文件,而不是一开始以反编译寻找代码为出发点呢?
2013-4-22 16:15
0
雪    币: 2957
活跃值: (2783)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
11
LZ功力不行(难道直接patch?第一次接触,勿笑),是@非虫说的哦。
2013-4-22 16:27
0
雪    币: 54
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
多谢分享。收藏
2013-4-23 10:07
0
雪    币: 115
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
我也觉得怎么不是直接找代码啊?貌似apk反编译出代码也不难啊
2013-5-6 22:24
0
雪    币: 158
活跃值: (196)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
so不会修改啊,前几天也遇到一个,还有地址偏移,补习汇编啊
2013-5-8 08:59
0
雪    币: 35
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
来看看试试
2013-9-19 20:10
0
雪    币: 2323
活跃值: (4118)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
16
学习,学习,谢谢分享
2013-9-19 20:47
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
妈的,牛逼透了
2013-9-20 00:13
0
雪    币: 92
活跃值: (209)
能力值: ( LV6,RANK:95 )
在线值:
发帖
回帖
粉丝
18
膜拜一下
2014-4-28 09:56
0
雪    币: 36
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
手游也行??
2014-10-17 22:45
0
雪    币: 8
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
很好谢谢分享
2015-2-11 15:35
0
雪    币: 8
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
哈哈多谢分享,作者用的原apk版本是1.8  现在最新版本是2.5游戏逻辑已经发生很多变化,如果要跟着作者弄,可以下1.8版本
2015-2-11 17:59
0
雪    币: 29
活跃值: (97)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
好文章 哈哈哈  看看
2015-2-11 18:21
0
雪    币: 123
活跃值: (95)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
23
直接暴so文件应该方便点
2015-2-11 20:44
0
游客
登录 | 注册 方可回帖
返回
//