44
第第第 Android 第第第第 第第第第

第三章 Android 恶意代码静态分析

  • Upload
    gaille

  • View
    350

  • Download
    0

Embed Size (px)

DESCRIPTION

第三章 Android 恶意代码静态分析. 学习目标. 掌握恶意代码静态分析的方法 能够熟练使用 APKTool 、 IDA Pro 等工具分析恶意代码. 移动终端恶意软件简介. 移动终端恶意软件是一种破坏性程序,和计算机恶意软件一样具有传染性、破坏性。 恶意软件分类 ( 1 )蠕虫 Worm ( 2 )木马 Trojan ( 3 )感染性恶意软件 Virus ( 4 )恶意程序 Malware. 移动终端恶意软件发展史 ( 1 ) 2004 年 6 月,第一个智能移动终端恶意软件 Cabir 出现,感人 SymbianS60 平台的移动终端 - PowerPoint PPT Presentation

Citation preview

Page 1: 第三章  Android 恶意代码静态分析

第三章 Android 恶意代码静态分析

Page 2: 第三章  Android 恶意代码静态分析

2

学习目标 掌握恶意代码静态分析的方法 能够熟练使用 APKTool 、 IDA

Pro等工具分析恶意代码

Page 3: 第三章  Android 恶意代码静态分析

移动终端恶意软件简介 移动终端恶意软件是一种破坏性程序,和计算机恶意软件一样具有传染性、破坏性。 恶意软件分类 ( 1 )蠕虫 Worm ( 2 )木马 Trojan ( 3 )感染性恶意软件 Virus ( 4 )恶意程序 Malware

Page 4: 第三章  Android 恶意代码静态分析

移动终端恶意软件发展史( 1 ) 2004 年 6月,第一个智能移动终端恶意软件

Cabir出现,感人 SymbianS60平台的移动终端( 2 ) 2005 年 1月,出现全球第一例通过计算机感染移动终端的恶意软件( 3 ) 2005 年 7月,通过彩信进行传播的移动终端恶意软件出现

Page 5: 第三章  Android 恶意代码静态分析

( 4 ) 2006 年 2 月,俄罗斯首现攻击 Java 程序的“ Redbrowser.A 蠕虫”( 5 ) 2007 年,熊猫烧香移动终端恶意软件现身( 6 ) 2010 年,一个名为“给你米”的病毒

将 Android 手机卷入了“吸费门”

Page 6: 第三章  Android 恶意代码静态分析

移动终端恶意代码传播途径( 1)彩信传播( 2)蓝牙传播( 3)红外传播( 4 ) USB传播( 5)闪存卡传播( 6)网络下载传播

Page 7: 第三章  Android 恶意代码静态分析

1 静态分析静态分析是指在不运行代码的情况下,采用词法分析、语法分析等各种技术手段对程序文件进行扫描从而生成程序的反汇编代码,然后阅读反汇编代码来掌握程序功能的一种技术。

Page 8: 第三章  Android 恶意代码静态分析

1 静态分析静态分析方法种类:( 1)使用APKTool对程序进行分析( 2)阅读反汇编生成的Dalvik字节码,可以使用

IDA Pro分析 dex文件,或者使用文本编辑器阅读反编译生成的 smali文件;( 3)阅读反编译生成的 Java源码,可以使用

dex2jar生成 jar文件,然后在使用 jd-gui阅读 jar文件的代码

Page 9: 第三章  Android 恶意代码静态分析

2 使用 APKTool 静态分析 Android 恶意代码 将 apk文件利用 APKTool反编译,生成

smali格式的反汇编代码,然后阅读 Smali文件的代码来理解程序的运行机制,找到程序的突破口进行修改,最后使用 APKTool重新编译生成 apk文件并签名,最后运行测试,如此循环,直至程序被成功破译。

Page 10: 第三章  Android 恶意代码静态分析

