一、 壳是什么东西
Android上的应用安装文件是apk格式的,这个apk文件其实就是个归档文件压缩包,把应用相关的源码、资源文件、配置文件等等乱七八糟的东西都简单粗暴的归档打包,直接解压之后就能得到app的dalvik指令集dex文件,然后再反编译为smali,还可以再反编译为Java,这样就几乎等同于拿到了app就能拿到可读性还蛮清晰的源码,导致逆向破解的门槛几乎很低,有手点点鼠标就行,门槛之低像我这样的阿猫阿狗都可以捣鼓逆向了 :)
没有做防范措施的app几乎等同于在裸奔,因此后来演变出来一些保护措施,这是从PC端的逆向攻防中得到的启示方案,就是在apk外面再套一层壳,在运行的时候这层壳才会把真正的apk的dalvik指令集释放出来,为apk加壳是目前主流的防护方案。
为了培养开发者的安全意识,现在很多应用平台都是要求开发者在上传应用之前要先加固,很多应用平台也提供了自己的加固方案,开发者也可以自行研究加壳方案,对于开发者来说,为apk文件加壳是一件非常简单的事情,所以现在市面上的应用大部分都是被加过壳的,但是对于逆向者来说,真正的源码是隐藏在壳之下的,要想拿到源码研究其逻辑就要先想办法将壳脱掉,所以我们拿到一个apk要逆向的第一步就是用查壳工具看下这个apk文件是否加壳,以及加了什么壳,然后想办法把壳脱掉,拿到dex文件再去分析。查壳工具其实是有很多的,知道原理我们自己也可以写,只是没什么必要,本篇文章就是介绍一个查壳工具PKID。
二、 PKID的下载
PKID有两个版本,最开始是只有Windows版本的,后来有位大佬用Mac,觉得每次用的时候都要开虚拟机太麻烦了于是写了个Java版的,读者请根据自己的情况下载不同的版本。
https://www.secpulse.com/archives/68886.html
Windows版下载地址:https://www.jb51.net/softs/603472.html#downintro2
Java版的看雪论坛下载地址:https://bbs.pediy.com/thread-225120.htm
三、 PKID的使用
Windows版的:
直接拖动apk文件到窗口上松开:
PKID的使用非常简单,只需要将apk拖放到窗口上松开即可,比如下面是查壳识别结果,这个游戏app用了360的壳:
查壳是我们破解一个app的第一步,通常情况下我们要先知道一个app有没有加壳,加了什么壳要找到对应的脱壳方法,想办法得到真正的源码之后才开始分析源码开始破解。
四、 识别原理简介
对于加了壳的apk,包里面会有一些符合特定特征的文件,比较简单的方式就是通过检测apk是否符合这些特征,当然随着各大加固平台不断的迭代,其特征也可能会不断的迭代。
我们只需要知道大概原理就可以了,常见的特征判断是判断lib下是否存在特定的so文件,比如看雪上有人总结过的: