Android逆向系列之静态分析(零)–入门篇

111111111

一、什么是静态分析

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

静态分析Android程序分以下几种:

Java层:

(1)阅读反汇编生成的Dalvik字节码助记符,即分析smali文件(无损)

(2)阅读反汇编生成的Java源码(有损)

Native层:

(3)阅读反汇编生成的SO文件ARM汇编代码 (无损)

(4)阅读反汇编生成的so文件的c/c++源码 (有损)

二、定位关键代码

AndroidManifest.xml文件

该文件记录着软件的一些基本信息,包括软件的包名、运行的系统版、用到的组件等等

信息反馈法

指先运行目标程序,然后根据程序运行时给出的反馈信息作为突破口寻找关键代码
一般情况下,字符串会存储在String.xml文件或者硬编码到程序代码中,可用ID形式访问或直接搜索字符串

(A)IDA下搜索特定字符串方法:

Ctrl+s 打开段选择对话框->双击String段跳转到字符串段->search-text(ALT+T)

(B)APKIDE下搜索特定字符串方法:

直接在右边窗口输入字符串进行搜寻,同时右键可对其进行编码或转换进制

特征函数法

所谓特征函数法,意思就是我们根据程序的执行行为来判断程序可能调用了哪些函数。这一方法需要我们对于 Android 中的 API 比较熟悉。一般来说,我们可能会关注以下方面

  • 控件的事件函数
    onclick
    show
    Toast
  • 网络函数
    HttpGet
    HttpPost
    HttpUriRequest
    socket
  • 发送短信
  • 打电话
  • 定位
  • And So on

顺序查看法

从OnCreate()函数切入,如果没有混淆可从main()函数切入,弄清程序的流程,IDA提供强大的帮助界面

log信息法

所谓 log 信息就是 Android 程序在运行时输出的字符串信息,这部分信息不会在我们的界面上体现,因而我们需要使用其它辅助工具来分析,比如说,我们可以使用 ddms 来辅助分析。对于 log 信息来说,我们可以从两个方面考虑

  • 利用程序本身产生的 log 信息
  • 自己对代码反编译,插入 log 信息,并重打包来进行分析。

栈跟踪法

我们可以用 ddms 提供的方法调用链的信息来判断程序目前的调用关系如何。

钩子(Hook)法

  • xposed
  • cydia

monitor方法

  • 运行 log,程序运行产生的,系统运行产生的
  • 线程跟踪
  • 方法调用链

三、Java层静态分析

ApkIDE反汇编classes.dex

直接将整个APK拖进ApkIDE即可查看生成的目录树结构,如下图:

静态apkide

至于对smali代码的分析,请参考我的上一篇文章 《Android逆向系列之smali语法》

点击工具栏的jd-gui图标,可打开Java源码:
js-gui

四、Native层静态分析

什么是so文件

反编译c/c++程序的难度比较大,所以现在很多安卓应用程序的核心部分都使用NDK进行开发,使用NDK开发能够编译c/c++程序,最终生成so文件。而so文件是一个二进制文件。

so文件详细介绍:点我

逆向so文件

直接将其拖进IDA,即可反汇编生成ARM指令,如下图:
ida
对于ARM指令的阅读,可参考ARM指令集

如果IDA安装了Hex-Rays插件则可按F5反编译成C/C++代码,更加方便阅读,但是由于技术存在一定缺陷,部分反汇编结果并不是十分准备,仍旧需要结合ARM代码进行分析。
check

参考

IDA使用,参考书籍《IDA Pro权威指南》

查看IDA简易教程

本文属学习笔记原创,转载请注明出处tasfa.cn,如有问题,请联系管理员root@tasfa.cn

发表评论

电子邮件地址不会被公开。

You must enable javascript to see captcha here!