首页
论坛
课程
招聘
[原创]记一次安卓游戏破解
2013-4-20 20:52 22826

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

2013-4-20 20:52
22826
需要的工具: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.可能还有别的地方有验证。不过修改完钻石,把英雄升级之后,基本就无敌了。也算是够用了。

[注意]中秋好礼,诚意满满——你提意见,我送月饼!!

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (22)
雪    币: 18
活跃值: 活跃值 (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
碘水 活跃值 2013-4-20 22:56
2
0
有什么工具啊
崇拜啊
雪    币: 8670
活跃值: 活跃值 (765)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
cvcvxk 活跃值 10 2013-4-20 22:58
3
0
无Root下怎么改?
雪    币: 3045
活跃值: 活跃值 (378)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
shuichon 活跃值 2013-4-20 23:29
4
0
分析的很不错。很清晰。
雪    币: 1
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cwtsgf 活跃值 2013-4-21 06:27
5
0
破解手机软件的工具都有什么?
雪    币: 2259
活跃值: 活跃值 (387)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
非虫 活跃值 7 2013-4-21 08:12
6
0
对apk做手术不需要root,看楼主的分析,应该是可以直接修改so文件爆破的。
雪    币: 943
活跃值: 活跃值 (365)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
HOWMP 活跃值 1 2013-4-21 12:13
7
0
需要的工具:IDA,APK改之理,八门神器(需要root)
雪    币: 943
活跃值: 活跃值 (365)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
HOWMP 活跃值 1 2013-4-21 12:15
8
0
对apk做手术不需要root,看楼主的分析,应该是可以直接修改so文件爆破的。


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