首页
社区
课程
招聘
[原创]Corona SDK的iphone游戏存档校验分析一例
发表于: 2012-8-27 19:06 27752

[原创]Corona SDK的iphone游戏存档校验分析一例

2012-8-27 19:06
27752

近来ios上的游戏, 用非原生的SDK的那是越来越多.
长话短说, 前天就遇到一个, 叫做D.Switches, 塔防游戏, 里面内购主要是解锁我方可使用的人物, 解锁地图.
按照惯例, 打开iFunbox, 把Documents目录里面的文件都拷贝到机器上.
依次打开各种*.sqlite文件, 发现game.sqlite里面的summon表, 应该就是我们需要动手的地方.

地图先不管, 把这里的lock都给去了, 保存, 传到ipad上. 然后进入商店, 喵的一声, 弹出一个对话框, 提示summon信息损坏, 已经重新初始化.
看来这里的hex就应该是校验了, 数了下64字节, 应该是512bits, 512的有啥呢, 我第一时间想到了了sha系列, 搜了下应该是sha512吧?
顿时恶向胆边生, 把整个D.Switches.app拷贝到了电脑上, 用010Editor打开主文件D.Switches, 搜索summon字样, 满以为能找到关键点, 令人惊奇的是, ANSI, Unicode和UCS4格式都搜了, 居然没有.
对整个目录搜索, 不幸在resource.car里面发现了一些summon字样.
打开这个文件, 里面居然有残缺的sql语句, 看起来应该是什么脚本系的东西. 当然这个后缀肯定不会是symbian或者brew这类的, 不管, 经过查看文件头部, 感觉这个可以解.
把每个记录抄在纸上, 发现每条记录分为4部分, 再仔细观察, 文件名部分结尾的0不止是一个, 有时候是两个, 应该是为了对齐.

最后写了个文件模版验证, 证明猜测是对的.

接下来就是找了个以前做的类似结构的解包程序, 改了下代码, 把文件都给解出来了. 当然这个解包程序还有打包功能, 打包部分懒得一并修改了, 回头再说吧.
解出来的一堆.lu文件, 看起来很像是lua的东西啊, 搜了一堆lua的反编译工具都不认, 然后去看了bytecode的格式, 发现这玩意是Corona包过的, 头部加了三个字段, 删掉这三个字段, 保存为db_m.lu后, luadec提示版本是5.1的, 遂去找了luadec51, 运行居然要msvcr100d.dll我的天, debug运行库得vc安装包才有, 懒得解了, 拿vc2008编译了一个, 再反编译, 还是失败, 不过倒是有bgm_m.lu和info_m.lu可能是比较简单吧, 反出来几行. 既然反编译不行, 那就用-dis选项来反汇编吧.
反汇编出来的虚拟机汇编代码类似ARM的.
顺利找到了令人关心的位置:

