【逆向分析篇】APK逆向脱壳过程
2023-12-20 08:2:40 Author: 网络安全与取证研究(查看原文) 阅读量:11 收藏

简单写下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目录

META-INF目录是Android 签名认证的目录,主要包含CERT.RSA、CERT.SF、MANIFEST.MF这三个文件。
Android机制要求会对每一个Apk文件都进行签名,在安装Apk文件的时候,Android系统通过对比该Apk签名信息程序的完整性,来判断程序是否有被恶意修改、添加、删除等操作,从而决定是否可以安装,该方法在一定的程度上是安全的,能保证自己的APK没有被其他人恶意的修改。

1)MANIFEST.MF文件

MANIFEST.MF文件Apk的摘要文件。程序遍历Apk包中的所有文件(entry),对非文件夹非签名文件的文件,逐个用SHA1生成摘要信息,再用Base64进行编码。

2)CERT.SF文件

CERT.SF文件对摘要的签名文件。对前一步生成的MANIFEST.MF,使用SHA1-RSA算法,用开发者的私钥进行签名。在安装时只能使用公钥才能解密它。解密之后,将它与未加密的摘要信息(即,MANIFEST.MF文件)进行对比,如果相符,则表明内容没有被异常修改。

系统在对程序进行验证的时候,用开发者公钥对不正确的签名文件进行解密,得到的结果和摘要文件(MANIFEST.MF)对应不起来,所以不能通过检验,不能成功安装文件。

3)CERT.RSA文件

CERT.RSA文件中保存了公钥、所采用的加密算法等信息;系统对签名文件进行解密,所需要的公钥就是从这个文件里取出来的。

2

classes.dex - dx文件

classes.dex - dx编译后的文件格式,class.dex本来是java编译出来的.classes文件,再次通过dx编译后的格式。要还原出Android源码,首先从这个文件下手,用特殊工具把.dex文件还原成.jar,再利用查看jar格式文件的工具,即可查看源代码。

3

res目录

res目录是Android 程序使用的资源文件都存在这个目录下,如图片文件等。

4

resources.arsc

resources.arsc,是编译好的二进制格式的资源信息,应用程序的语言文件。Apk文件在打包时,strings.xml中的字符串被加密存储为resource.arsc文件保存到Apk程序包中,当Apk被成功反编译后这个文件也被解密出来,可以透过这软件用AndroidResEdit等工具来进行编译。

2

(二)Apk静态分析

1

样本详情

1)样本来源

官网下的豌豆荚应用市场,链接https://www.wandoujia.com/apps/7833706

2)样本包名及校验

在司法鉴定中,需要严格记录,以便随时可以回溯所有的操作,记录唯一性,下面对该多开Apk记录信息。

模拟器安装Apk,打开如下。

软件界面

2

Apk包含调用权限及其SDK情况

在Android诞生的那天起,Apk始终以zip作为文件格式。这样我们用解压软件直接解压Apk文件,就可以直接看到Apk的目录结构,下图是直接解压后的应用目录。

其中,AndroidManifest.xml是非常重要的一个文件,它是Android的清单文件,该文件中存放了Apk的大量配置信息,它记录着软件的一些基本信息,包括软件的包名、版本号、包名、应用权限、组件配置等。
文件是被加密存储进了Apk文件中的,直接解压出来的AndroidManifest.xml并不能直接看到其中的内容;我们需要使用gadx-gui等特定的工具来打开Apk,可以看到AndroidManifest.xml记载的程序各种信息。
gadx-gui工具打开Apk,可以看到AndroidManifest.xml记载的程序版本号、包名、应用请求权限等信息。

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查看已加壳)

如果不清楚的话程序是否加壳,加了什么壳,我们可以借助Apktool Box等工具查壳,打开Apktool Box工具,将该Apk文件拖进去,点击查壳按钮,我们可以看到程序加了那种壳,如图显示该软件使用了360加固。

3

(三)APK动态脱壳

下面我们进行脱壳,首先打开模拟器安装好Apk文件,连接好模拟器后,进行脱壳操作,工具使用的是夜神模拟器,脱壳工具是drizzleDumper。

1

ADB命令连接模拟器

首先,启动模拟器安装需要脱壳的应用程序,ADB命令连接模拟器,输入命令:"adb connect  127.0.0.1:62001"。

2

push脱壳工具到指定位置

接着adb 命令push drizzleDumper到模拟器的/data/local/tmp目录下,输入命令:"adb push drizzleDumper /data/local/tmp"。

3

APK提权

然后输入命令"adb shell chmod 0777 /data/local/tmp/drizzleDumper"、"adb shell"。

输入命令:"adb shell"
输入命令:"cd/data/local/tmp"
输入命令:"./drizzleDumper com.xzj.multiapps" 。

4

执行脱壳程序

这时候,回到模拟器,打开要脱壳的App,后就开始自动脱壳操作,如图所示为脱壳完成。

5

退出

最后输入命令:"exit"退出该模式。 

6

输入标题

我们回到模拟器的/data/local/tmp文件夹目录下,现在可以看到多了一个"XXX.dex"的文件(有的软件脱壳后存在多个.dex文件),说明已经反编译成功,脱壳出来了。

现在我们就可以用jadx-gui分析解密的com.xzj.multiapps_dumped_35.dex文件了。

总结
逆向是一个漫长的过程,以上只简单的对当前主流脱壳方法进行了脱壳分析,在网络的发展中,各种高级加壳、花壳、混淆技术等越来越高级,进阶Apk脱壳技术通过dump内存中处于解密状态的dex,进行修复分析,普通的逆向将难以应对。
书写片面,纯粹做个记录,有错漏之处欢迎指正。
公众号回复关键词【APK逆向】自动获取资源合集,如链接失效请留言,便于及时更新。
【声明:欢迎转发收藏,喜欢记得点点赞!转载引用请注明出处,著作所有权归作者 [蘇小沐] 所有】
【注:本文的软件资源等收集于官网或互联网共享,如有侵权请联系删除,谢谢!】

记录

开始编辑:2019年 12月 25日

最后编辑:2019年 12月 25日

END

往期精彩回顾

▲ 【Android取证篇】Android设备USB调试打开方式(开发者模式)

▲ 【Android取证篇】图解Android模拟器抓包配置教程

【蘇小沐】

关注我,了解更多取证知识,别忘+看哦!


文章来源: http://mp.weixin.qq.com/s?__biz=Mzg3NTU3NTY0Nw==&mid=2247488388&idx=1&sn=ea9012489bd8f9ea6808cc34f009cf97&chksm=ce90b7c88d6b9f165a47e346cd7408db1c06ffddf396af7fa4ab82fda48768a276c7d1bfc043&scene=0&xtrack=1#rd
如有侵权请联系:admin#unsafe.sh