通过修改axml文件Anti-analysis的安卓恶意样本一例
安卓恶意代码为对抗取证与分析,会利用混淆、加壳、加密等机制,其中针对逆向工具的对抗(Anti-Analysis)也是其常用的手法。
今天的样本就是很典型的一例,实践中发现这种处理手法的样本有不少,以前都是偷懒能反编就算了,知其然不知其所以然。想起来前阵子绿盟科技李志昕的一篇恶意代码分析报告中,提到了同样的处理方法(http://blog.nsfocus.net/xaingce-apk-sample-analyses/)那么今天来实践一下。
0x01.异常情况
文件: xiangce.apk
大小: 230353 字节
MD5:51A98BC86F712A3EB4882DB83DA3BEE0
SHA1:AF39BF88CBCE5059E47264C8EF24F74C1AB2B7D0
使用AndroidKiller打开,会有异常报错。

换JEB打开,可以反编译,仍然报错,同时查看AndroidManifest.xml的时候是空的。

那么到底是什么情况造成了这种异常呢?
0x02. decode
Win7环境下:
java -jar apktool-cli.jar d -f -r -s -o tmp/xaingce tmp/xaingce.apk
apktool-cli.jar下载:
链接: http://pan.baidu.com/s/1i4oWc2D 密码: nktm
命令完成以后,生成了名为xiangce的目录。

注:apktool-cli.jar需要用Apktool编译生成
官网说明:
How to Build Apktool from source
Apktool is a collection of 1 project,containing 4 sub-projects and a few dependencies.
brut.apktool.lib – (Main, all the Library code)
brut.apktool.cli – The cli interface of the program
brut.j.dir – Utility project
brut.j.util – Utility project
brut.j.common- Utility project
The main project can be found below
下载地址https://github.com/iBotPeaches/Apktool
Requirements
JDK (1.7)
git
编译步骤:
We use gradle to build. It’s pretty easy.First clone the repository.
1.gitclone git://github.com/iBotPeaches/Apktool.git(下载源码)
2.cd Apktool(进入目录)
3.For steps 3-5 use ./gradlew for unixbased systems or gradlew.bat for windows.
4.[./gradlew][gradlew.bat] build fatJar -Builds Apktool, including final binary.
5.Optional (You may build a Proguard jar)[./gradlew][gradlew.bat] build fatJar proguard
After 1-2 minutes you should have a jarfile at
./brut.apktool/apktool-cli/build/libs/apktool-xxxxx.jar
0x03AndroidManifest.xml修改
此时AndroidManifest.xml还不是明文格式,而是axml格式。我们回顾AndroidKiller一开始的报错,不难发现一个问题,本来该是0x00080003,结果读取出来是0x00080000。那么这串字符代表什么呢?二进制XML文件魔数为0x000800030,也就是说有人人为做了修改,目的就是为了让反编译工具报错,无法继续执行。
那么只需要将第1个字节的00修改为03即可。


但是,修改不止这一处:
0x000000200开始的4个字节内容为style内容相对于sting chunk开头位置的偏移量,因为style个数为0,所以此处的值为0x00000000才对。但样本的AndroidManifest.xml此处的值被改为0x00000003。

除了手工修改以外,我们还可以借助010editor来更快捷的定位和修改。配合AXML模板,修改效率很高。模板下载: https://github.com/tomken/010_template_for_android

下图红色的两处修改以后,测试下是否可以解决异常问题。

0x04重打包
java -jar apktool-cli.jar b -f -o tmp/xiangce_ok.apk tmp/xiangce

把tmp/xiangce重打包成apk
这时候我们再用AndroidKiller打开xiangce_ok.apk,发现AndroidManifest.xml文件可以正常反编译,但仍然存在其他错误,问题都出在xml文件上。

对所有这些xml文件都做刚才同样的修改处理,然后重新打包,再次测试。OK,搞定了~
0x05总结
这个样本是利用apk的容错机制,修改AndroidManifest.xml等文件,达到anti-analysis的目的。
JEB可以反编译,但是我们也需要知道原因,才能顺利的完成回编译。
尽管还存在一些问题,AndroidKiller确实挺好用的,未来可期。
大家可以自己修改试试看!今晚11点前睡觉!祝大家好梦!
夜雨聆风
