移动安全之Android逆向系列:IDA动态调试(一)

本篇文章是Android逆向系列的第八篇,围绕IDA动态调试展开。本文分为五个部分,IDA下载和安卓、IDA使用、IDA动态调试准备工作、debugger调试和普通调试,其中涉及到各种工具、命令用于IDA调试前的准备,如adb、ddms等,重中之重就是启动调试的顺序步骤。

一、IDA下载及安装

官网:IDA Pro – Hex Rays (hex-rays.com)

其余版本在百度上找

二、IDA使用

1、如何加载文件

加载一个.so文件,提供了两种解析方法:

  1. .so文件格式解析
  2. Binary file二进制文件格式解析

默认选第一种(这里的so文件是在apk中lib目录下随意找的)

4AODwq.png

2、界面介绍

参考:IDA的初始使用说明和界面简介

3、快捷键介绍

参考:逆向so文件调试工具ida基础知识点

F2      下断点
F4      运行到当前光标处(可应用在跳出 循坏)
F5      转为C语言
F7      单步步入(进函数)
F9      运行到断点处

Alt+T   搜索文本
Alt+B   搜索16进制
ESC     返回上一个操作地址
Space   切换文本视图与图表视图

d       函数识别为数据
c       数据转代码,无end结尾(无法识别堆栈是否已经平衡,所以无法识别函数结束)
p       转函数,有end结尾
u       将函数中的所有代码识别为数据

三、IDA动态调试准备工作

这部分是连接手机并IDA动态调试软件前的准备工作,包括上传一些调试文件等。

1、检查手机是否连接上

adb devices

4AOBmn.png

如果没有出现设备信息,在手机设置中-开发者选项-开启usb调试和OEM解锁

2、拷贝android_server

1)找到android_server的位置

4AOL1e.png

2)将该程序移动到手机上

移动到data/local/tmp目录上

adb push C:\Users\xxx\Desktop\android_server data/local/tmp 

4AOqpD.png

3、赋予可执行权限

1)使用adb命令进入手机内部

adb shell
su
cd data/local/tmp
ls

4AOITx.png

成功将android_server文件拷贝到目录上

2)赋予程序权限

在abd shell中输入以下命令赋予该程序权限

chmod 777 android_ server

4AOTk6.png

3)更改android_server名

由于安卓机制会检查出android_server,限制调试,将android_server改为anserver

mv android_server anserver

4AO7tK.png

4、运行服务程序

./anserver

./anserver -p1234 指定端口

4AOHfO.png

5、配置端口转发

adb forward tcp:23946 tcp:23946

4AX9tf.png

6、安装软件

新开启一个cmd命令框

adb install C:\Users\xxx\Desktop\javandk1.apk

4AXpAP.png

在手机上可以看到该软件已安装

四、debugger调试

用于后续脱壳

1、IDA选择Android调试器类型

4AXDjH.png

2、选择主机名以及找到包名

在后面的手机进程列表搜NDK,需要软件先运行起来(挂起)

4AXBge.png

3、成功进入IDA调试界面

4AXsud.png

4、设置debugger option选项

4AXyDA.png

即可开始调试,不过一般都会使用下面的普通调试

五、普通调试

1、adb命令进入内部启动android_server程序

su
cd data/local/tmp
./anserver

./anserver -p1234   指定开启端口

2、配置端口转发

adb forward tcp:23946 tcp:23946

这两步骤和前面的相同,就不上图了

3、挂起程序

adb shell am start -D -n com.example.javandk1/.MainActivity

这里的包名可以通过Android Killer或Jadx查看到,在类前面加上一个斜杆表示相对路径

4AjPV1.png

命令输入后,手机会出现一个Waiting For Debugger的提示框

4、开启DDMS

新开一个CMD窗口输入ddms开启

4Aj9bR.png

在设备窗口中可以看到一个红色虫子

4Ajpr9.png

5、打开debugger

1)选择调试的类型Android调试器

4AXv2F.png

2)选择主机名以及找到包名

4AXj8U.png

3)成功进入IDA调试界面

4AjSKJ.png

4)配置项

选择Debugger栏中的Debugger options项,如下

4AjGRS.png

6、点击执行(F9)

按左上角的绿色三角形

4Avkes.png

7、IDA加载.so文件

1)查看ddms中的端口号

4AXxv4.png

2)执行命令

jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8600

8、IDA中查看

执行了jdb命令后,一开始只有调用odex文件。这时需要在IDA中左上角再按下执行按钮,使得.so文件加载成功,查找该so文件双击进去

4AjJxg.png

9、在.so文件中搜索JNI_OnLine分析

搜索JNI_OnLine,在开始处F2下断点

4AjNrj.png

拓展:

IDA下断点的原理:通过异常

10、程序运行

F9执行到断点处

4AjtMQ.png

F7单步步入,单步调试分析

六、动态调试分析so文件

这部分需要能够读懂常见的简单的ARM汇编指令,下一篇文章中会先介绍到ARM汇编指令,再接着动态调试分析so文件,所以这部分内容就安排在了ARM汇编指令介绍之后。

  • 发表于 2021-09-30 11:56:11
  • 阅读 ( 8214 )
  • 分类:渗透测试

0 条评论

请先 登录 后评论
xigua
xigua

26 篇文章

站长统计