2 使用 APKTool 静态分析 Android 恶意代码步骤( 1)反编译 APK程序( 2)程序的主 Activity( 3)需要重点关注的 Application类

Page 11: 第三章  Android 恶意代码静态分析

2 使用 APKTool 静态分析 Android 恶意代码 ( 1)反编译 APK程序每个 APK文件中都有一个

AndroidManifest.xml文件,它记录着软件的一些基本信息,包括软件的包名、运行的系统版本。并且这个文件被加密存储进了apk文件中,在开始分析前,有必要先反编译 apk文件。

Page 12: 第三章  Android 恶意代码静态分析

2 使用 APKTool 静态分析 Android 恶意代码 APKTool 下载地址http://code.google.com/p/android-apktool/ APKTool 安装 在 Windows 平台上需要两个文件: apktool1.5.2.tar.bz2 和 apktool-

install-windows-r05-ibot.tar.bz2 ,将这两个文件解压到同一个目录下,如 D:\apktool ,解压后将该目录添加到 path 环境变量中。 反编译 apk命令Apktool d[ecode] [OPTS] <file.apk> [<dir>] 编译 apk命令Apktool b[uild] [OPTS] <app_path> [<out_file>]

Page 13: 第三章  Android 恶意代码静态分析

2 使用 APKTool 静态分析 Android 恶意代码分析 APK文件反编译 APK文件成功后,会在当前的 outdir目录下生成一系列目录与文件。其中 smali目录下存放了程序所有的反汇编代码, res目录则是程序中所有的资源文件。

Page 14: 第三章  Android 恶意代码静态分析

2 使用 APKTool 静态分析 Android 恶意代码 ( 2)程序的主 Activity 一个 Android程序有一个或者多个 Activity组成 每个 Activity都是 Android程序的一个显示页面,负责数据的处理及展示工作 在反编译出的 AndroidManifest.xml中找到主

Activity后,可以直接去查看其所在类的 onCreate()方法的反编译代码,通常这就是程序的入口处,所有的功能都从这里开始执行,我们可以沿着这里一直向下查看,追踪软件的执行流程。

Page 15: 第三章  Android 恶意代码静态分析

2 使用 APKTool 静态分析 Android 恶意代码 ( 3)需要重点关注的 Application类 如果需要在程序的组件之间传递全局变量,或者在

Activity启动之前做一些初始化工作,需要使用Application类

在程序中添加一个继承自android.app.application,然后重写它的OnCreate()方法

由于 Application类启动较早,一些恶意软件会在OnCreate()方法中实现恶意代码

Page 16: 第三章  Android 恶意代码静态分析

2 使用 APKTool 静态分析 Android 恶意代码 例子:使用 APKTool 对 Android程序 Crackme02分析与破解 步骤 ( 1)运行 Crackme02查看结果 ( 2)使用 APKTool反编译 APK文件 ( 3)分析 APK文件 ( 4)修改 Smali文件 ( 5)重新编译 APK文件并签名

Page 17: 第三章  Android 恶意代码静态分析

2 使用 APKTool 静态分析 Android 恶意代码运行 Crackme02查看结果安装 apk文件 adb install crackme02.apk

Page 18: 第三章  Android 恶意代码静态分析

2 使用 APKTool 静态分析 Android 恶意代码分析 APK文件 反编译 APK文件后,会在当前的 outdir目录下生成一系列目录与文件。其中 smali目录下存放了程序所有的反汇编代码, res目录存放了程序所有的资源文件。 如何寻找突破口?错误提示。打开 res\values\

string.xml文件。

Page 19: 第三章  Android 恶意代码静态分析

2 使用 APKTool 静态分析 Android 恶意代码 <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">Crackme0201</string> <string name="menu_settings">Settings</string> <string name="title_activity_main">Crackme0201</string> <string name="info">Android 程序破解演示实例 </string> <string name="username"> 用户名: </string> <string name="sn"> 注册码: </string> <string name="register"> 注 册 </string> <string name="hint_username"> 请输入用户名 </string> <string name="hint_sn"> 请输入 16 位的注册码 </string> <string name="unregister"> 程序未注册 </string> <string name="registered"> 程序已注册 </string> <string name="unsuccessed"> 无效用户名或注册码 </string> <string name="successed"> 恭喜您!注册成功 </string> </resources>

