简单写下Android应用(APK)的逆向脱壳过程---【蘇小沐】
0
目录
(一)Apk的文件结构
1、META-INF目录
1)MANIFEST.MF文件
2)CERT.SF文件
3)CERT.RSA文件
2、classes.dex-dx文件
3、res目录
4、resources.arsc
(二)Apk静态分析
1、样本详情
1)样本来源
2)样本包名及校验
2、Apk包含调用权限及其SDK情况
3、权限列表
4、Apk查壳
(三)APK动态脱壳
1、ADB命令连接模拟器
2、push脱壳工具到指定位置
3、APK提权
4、执行脱壳程序
5、退出
6、分析脱壳后的.dex文件
总结
1
(一)Apk的文件结构
App和Apk的区别,App是应用程序(Application)的缩写,包含Apk;而Apk是Android应用程序包(Android Application Package)的缩写,类似Symbian Sis或Sisx的文件格式,通过将APK文件直接传到Android模拟器或Android手机中执行即可安装;是Android操作系统使用的一种应用程序包文件格式。
一个完整的Apk文件包含有被编译的代码文件(.dex 文件)、文件资源(resources)、 assets、证书(certificates)、和清单文件(manifest file)。
1
META-INF目录
MANIFEST.MF文件Apk的摘要文件。程序遍历Apk包中的所有文件(entry),对非文件夹非签名文件的文件,逐个用SHA1生成摘要信息,再用Base64进行编码。
CERT.SF文件对摘要的签名文件。对前一步生成的MANIFEST.MF,使用SHA1-RSA算法,用开发者的私钥进行签名。在安装时只能使用公钥才能解密它。解密之后,将它与未加密的摘要信息(即,MANIFEST.MF文件)进行对比,如果相符,则表明内容没有被异常修改。
系统在对程序进行验证的时候,用开发者公钥对不正确的签名文件进行解密,得到的结果和摘要文件(MANIFEST.MF)对应不起来,所以不能通过检验,不能成功安装文件。
CERT.RSA文件中保存了公钥、所采用的加密算法等信息;系统对签名文件进行解密,所需要的公钥就是从这个文件里取出来的。
2
classes.dex - dx文件
3
res目录
4
resources.arsc
2
(二)Apk静态分析
1
样本详情
官网下的豌豆荚应用市场,链接https://www.wandoujia.com/apps/7833706。
在司法鉴定中,需要严格记录,以便随时可以回溯所有的操作,记录唯一性,下面对该多开Apk记录信息。
2
Apk包含调用权限及其SDK情况
3
3
权限列表
很多Android应用和游戏中会存在一些恶意收集用户隐私的行为,Google对Android的"权限等级"分为"normal"、"dangerous"、"signature"、"signature|system"(或signatureOrSystem)四大类。
jadx-gui打开Apk,可以看到AndroidManifest.xml <manifest>标签内使用<uses-permission>里面有很多的声明,"android.permission.xxx"的就是应用程序申请的具体权限要求,在权限列表中,我们可以看到,应用申请了哪些请求,下面将该Apk所要申请的(部分)权限列表如下。
4
Apk查壳
由于Android应用程序的代码都存储在dex文件中,在前面jadx-gui工具打开APK时,看到有qihoo.util,其使用某数字公司的壳进行了软件加固,导致我们无法直接查看.dex文件;我们要想得到dex文件,首先对该Apk进行脱壳操作,然后提取解密后的dex进行功能分析。( jadx-gui查看已加壳)
3
(三)APK动态脱壳
1
ADB命令连接模拟器
2
push脱壳工具到指定位置
3
APK提权
4
执行脱壳程序
这时候,回到模拟器,打开要脱壳的App,后就开始自动脱壳操作,如图所示为脱壳完成。
5
退出
最后输入命令:"exit"退出该模式。
6
输入标题
我们回到模拟器的/data/local/tmp文件夹目录下,现在可以看到多了一个"XXX.dex"的文件(有的软件脱壳后存在多个.dex文件),说明已经反编译成功,脱壳出来了。
记录 |
开始编辑:2019年 12月 25日 |
END
往期精彩回顾
【蘇小沐】
关注我,了解更多取证知识,别忘了点赞+在看哦!