先知技术社区独家发表本文,如需要转载,请先联系先知技术社区授权;未经授权请勿转载。
先知技术社区投稿邮箱:[email protected]

闲聊阿里加固(一)

Author:wnagzihxain
Create Time:2016.11.11

0x00 闲扯

1.为什么要写这些?

折腾了一段时间的Android加固,看了很多大牛的文章,收获还是蛮大的,不过好像大部分的文章都是直接写在哪里下断点如何修复之类的,写出如何找到这个脱壳点的文章还是比较少,所以我准备整理一下这部分的知识,讲讲如何找到脱壳点,我一直觉得当我们拿到一个未知的加固样本,学会去分析它,知道如何去分析它,才是最重要的,而不是看了大牛们的文章,说在mmap下断点,在dvmDexFileOpenPartial下断点,那么下次壳更新之后依旧不知道如何去脱壳

2.需要什么样的基础?

用过JEB,IDA Pro,如果有跟着其它表哥自己脱过壳的那就更好了:),另外,既然都开始玩加固了,那么解压apk后的工程目录,smali语法等这种基础的东西就不再提了

3.为什么选择阿里加固?

因为我手上的加固样本有限,不是每个版本的加固样本都有,所以综合考虑了一下,选择三个阿里的样本,能比较容易形成一种循序渐进学习的感觉,样本全部来自历年阿里CTF和阿里移动安全挑战赛

4.适合对象?

最适合跟着其它表哥文章脱过壳,却不知道为什么要那样脱壳的同学,因为接下来这几篇文章讲的就是如何通过一步步的分析,找到脱壳点

0x01 样本初分析---classes.dex

这个样本是阿里14年出的,名字是jscrack.apk,我们来载入JEB了解大概信息

首先我们来看箭头指向的地方:

1.fak.jar:从名字来看,这是一个jar文件,但是JEB识别出来是一个dex,这个信息提供的很关键,我们可以猜想,阿里加固的方法会不会将源dex文件隐藏在这个fak.jar里面?

2.StupApplication:可以看到入口变成了StupApplication,有过Android开发经验的同学们都知道,一般情况下,我们在开发APP的时候,如果有全局变量,数据初始化之类的操作,会写一个StartApplication类继承Application类,那么显然这里是阿里加固自己添加的一个入口,用来执行一些初始化的操作,比如解密dex,反调试,检测模拟器等等之类的,当然这只是我们的猜测,不一定正确

3.mobisec.so:加载了一个so文件,这个so文件就是我们的切入点

然后来看两个红色框框,两个native方法:attachBaseContext()和onCreate(),一般情况下,入口应该是onCreate(),但是attachBaseContext()更早于onCreate()执行

wnagzihxain---闲聊阿里加固(一).zip (1.7 MB) 下载附件
jscrack.zip (1.6 MB) 下载附件
源链接

Hacking more

...