Page 20: 第三章  Android 恶意代码静态分析

2 使用 APKTool 静态分析 Android 恶意代码使用 APKTool反编译 apk文件后,所有的索引值保存在 public.xml文件中。 unsuccessed 的 id 值为 0x7f05000b,在 smali目录中搜索包含 0x7f05000b的文件,最后发现只有MainActivity$1.smali文件一处调用。

Page 21: 第三章  Android 恶意代码静态分析

<?xml version="1.0" encoding="utf-8"?> <resources> <public type="string" name="hint_sn" id="0x7f050008" /> <public type="string" name="unregister" id="0x7f050009" /> <public type="string" name="registered" id="0x7f05000a" /> <public type="string" name="unsuccessed" id="0x7f05000b" /> <public type="string" name="successed" id="0x7f05000c" /> <public type="style" name="AppTheme" id="0x7f060000" /> <public type="menu" name="activity_main" id="0x7f070000" /> <public type="id" name="textView1" id="0x7f080000" /> <public type="id" name="edit_username" id="0x7f080001" /> <public type="id" name="edit_sn" id="0x7f080002" /> <public type="id" name="button_register" id="0x7f080003" /> <public type="id" name="menu_settings" id="0x7f080004" /> </resources>

Page 22: 第三章  Android 恶意代码静态分析

2 使用 APKTool 静态分析 Android 恶意代码修改 Smali文件代码 将 .line 32行的代码“ if-nez v0, :cond_0”改成“ if-eqz v0, :cond_0”,并保存

Page 23: 第三章  Android 恶意代码静态分析

2 使用 APKTool 静态分析 Android 恶意代码重新编译 APK文件并签名使用 apk b outdir命令,编译成功后会在

outdir目录下生成 dist目录,里面存放着编译成功的 APK文件

Page 24: 第三章  Android 恶意代码静态分析

2 使用 APKTool 静态分析 Android 恶意代码使用 jdk中提供的工具进行签名 ( 1)生成签名文件apk_dir>keytool -genkey -keystore crackme02.keystore  -alias crack -keyalg  RSA -validity 2000

Page 25: 第三章  Android 恶意代码静态分析
Page 26: 第三章  Android 恶意代码静态分析

2 使用 APKTool 静态分析 Android 恶意代码使用 jdk中提供的工具进行签名 ( 2)对 apk文件签名apk_dir>jarsigner -verbose -keystore  crackme02.keystore -signedjar crackme_signed.apk crackme02.apk  crack

Page 27: 第三章  Android 恶意代码静态分析
Page 28: 第三章  Android 恶意代码静态分析

2 使用 APKTool 静态分析 Android 恶意代码使用 jdk中提供的工具进行签名 ( 3)验证签名apk_dir>jarsigner -verify crackme_signed.apk

Page 29: 第三章  Android 恶意代码静态分析

2 使用 APKTool 静态分析 Android 恶意代码测试 删除已经安装的 smackme02.apk adb uninstall com.droider.crackme0201安装新生成的 apk文件 adb install smackme02_signed.apk

Page 30: 第三章  Android 恶意代码静态分析
Page 31: 第三章  Android 恶意代码静态分析

3 使用 IDA Pro 分析 Android 恶意代码 IDA Pro 是目前全世界最强大的静态反汇编分析工具。它具备可交互、可编程、可扩展、多处理器支持等众多特点。 IDA Pro 从 6.1 版本开始,提供了对 Android的动态调试支持。 http://www.hex-rays.com/products/ida/6.1/

index.shtml

Page 32: 第三章  Android 恶意代码静态分析

