1 / 22

第四章 Android 恶意代码动态分析

第四章 Android 恶意代码动态分析. 学习目标. 了解软件动态调试方法 掌握代码注入法和栈跟踪法 掌握使用 IDA Pro 调试 Android 原生程序的调试方法. 1 简介. 软件调试 ( 1 )源码级调试 ( 2 )汇编级调试 动态调试 Android 程序 ( 1 )动态调试 Android SDK 程序 ( 2 )动态调试 Android 原生程序. 动态调试 Android SDK 程序

shakti
Télécharger la présentation

第四章 Android 恶意代码动态分析

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第四章 Android恶意代码动态分析

  2. 学习目标 • 了解软件动态调试方法 • 掌握代码注入法和栈跟踪法 • 掌握使用IDA Pro调试Android原生程序的调试方法 2

  3. 1 简介 • 软件调试 (1)源码级调试 (2)汇编级调试 • 动态调试Android程序 (1)动态调试Android SDK程序 (2)动态调试Android 原生程序

  4. 动态调试Android SDK程序 (1)Dalvik虚拟机实现了JDWP(Java Debug Wire Protocol,Java调试有线协议),可以直接使用支持JDWP协议的调试器来调试Android程序。 (2)DDMS与Eclipse ADT插件 (3)Dalvik虚拟机中所有对调试支持的实现代码位于Android系统源码的dalvik/vm/jdwp目录下。每一个启用调试的Dalvik虚拟机实例都会启动一个JDWP线程。

  5. 动态调试Android 原生程序 原生程序使用传统的Linux程序调试方法如GNU调试服务器来连接进行调试。原生程序分为动态链接库与普通可执行程序两种。前者大多内置于Android程序中,在调试时需要先启动Android程序加载它,然后使用远程附加的方式来调试,后者可以直接使用远程运行的方式来调试它。

  6. 2 代码注入法 • 所谓的代码注入是指首先反编译Android程序,然后在反汇编出的smali文件中添加Log调用的代码,最后重新打包程序运行来查看输出结果。

  7. 例子:注册码验证模型程序,要求不修改程序,找出用户名admin的注册码例子:注册码验证模型程序,要求不修改程序,找出用户名admin的注册码 • 将修改完成的代码使用APKtool重新打包,签名并在此运该程序。输入用户名“admin”与任意的注册码,此时仍然会弹出注册码错误的提示,但Log.v()方法却“偷偷的”输出了正确的注册码。

  8. 3 栈跟踪法 • 栈跟踪法同样属于代码注入的范畴,它主要是手动想反编译后的smali文件中加入栈跟踪信息输出的代码。 • 与注入Log输出的代码不同,栈跟踪法只需要知道大概的代码注入点,而且注入代码后的反馈信息比Log注入要详细的多。

  9. 例子:运行本小节的例子stackTrace,程序运行后弹出了Toast,我们的要求是:这个Toast是何时被调用的?例子:运行本小节的例子stackTrace,程序运行后弹出了Toast,我们的要求是:这个Toast是何时被调用的? • 使用Apktool反编译,然后添加相应的代码 New Exception(“print trace”).printStackTrace(); 对应的smali代码

  10. new-instance v0, Ljava/lang/Exception; const-string v1, “print trace” invoke-direct{v0,v1}, Ljava/lang/Exception;-><init>(Ljava/lang/String;)V Invoke-virtual{v0},Ljava/lang/Exception;->printStackTrace()V

  11. 使用Apttool重新打包,签名后再次运行程序 • Adb logcat –s System.err:V*:W查看logCat输出信息

  12. 4 使用IDA Pro调试Android原生程序 • IDA Pro从6.1版本开始,支持动态调试Android原生程序。 • 两种类型 (1)调试Android原生程序(远程调试) (2)调试Android原生动态链接库(远程附加)

  13. Android中的原生程序 • Android NDK“安卓原生开发套件”。它是一款强大的工具,可以将原生C、C++代码的强大功能和Android应用的图形界面结合在一起,解决软件的跨平台问题。 • Android NDK从R8版本开始,支持生成x86、MIPs、ARM三种架构的原生程序。

  14. 4 使用IDA Pro调试Android原生程序 • 调试Android原生程序(远程调试) • 所谓“远程调试”是指通过网络调试在另一个网络上的计算机运行的代码的过程。利用远程调试,我们可以使用Windows GUI版本的IDA作为一个前端接口,调试IDA支持的任何平台上的会话。 • 运行IDA PRO界面的计算机被称为“调试器客户端”。 • 运行被调试的应用程序的计算机被称为“调试器服务器 ”。

  15. 4 使用IDA Pro调试Android原生程序 • 远程调试主要用于下面一些特殊应用: • 用于调试病毒/木马/恶意软件:通过这种方法,调试器客户端可以与可能受到这些软件攻击的计算机隔离。 • 调试那些在一台计算机上运行遇到问题,而且没有被拷贝安装在其他计算机上的应用程序。 • 调式分布式应用程序 • 它始终在你的主工作站上运行,因此你无需将IDA配置、文件和不同的调试相关资源拷贝到其它机器上。

  16. 4 使用IDA Pro调试Android原生程序 • 远程调试步骤 • 1.在IDA 6.1的目录下有一个android_server,是用来在远程端(目标机器)上运行的小程序。把ida 目录下android_server 传到android 目录中,  并设置适当权。如:C:\ adb push  android_server /data/local/tmp/C:\ adb shell chmod 755 /data/local/tmp/android_server

  17. 4 使用IDA Pro调试Android原生程序 • 远程调试步骤 • 2.把使用的例子debugnativeapp复制到Android设备中,如/data/local/tmp目录中,并加上可执行权限

  18. 4 使用IDA Pro调试Android原生程序 • 远程调试步骤 • 3.启动Android调试服务器 C:\ adb shell  /data/local/tmp/android_server 启动成功后提示信息: IDA Android 32-bit remote debug server(ST) v1.14. Hex-Rays (c) 2004-2011 Listening on port #23946...

  19. 4 使用IDA Pro调试Android原生程序 • 远程调试步骤 • 4.打开另一个命令提示符执行以下命令 C:\ adb forward tcp:23946 tcp:23946

  20. 4 使用IDA Pro调试Android原生程序 • 远程调试步骤 • 5.启动IDA Pro主程序,点击菜单项“Debugger->Run->Remote ArmLinux/Android debugger”,打开调试程序设置对话框

More Related