欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

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

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

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

上传的附件 图片 1.png
图片 2.png
图片 3.png
图片 4.png
图片 5.png
图片 6.png
图片 7.png
图片 8.png
keygen_src.zip

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功