本篇文章是Android逆向系列的第八篇,围绕IDA动态调试展开。本文分为五个部分,IDA下载和安卓、IDA使用、IDA动态调试准备工作、debugger调试和普通调试,其中涉及到各种工具、命令用于IDA调试前的准备,如adb、ddms等,重中之重就是启动调试的顺序步骤。
一、IDA下载及安装
官网:IDA Pro – Hex Rays (hex-rays.com)
其余版本在百度上找
二、IDA使用
1、如何加载文件
加载一个.so
文件,提供了两种解析方法:
.so
文件格式解析Binary file
二进制文件格式解析
默认选第一种(这里的so文件是在apk中lib目录下随意找的)
2、界面介绍
3、快捷键介绍
F2 下断点
F4 运行到当前光标处(可应用在跳出 循坏)
F5 转为C语言
F7 单步步入(进函数)
F9 运行到断点处
Alt+T 搜索文本
Alt+B 搜索16进制
ESC 返回上一个操作地址
Space 切换文本视图与图表视图
d 函数识别为数据
c 数据转代码,无end结尾(无法识别堆栈是否已经平衡,所以无法识别函数结束)
p 转函数,有end结尾
u 将函数中的所有代码识别为数据
三、IDA动态调试准备工作
这部分是连接手机并IDA动态调试软件前的准备工作,包括上传一些调试文件等。
1、检查手机是否连接上
adb devices
如果没有出现设备信息,在手机设置中-开发者选项-开启usb调试和OEM解锁
2、拷贝android_server
1)找到android_server的位置
2)将该程序移动到手机上
移动到data/local/tmp
目录上
adb push C:\Users\xxx\Desktop\android_server data/local/tmp
3、赋予可执行权限
1)使用adb命令进入手机内部
adb shell
su
cd data/local/tmp
ls
成功将android_server
文件拷贝到目录上
2)赋予程序权限
在abd shell中输入以下命令赋予该程序权限
chmod 777 android_ server
3)更改android_server名
由于安卓机制会检查出android_server,限制调试,将android_server改为anserver
mv android_server anserver
4、运行服务程序
./anserver
./anserver -p1234 指定端口
5、配置端口转发
adb forward tcp:23946 tcp:23946
6、安装软件
新开启一个cmd命令框
adb install C:\Users\xxx\Desktop\javandk1.apk
在手机上可以看到该软件已安装
四、debugger调试
用于后续脱壳
1、IDA选择Android调试器类型
2、选择主机名以及找到包名
在后面的手机进程列表搜NDK,需要软件先运行起来(挂起)
3、成功进入IDA调试界面
4、设置debugger option选项
即可开始调试,不过一般都会使用下面的普通调试
五、普通调试
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查看到,在类前面加上一个斜杆表示相对路径
命令输入后,手机会出现一个Waiting For Debugger
的提示框
4、开启DDMS
新开一个CMD窗口输入ddms
开启
在设备窗口中可以看到一个红色虫子
5、打开debugger
1)选择调试的类型Android调试器
2)选择主机名以及找到包名
3)成功进入IDA调试界面
4)配置项
选择Debugger
栏中的Debugger options
项,如下
6、点击执行(F9)
按左上角的绿色三角形
7、IDA加载.so文件
1)查看ddms中的端口号
2)执行命令
jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8600
8、IDA中查看
执行了jdb命令后,一开始只有调用odex文件。这时需要在IDA中左上角再按下执行按钮,使得.so
文件加载成功,查找该so文件双击进去
9、在.so文件中搜索JNI_OnLine分析
搜索JNI_OnLine,在开始处F2下断点
拓展:
IDA下断点的原理:通过异常
10、程序运行
F9执行到断点处
F7单步步入,单步调试分析
六、动态调试分析so文件
这部分需要能够读懂常见的简单的ARM汇编指令,下一篇文章中会先介绍到ARM汇编指令,再接着动态调试分析so文件,所以这部分内容就安排在了ARM汇编指令介绍之后。
- 本文作者: xigua
- 本文来源: 奇安信攻防社区
- 原文链接: https://forum.butian.net/share/706
- 版权声明: 除特别声明外,本文各项权利归原文作者和发表平台所有。转载请注明出处!