3 使用 IDA Pro 分析 Android 恶意代码 例子:同上 步骤 ( 1 )使用 ZIP 工具解压缩 APK 文件 ( 2 )使用 IDA Pro 打开 DEX 文件 ( 3 )修改 DEX 文件 ( 4 )重新修复与签名

Page 33: 第三章  Android 恶意代码静态分析

3 使用 IDA Pro 分析 Android 恶意代码使用 IDA Pro 打开DEX文件 按照上一个例子的分析方法,在 IDA Pro中查找

0x7f05000b 然后找到“ if-nez v0, :cond_0” 位置,点击 IDA Pro主界面上的“ Hex View-A” 选项卡,发现这行代码的指令为“ 39 00 0f 00”,第一个字节 39 为 if-nez指令的

Opcode,我们需要将其改为 if-eqz指令的Opcode(38) 使用Uedit 打开DEX文件并进行修改

Page 34: 第三章  Android 恶意代码静态分析

3 使用 IDA Pro 分析 Android 恶意代码文件修复与签名使用 DexFixer 对 Dex文件进行修复 将修复后的 Dex文件重新放回

crackme02.APK文件中,然后删除 APK中的 META-INF文件夹

重新进行签名

Page 35: 第三章  Android 恶意代码静态分析

4 阅读反编译的 Java 代码 由于 Android 程序是采用 Java 语言开发的,因此传统意义上的 Java 反汇编工具依然能够用上。 ( 1 ) 使用 dex2jar 生成 jar 文件 ( 2 ) 使用 jd-gui 查看 jar 文件的源码

Page 36: 第三章  Android 恶意代码静态分析

4 阅读反编译的 Java 代码 ( 1 )使用 dex2jar 生成 jar 文件 Dex2jar 的官网 http://code.google.com/p/dex2jar,并将戒烟后的文件夹添加到 PATH 变量中 使用方法 d2j-dex2jar XXX.apk

Page 37: 第三章  Android 恶意代码静态分析

4 阅读反编译的 Java 代码 ( 2 ) 使用 jd-gui 查看 jar 文件的源码 jd-gui 是一款用 C++ 开发的 Java 反编译工具,该工具可以直接以源码的形式显示 jar 文件中的内容例子: crackme02

Page 38: 第三章  Android 恶意代码静态分析

5 DroidKongFu 病毒分析 DroidKongFu 是 Android平台上一款十分活跃的病毒。早在 2011 年,这款病毒就出现了。 DroidKongFu 病毒的主体是一个 Android 原生程序,通常它被捆绑到正常的 Android软件中,用户只要安装遭到捆绑的软件就会感染该病毒。 本章分析的病毒捆绑在一款名为“ Cut The Rope

Unlock”的游戏解锁软件中。

Page 39: 第三章  Android 恶意代码静态分析

5 DroidKongFu 病毒分析当用户安装游戏软件并运行后,软件中被植入的 Java代码就会执行 Native 层的病毒主体,病毒主体进而感染手机系统、篡改系统文件,连接远程的 C&C ( Command &

Control),服务器并接受控制指令。

Page 40: 第三章  Android 恶意代码静态分析

DroidKongFu变种病毒执行流程图

Page 41: 第三章  Android 恶意代码静态分析
Page 42: 第三章  Android 恶意代码静态分析
Page 43: 第三章  Android 恶意代码静态分析

5 DroidKongFu 病毒分析 Java 层启动代码分析 首先反编译样本 virus.apk apktool d virus.apk dex2jar virus.apk 查看 virus目录下的AndroidManifest.xml文件,能得到什么信息? 使用 jd-gui工具打开 jar文件,定位到MainActivity 的

OnCreate()方法,分析这个函数做了哪三件事情?并找到相应的代码?

Page 44: 第三章  Android 恶意代码静态分析

病毒在 MainActivity 初始化时,做了一下三件事 ( 1 )启动广告接收线程 ( 2 )启动全局定时器 ( 3 )启动恶意服务