移动计算与android的关系,android算法逆向学习笔记之2016腾讯游戏安全移动赛题Tencent2016A(含注册机)...

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

主要是注册机的编写

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

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

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

1e185a8544b6?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

打开androidkiller搜索字符串Check Fail!

1e185a8544b6?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

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

1e185a8544b6?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

找到NativeCheckRegister的声明的地方

1e185a8544b6?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

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

libCheckRegister.so 拖入IDA中

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

1e185a8544b6?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

双击进去

1e185a8544b6?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

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

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

1e185a8544b6?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

1e185a8544b6?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

1e185a8544b6?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

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

1e185a8544b6?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

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

点击进去具体分析

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

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

最后我们得到代码是

1e185a8544b6?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

4. 注册机思路

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

s[]

v15[]

v12[]

v13[]

v13[]

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

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

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

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

1e185a8544b6?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

v15[]->pwd怎么获得?

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

1e185a8544b6?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

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

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

1e185a8544b6?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

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

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

还是看代码吧

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

1e185a8544b6?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

1e185a8544b6?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

4. 总结与心得

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

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

注册机的编写心得:

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

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

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

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

本文由看雪论坛 lcdxsun 原创

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值