通过修改应用资源文件Anti-analysis的安卓恶意样本该咋办:)
上次我们分析了一个修改AndroidManifest.xml,使apktool工具分析异常的样本。(原文见:http://mp.weixin.qq.com/s?__biz=MzAwMTMzMDUwNg==&mid=503394930&idx=1&sn=6e825f5a770273ce86fa822ca2f81987#rd)这次我们看一个通过修改应用资源文件Anti-analysis的案卓恶意样本。
名称:luyin.apk
大小: 215271 字节
修改时间: 2016年5月22日, 17:31:49
MD5:627F4A461D53DBC9F1639F03595628F3
SHA1: 7CFF176AEEAE8D54090398E4B133F968E7FED671
CRC32: 82E47ACE

0x01异常情况
从错误提示看是资源文件读取出错了。这种情况下基于apktool的很多反编译的IDE也会报错。JEB可以反编译,但提示资源文件没有全部处理。

0x0资源文件组成
再回顾下一个典型的APK文件通常有下列内容组成:
AndroidManifest.xml 程序全局配置文件
classes.dex Dalvik字节码
resources.arsc 资源文件
META-INF\ 该目录下存放的是签名信息
res\ 该目录存放资源文件
assets\ 该目录可以存放一些配置文件
大牛们每次一提到资源文件,都要祭出下面这张图。然而我瞅了半天也没记明白。

Resources.arsc文件格式是由一系列的chunk构成,每一个chunk均包含一个ResChunk_header,用来描述这个chunk的基本信息。
在一个apk中,对应chunck一般有:
ResTable(1个)
ResStringPool(1个)
ResTable_Package(1~n个)
RES_TABLE_TYPE_SPEC(1~n个)
RES_TABLE_TYPE(1~n个)。
为了便于理解,我们还是通过模版来分析Resources.arsc文件。下载ARSCTemplate.bt模板,用010editor打开模板并运行。(下载地址见http://bbs.pediy.com/showthread.php?p=1416062)

下面就是一个正常的资源文件。可以在apk解包后的文件夹中找到resources.arsc文件。
我们重点分析第一块RESTABLE_HEADER的内容。其中前0-1两个字节代表chunk的类型,值为0x0002表示类型为RES_TABLE_TYPE。注意Resources.arsc文件采用小端编码方式(即低位在前,高位在后)

2 – 3共2字节,表示该chunk类型的头长度,值为0x000C表示该类型的头长度为12字节长度。

4-7,共4字节,表示该chunk的总长度,值为0x000004F4表示该chunk的总长度。

01 000000指的是被编译的资源包的个数,这里只有一个。
后面部分的具体分析略,大家可以自行查找资料。
0x03 解决
现在我们也把luyin.apk解包看下资源文件。具体做法参见上一篇文章。
用010editor打开resources.arsc,又没有发现有什么不对的?和我们刚才分析的RESTABLE_HEADER,结合报错信息,确认这个恶意代码的作者是把0200改成了0000,以此制造异常。

这时候,我们只需要修改成红字所标的部分。

然后重打包。再次用apktool打开就不会出现资源文件问题了。
重打包具体做法见上一篇文章。
总结:
上次咱们分析了一个修改全局配置文件的样本,这次咱们分析了分析资源文件的样本,实际上很多恶意代码是两种一起用的,比如今晚上有刚刚收到了一个,看来这些办法是黑产爱用的。
那么不知道大家掌握了没有呢?
最后,给大家留个apk玩下。就用这篇和上一篇里的方法就可以了。链接:http://pan.baidu.com/s/1ge8F3WJ 密码:iqsz
想进一步了解的可以看下:
http://bbs.pediy.com/showthread.php?p=1416062
Good Night!
夜雨聆风
