爱加密脱壳实战

前言

看了这么久的书,总算是看完了,总归是要写点东西,记录下。这里基本过程还是参考大黄书上的内容,主要是自己动手。

测试

首先我们拿到一个apk程序,肯定要先查看一些基本的信息。包名,主活动名
所以将apk拖入AndroidKiller,提示爱加密加壳。只有两个类
爱加密脱壳实战_第1张图片
可以通过反编译源代码进行查看,但都看出什么有用的信息。这种apk不脱壳是完全无法下手的。

壳的几种方式

加壳之后的源apk通常可以存放在三个位置。
一、assets目录下,由于该目录不参与编译,仅仅是打包,因此很多apk加壳会选择将原apk放在这里。
二、lib目录下,将源apk放在so文件中,在运行时进行解密
三、放在dex文件的结尾,这种apk往往是反编译不出来的,因为dex的格式已经被破坏,文件头的某些字段别修改(如长度,标志位,校验位)

脱壳

libdvm.so_Z21dvmDexFileOpenPartialPKviPP6DvmDex函数下断点,这是加载dex的函数。
但是我在刚开始调试的时候,发现程序还未运行到这里,就会自动退出,说明该apk做了反调试检测。
从原理上我们可以知道反调试是通过查看/proc/[pid]/status中的TracePid的值来判断该apk是否被调试,因此呢fopenfgets这两个函数就不可避免了,我们在这两个位置下断点,知道fopen打开status文件,fgets从文件中读取TracePid的内容时,修改该值,从而绕过反调试。

一点疑惑

我在做这里案例的时候,刚开始确实是这样的,但是最后不知道怎么回事,好像反调试检测突然消失了一般。我直接就通过_Z21dvmDexFileOpenPartialPKviPP6DvmDex达到了脱壳的目的,中间也没有直接退出。emmm…但是我觉得原理就是这样,最终的目的都是一样的。

总结

无论中间的结果如何吧,最后都是成功的脱壳,也学到了很多知识。到此有关android逆向的基本知识的差不多有了概念,剩下的就需要通过不断地实战,来积累经验了。

你可能感兴趣的:(android)