关于Android短信恶意木马Smali汇编码逆向分析

2015-01-01 03:04赵北庚王剑锋
网络安全技术与应用 2015年10期
关键词:源代码寄存器逆向

◆赵北庚 王剑锋

0 引言

Android系统是当今使用最广泛的智能手机系统,基于Andoird系统的手机程序类型丰富,功能多样。逆向分析是指在没有程序源代码的情况下,通过将可执行文件反编译成汇编代码,阅读分析汇编代码分析出程序逻辑的方法。Sma1i汇编码是Android虚拟机使用的机器码。研究Android程序的Sma1i汇编码逆向分析,对Android系统的程序功能改进、打补丁和恶意代码分析有重要的意义。基于此,设计和完成了一个实验,在没有源代码的情况下,通过对一个真实的 Android短信木马程序9555.apk进行反汇编逆向分析,梳理出程序功能。实验的过程和思路对研究Android程序的逆向分析有积极的意义。

1 实验过程

1.1 将apk程序包反编译为sma1i文件

使用apktoo1工具,将9555.apk反汇编为sma1i文件,命令如下:

apktoo1 d 9555.apk outdir

其中,9555.apk是要反编译的Android程序包,outdir为输出路径。得到的输出文件如图1所示。

图1 使用apkToo1反编译得到的文件

如图1所示,res文件夹中包含了程序的各种资源文件,如图片、定义界面的xm1文件、字符串资源、资源索引文件,等;sma1i文件夹里包含了反编译得到的Sma1i代码文件,每个Sma1i文件对应源代码中的一个Java文件;AndroidManifest.xm1是此程序的配置文件。

1.2 定位程序入口

通常一个程序工程中包含多个 Java文件,反编译也会得到多个Sma1i文件,在逆向分析过程中,可以在AndroidManifest.xm1的app1ication节点中找到程序入口,如图2所示。

图2 在AndroidManifest.xm1中找程序入口

如图2所示,9555.apk的程序入口是A.sma1i。系统地分析sma1i代码,应从程序入口开始,梳理逻辑,定位程序的走向,根据程序走向依次分析项目中的各个文件。

1.3 分析Sma1i汇编码逻辑

在锁定程序入口文件后,从入口文件开始,以此对每个Sma1i文件进行分析。一个Sma1i文件代码的结构与一个Java C1ass对应,包含了实例变量和方法。与X86汇编代码不同,Sma1i汇编码中只有“寄存器”概念,而没有“内存地址”的概念。实际上,除了真正的物理寄存器,对内存的调用也被Sma1i抽象成了虚拟寄存器的调用。Sma1i代码中的寄存器以字母v开头,后接编号,如v0、v1、v2等。对于Sma1i代码分析人员来说,分析程序中数据的处理和流向,需要注意各个寄存器中数值的类型和变化。

1.4 归纳流程图

整理每个Sma1i文件的代码,将每个C1ass的类名、父类,以及主要的功能整理成矩形形式,并用虚线箭头标注出调用关系,如图3所示。

图3 程序部分流程图

2 实验总结

实验过程中,以一个真实的Android短信木马9555.apk为例,进行了一次完整的Sma1i汇编码逆向分析过程。通过本次实验,总结出Android程序逆向分析基本流程如下:

(1)通过apktoo1或类似的反汇编工具,将apk程序包反汇编成Sma1i文件。

(2)在AndroidManifest.xm1中查看程序入口。

(3)从程序入口开始,依次分析每个 Sma1i文件,梳理程序逻辑。

(4)根据分析结果,绘制流程图,归纳程序功能。

3 结语

本文所述的实验,在没有源代码的情况下,对一个真实的Android木马程序进行了反汇编和逆向分析,并梳理出程序功能。基于Sma1i代码的Android程序反汇编逆向分析,是分析Android程序功能的有效方法,在恶意代码调查、改进软件功能等领域有重要意义。本文所述的实验,为后续更深入的Android程序逆向分析研究打下基础。在今后的研究中,我们会重点关注在没有源代码的情况下,对Android程序进行动态调试的方法和技巧。

猜你喜欢
源代码寄存器逆向
逆向而行
STM32和51单片机寄存器映射原理异同分析
基于TXL的源代码插桩技术研究
Lite寄存器模型的设计与实现
软件源代码非公知性司法鉴定方法探析
移位寄存器及算术运算应用
基于语法和语义结合的源代码精确搜索方法
揭秘龙湖产品“源代码”
逆向工程技术及应用
Lx5280模拟器移植设计及实施