; Function #19:
;
; Name:            
; Defined at line: 313
; #Upvalues:       2
; #Parameters:     2
; Is_vararg:       0
; Max Stack Size:  11

  1 [-]: EQ        0 R1 K0      ; if R1 ~= nil then PC := 9
  2 [-]: JMP       9            ; PC := 9
  3 [-]: GETGLOBAL R2 K1        ; R2 := tostring
  4 [-]: GETGLOBAL R3 K2        ; R3 := os
  5 [-]: GETTABLE  R3 R3 K3     ; R3 := R3["time"]
  6 [-]: CALL      R3 1 0       ; R3,... := R3()
  7 [-]: CALL      R2 0 2       ; R2 := R2(R3,...) ; R2 = tostring(os["time"])
  8 [-]: MOVE      R1 R2        ; R1 := R2
  9 [-]: MOVE      R2 R1        ; R2 := R1
 10 [-]: GETGLOBAL R3 K4        ; R3 := pairs
 11 [-]: MOVE      R4 R0        ; R4 := R0
 12 [-]: CALL      R3 2 4       ; R3,R4,R5 := R3(R4) ; R3,R4,R5 = pairs(arg1)
 13 [-]: JMP       19           ; PC := 19
 14 [-]: MOVE      R8 R2        ; R8 := R2
 15 [-]: GETGLOBAL R9 K1        ; R9 := tostring
 16 [-]: MOVE      R10 R7       ; R10 := R7
 17 [-]: CALL      R9 2 2       ; R9 := R9(R10) R9 = tostring(R7)
 18 [-]: CONCAT    R2 R8 R9     ; R2 := R8 .. R9 
 19 [-]: TFORLOOP  R3 2         ; R6,R7 :=  R3(R4,R5); if R6 ~= nil then begin PC = 14; R5 := R6 end
 20 [-]: JMP       14           ; PC := 14
 21 [-]: MOVE      R3 R2        ; R3 := R2
 22 [-]: LOADK     R4 K5        ; R4 := "feel-.-dead-.-beef"
 23 [-]: CONCAT    R2 R3 R4     ; R2 := R3 .. R4
 24 [-]: GETUPVAL  R3 U0        ; R3 := U0
 25 [-]: GETTABLE  R3 R3 K6     ; R3 := R3["hmac"]
 26 [-]: GETUPVAL  R4 U0        ; R4 := U0
 27 [-]: GETTABLE  R4 R4 K7     ; R4 := R4["sha512"]
 28 [-]: MOVE      R5 R2        ; R5 := R2
 29 [-]: GETUPVAL  R6 U1        ; R6 := U1
 30 [-]: CALL      R3 4 2       ; R3 := R3(R4,R5,R6) r3 = hmac("sha512", R2+fell-.dead-.-beef)
 31 [-]: MOVE      R4 R1        ; R4 := R1
 32 [-]: RETURN    R3 3         ; return R3,R4
 33 [-]: RETURN    R0 1         ; return 

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 6
支持
分享
最新回复 (17)
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
膜拜魔女。。。
2012-8-28 11:33
0
雪    币: 47147
活跃值: (20460)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
3
曾半仙的稿纸是亮点~
2012-8-28 22:07
0
雪    币: 3758
活跃值: (3337)
能力值: ( LV15,RANK:500 )
在线值:
发帖
回帖
粉丝
4
老大来了啊~~
纸上写着看起来方便 我写软件和反软件都离不开纸上谈兵啊
这两天借着这个劲头正啃lua的虚拟机 看了luadec/unluac这类的反编译工具对付没有debug信息的bytecode纷纷崩溃 产生了我也要写一个的想法
豪可怕
2012-8-28 22:35
0
雪    币: 142
活跃值: (310)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
5
产生了我也要写一个的想法
膜拜.....有这功夫,时间,精力的人,都是我必须膜拜的偶像。
2012-8-29 08:57
0
雪    币: 5047
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
-_-#可不可以稍稍灌下水?
我想说的是LZ稿纸上的字挺好看的……
2012-8-29 09:08
0
雪    币: 114
活跃值: (180)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
强大,如果可以改造文件跟原来的Sha或者MD5神马的会不会轻松点呢
2012-8-30 09:04
0
雪    币: 166
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
真的太强大了,膜拜
2012-8-30 10:59
0
雪    币: 6
活跃值: (1151)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
大神看不懂a
2012-8-30 11:05
0
雪    币: 16
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
稿纸上还有MM的一条腿。。。
画的不错的说~
2012-8-30 14:19
0
雪    币: 3758
活跃值: (3337)
能力值: ( LV15,RANK:500 )
在线值:
发帖
回帖
粉丝
11
那得改脚本跳过sha了. 这也是个办法, 不过脚本是二进制, 去掉过debug信息, 大部分反编译工具都出错. 目前没有字节码的补丁工具, 我正在琢磨着做
2012-8-30 16:53
0
雪    币: 2166
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
那条腿画地不错
2012-8-31 15:38
0
雪    币: 3230
活跃值: (2919)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
  太强大了..
2012-10-6 16:58
0
雪    币: 97697
活跃值: (200839)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
14
Thanks for you.
上传的附件:
2012-10-6 17:06
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
好吧,学习了。。
2012-10-6 17:36
0
雪    币: 15
活跃值: (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
严重 赞同 , 这可是 亮点啊....
2012-10-14 23:10
0
雪    币: 5855
活跃值: (438)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
17
最后写了个文件模版验证, 证明猜测是对的.


请教楼主,写文件模板,验证数据格式,是用的什么工具?
2013-12-12 20:21
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
18
大佬,最近也在学习破解car,您的那个decar怎么使用,是将car文件使用它打开嘛,没反应啊!!!
2020-5-2 10:33
0
游客
登录 | 注册 方可回帖
返回
//