Android逆向系列--360二代加固脱壳实例

drizzleDumper脱壳工具

Posted by zeroisone on October 18, 2017

Android逆向系列–360二代加固脱壳实例

前言

在学习Android开发的过程中,往往会去借鉴别人的应用是怎么开发的,那些漂亮的动画和精致的布局可能会让你爱不释手,作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用的APK进行反编译查看。用jadx反编译apk时发现经过360加固,遂对此app脱壳尝试。

360二代加固的难度有所增加,最明显的地方就是qihoo下面增加了一个Configuration.smali文件,由以前的一个增加为两个。

准备工作

反编译工具介绍(jadx)

• jadx介绍

jadx是一款GUI界面的反编译工具,是一款点击鼠标就可以使用的跨平台工具。

项目地址:https://github.com/skylot/jadx

下载地址:https://sourceforge.net/projects/jadx/files/

• 使用方法

a) 下载完解压jadx-0.6.1.zip

b) java环境变量配置,参考教程(https://jingyan.baidu.com/article/c85b7a6414f2ee003bac95d5.html)

c) Windows下点击鼠标运行 bin/jadx-gui (Linux系统运行jadx-gui)

或者直接双击运行lib/jadx-gui-0.6.1.jar

d) 打开APK文件即可查看源码

如果要存储Java源码点击File - Save ALL 即可,我习惯保存java源码并用sublime text 3工具打开,方便全局搜索代码。

脱壳工具介绍(drizzleDumper)

• drizzleDumper脱壳工具的相关链接和讨论

github地址:https://github.com/DrizzleRisk/drizzleDumper#drizzledumper

freebuf地址:https://github.com/DrizzleRisk/drizzleDumper#drizzledumper

看雪地址:http://bbs.pediy.com/showthread.php?goto=nextoldest&nojs=1&t=213174

android-unpacker地址: https://github.com/strazzere/android-unpacker/tree/master/native-unpacker

• drizzleDumper工具下载地址

链接: http://pan.baidu.com/s/1hr49HBI 密码: 6bgv

• jadx工具下载地址

链接:https://sourceforge.net/projects/jadx/files/

Android基础知识

APK(Android Package)是Android程序安装包,是 Android 软件包的分发格式,它本身是个 Zip 压缩包。将.apk后缀名改成.zip,解压后APK 根目录下可能出现的目录和文件有:

AndroidManifest.xml
resource/
xxx.dex
assert/
META-INF/
resources.arsc

• AndroidManifest.xml就是对APP的基本描述文件,用来配置包名_权限_组件信息/最小API等等信息。

• resource 它是app中的资源文件,比如图片布局,如果你想偷点图片什么的,翻一番就可以有的。

• xxx.dex 是Android虚拟机Dalvik的可执行格式(Dalvik Executable format)。

• assert 存放原始的二进制素材,比如mp3,mp4,css,Bitmap。

• META-INF 是对apk的签名信息,防止被盗用。

• resources.arsc 是对value.xml的打包文件。

如果开发者对APP没有做混淆的话,以上文件均可反编译,反编译后,就是这样的:

AndroidManifest.xml -> 转为可读的明文xml

resource/ -> 转为可读的明文xml

xxx.dex -> 变成smali,smali是dex反编译后的文件,基于寄存器,语法类似于汇编

META-INF/ -> 这个...没必要破解,反正重新打包后都要重新签名的

resources.arsc -> 转为可读的明文xml,比如value_string ,value_style

部分名词科普

•	.java : 这个是Java源代码

•	.jar : 这个是打包好的Java二进制包

•	.class : 这个是jar中的字节码/汇编码

•	.dex: Dalvik可执行格式

•	.smali: Dalvik的字节码/汇编码

•	.apk: 这个是Android的安装包

drizzleDumper脱壳工具原理分析

drizzleDumper工作的原理是root环境下,通过ptrace附加需要脱壳的apk进程,然后在脱壳的apk进程的内存中进行dex文件的特征搜索,当搜索到dex文件时,进行dex文件的内存dump。

drizzleDumper.c实现核心代码,详情请查看http://blog.csdn.net/qq1084283172/article/details/53561622

脱壳实战

使用已经root的真机进行drizzleDumper的脱壳实战,以包名com.bbvwpz.nhslo为例。(包名从反编译的AndroidManifest.xml中可以看到)

1.工具下载如下图所示,分为arm和x86两个版本,根据手机CPU类型选择相应版本

2.查看手机CPU类型是x86还是arm adb shell cat _proc_cpuinfo 注:adb是SDK提供的一个常用工具的命令行工具,全称为Android Debug Bridge,用于在调试时连接本机和手机设备。adb shell命令需提前配置好adb环境变量。

3.将dizzleDumper文件推送到android手机_data_local/tmp文件夹下

cd xxxxx/drizzleDumper  #进入存放的drizzleDumple文件夹

adb push drizzleDumper /data/local/tmp #将drizzleDumper文件推送到手机

4.修改drizzleDumper可执行权限

adb shell chmod 0777 /data/local/tmp/drizzleDumper

5.执行脱壳操作

adb shell #进入android系统的shell
su      #获取root权限
./data/local/tmp/drizzleDumper com.bbvwpz.nhslo 2/#执行脱壳操作等待两秒

如上图所示,脱壳成功,dex文件com.bbvwpz.nhslo_dumped_80.dex保存在_data_local/tmp文件夹下

6.将dex文件拷贝到电脑上

cp /data/local/tmp/com.bbvwpz.nhslo_dumped_80.dex /mnt/sdcard

adb pull sdcard/com.bbvwpz.nhslo_dumped_80.dex

7.用jadx查看dex文件可以看到app源码了