首页
社区
课程
招聘
[原创]2016腾讯游戏安全竞赛android第一题分析
发表于: 2016-3-28 14:35 7698

[原创]2016腾讯游戏安全竞赛android第一题分析

2016-3-28 14:35
7698

2016年游戏安全技术竞赛第一轮——Android方向分析文档

1.App要求输入一个name和一个code,然后在java层调用native中的方法NativeCheckRegister来验证输入的name和code。所以主要工作就是在native中分析验证算法。

2.在nativecheckregister中主要逻辑在子过程中


3.在check中首先检查name的长度必须在6~20之间


4.接下来对name做了一些变形处理


大致作用就是(0x1339e7e + idx) * name[idx % len(name)] * len(name) + 上一步结果的高三个字节。每一步的结果存储的时候都会覆盖上一步结果的高地址的三个字节。所以16次循环后就会产生19个字节的数据1个字节0。

5.之后一个子过程开始处理code


这个子过程的返回值和0x14比较,相等就进入后面的验证逻辑。分析子过程的逻辑后计算得到code的长度为27。

6.进入上一步的子过程分析


首先通过查表得到code的长度,表中的数据都是小于0x40的,0-9,a-z,A-Z,与一些符号,分别映射向了小于0x40的值。

7.接着通过一个压缩算法,把4个字节数据压缩成3个字节。因为上一步的映射关系都是小于0x40(01000000)的,所以所有的数据每个字节只需要6位,4*6==3*8。





8.code数据压缩完之后,对之前处理过的name数据再除以10,然后通过两个方程组和一个方程来验证code。



方程组一:
X8 = X10 + cipher_name[0]
X8 + cipher_name[1] = 2X10

  
方程组二:
      X0 = Xc + cipher_name[2]
      X0 + cipher_name[3] = 2Xc

方程:
      X4 + cipher_name[4] = 3cipher_name[3]

keygen_src.zip


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

上传的附件:
收藏
免费 4
支持
分享
最新回复 (4)
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这是汇编代码吗?看不大懂
2016-3-28 19:19
0
雪    币: 25
活跃值: (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
前排膜拜
2016-3-30 17:39
0
雪    币: 47147
活跃值: (20450)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
4
建议把apk也上传一份到论坛本地。
2016-3-30 18:09
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
厉害,居然完全看汇编~
2021-8-2 21:08
0
游客
登录 | 注册 方可回帖
返回
//