美文网首页
android算法逆向学习笔记之2016腾讯游戏安全移动赛题Te

android算法逆向学习笔记之2016腾讯游戏安全移动赛题Te

作者: 看雪学院 | 来源:发表于2019-04-23 18:17 被阅读0次

听说这个是这个题是2016年腾讯游戏移动安全赛的题

主要是注册机的编写

以前自己学习拿来练习ARM汇编和算法逆向的

自己写的ARM的汇编的就不贴了 这里主要是F5后的

1. java层定位关键点

夜神模拟器安装apk 输入name和code

打开androidkiller搜索字符串Check Fail!

找到关键点,发现了一个NativeCheckRegister

找到NativeCheckRegister的声明的地方

我们发现是一个Native函数,在so层,因此我们只能去so层用ida去分析

2. so层分析

1. 找关键函数

libCheckRegister.so 拖入IDA中

找到相关函数,因为函数不多我们可以直接看,如果函数多可以用ctrl+f搜索

双击进去

由于是jni函数,因此我们导入相关结构体并重命名

2. 导入jni 并重新命名

按insert快捷键,导入JNI相关结构体

参数,变量,函数名都重命名得到如下所示

3. 算法分析

我们重命名的check里面就是我们想要的算法了

点击进去具体分析

首先也是参数变量函数名重新命名

我们发现这里识别错误 数组大量使用了[j*4] 我们可以将数组类型转化为int

最后我们得到代码是

4. 注册机思路

我们这里梳理下流程逻辑和思路

1. 逻辑流程

s[] <--用户名name

v15[]<--密码pwd

v12[]<--s[]

v13[]<--v15[]

v13[]<--v12[]

2. 思路

我们的注册机是已知name求pwd

根据上面的逻辑我们可以得到求解过程

用户名name -> s[] -> v12[] -> v13[]->v15[]->密码pwd

那么v12[]和v13[]的关系怎么得到 ?

v15[]->pwd怎么获得?

那就要我们分析上面那两个函数了

分析 sub_1498发现这是个base64的解码函数

一开始看到头都大了 这个算法的计算量又大了

不过当看到一个数组的时候,立马就点进去看看有什么特征

里面除了一些0x40外 其他的字符特别像base64的表

即使是base64表也不能保证这个表没有变形

还是看代码吧

base64解码注释

解码的具体代码  里面注释了详细的解码过程

4. 总结与心得

算法逆向真的是体力活,坐不住根本分析不下,这里是F5后分析的比较简单,干看ARM汇编更吃体力

常用加解密的算法还是要了解啊,最好熟悉,这样对逆向的帮助很大

注册机的编写心得:

能用现有可以利用的代码就用

算法逆向有时候就像做数学题,就是已知条件求未知,通过找他们之间的关系,一步一步打通关系,最后得到解,但是有时候这个解并不是完美的解。

练习的时候还是要少用F5 多看ARM汇编,这才是基本功

书读百遍其义自见,同样逆向百遍其义自见

本文由看雪论坛 lcdxsun 原创

原文链接:https://bbs.pediy.com/thread-250740.htm

相关文章

网友评论

      本文标题:android算法逆向学习笔记之2016腾讯游戏安全移动赛题Te

      本文链接:https://www.haomeiwen.com/subject/zisbgqtx.html