看雪安卓高级研修安卓逆向分享学习历程

1、 学习过程维chat;Eureka615298

像我的学习过程的话,从大一下学习逆向开始,到大三上学期结束,都是以打 ctf 为主的,我是一起参与小组团队逆向方向的解题,逆向的题型的话像 Windows、Linux、android 都会有涉及到,还是比较杂的,然后我就是在打 ctf 的过程中开始接触 android 逆向的,从大一下到大三上也都是零零碎碎的学习,就是能够在 ctf 中做出了题目就好了,没有太过多深入的探究。

然后是从上学期结束,也就是大三上结束后,今年刚开始的时候,我开始把学习重心从 ctf 上脱离出来,转移到安卓逆向上面了。然后到现在真正专注安卓逆向的时间差不多四个多月的样子。

学习的方法就是首先看书,非虫前辈的那本《Android 软件安全权威指南》给过一遍,把所有的名词都给了解下,盲点都扫一下,然后就是开始大量的看文章,看帖子,复现,然后差不多了就开始自己去实战了,找 app 去分析和逆向。

然后其实收获最大的还是搞实战的时候,因为实战的时候经常会碰到各种问题,尤其是可能会碰到一些莫名其妙的问题,这个时候去解决问题就是比较有意思的一个过程,虽然也很头大。

然后分析过的 app,有的是比较简单,给完整地成功分析了一遍,分析过程中很多时候也不是太顺利,是会被卡到的,然后过了一段时间有了新思路又重新搞成功的。

还有些app就是比较确实比较难,比如企业版的加固,目前的水平分析不了,就先放着了。

像还有些就是有一定难度,但不至于难到没法分析,就会再学到新的知识或者工具后重新回过头来再分析下。

整个过程还是学到了非常多的东西,经验也积累了很多。然后完整分析出来的感觉很有意义的都会发帖子分享出来。

2、 常用分析工具

在逆向分析的过程中,IDA、JEB、frida、jadx 、Charles还有 MT 管理器几个工具是比较常用的。

Java 层的分析是 JEB、jadx 还有 frida 相互配合着进行静态分析和动态调试以及 hook。

so 层的就是 ida 来分析,静态分析比较困难的就动态调试,大部分时候都会先用 frida hook libart 跑一下,打印一下 RegisterNatives 函数的参数,获得下注册函数的名称还有地址。

还有就是动态调试过程中有时候需要 dump 下来 dex 文件和 so 文件,会使用 idapython 脚本和 idc 脚本。

3、 frida hook 和脱壳

frida 是我很喜欢的一个工具,大部分时候我不会先选择进行动态调试,而是使用 frida 进行 hook,我使用 frida 在 Java 层的操作比熟练些,在 so 层的操作还没怎么自己尝试过。

frida 在 so 层的操作我主要就是用别人的项目了,比如在 so 文件之前,先使用 frida hook libart 工具来一把梭,可以打印出 so 的名字和函数的偏移地址。

再比如脱壳时候的 dex 整体 dump 操作,我会尝试用 frida-unpack 或者 frida-dexdump 来进行操作。

前者是通过 hook 住 libart.so 库的一些函数来进行对 dex 文件的整体 dump,也就是最常见的脱壳点 openCommon 或者 openMemroy。后者就是通过内存搜索 dump 对 dex 文件进行整体 dump。

在不考虑整体指令抽取的情况,这两个工具是很典型的 dex 文件整体 dump 思路。

然后关于脱壳了解到的还有就是像 Fdex2 采用的思路是对类 java.lang.ClassLoader 的 loadClass 函数进行 hook 获得返回的 Class 对象 cls,再通过 java.lang.Class 类的 getDex 方法和 com.android.dex.Dex 类中的 getBytes 函数完成对内存中的 dex 进行 dump。像这个思路也是能够 frida 很简单的代码能够实现的。

然后就是针对指令抽取壳,指令抽取壳我也是只停留在学习了解的理论知识上,我还没有真正的实战处理过,不过我下面学习的一个计划和重点就是学习对抗指令抽取壳了。

来源url
栏目