问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
移动安全之Android逆向系列:IDA动态调试(一)
移动安全
本篇文章是Android逆向系列的第八篇,围绕IDA动态调试展开。本文分为五个部分,IDA下载和安卓、IDA使用、IDA动态调试准备工作、debugger调试和普通调试,其中涉及到各种工具、命令用于IDA调试前的准备,如adb、ddms等,重中之重就是启动调试的顺序步骤。
一、IDA下载及安装 ---------- 官网:[IDA Pro – Hex Rays (hex-rays.com)](https://hex-rays.com/ida-pro/) 其余版本在百度上找 二、IDA使用 ------- ### 1、如何加载文件 加载一个`.so`文件,提供了两种解析方法: 1. `.so`文件格式解析 2. `Binary file`二进制文件格式解析 默认选第一种(这里的so文件是在apk中lib目录下随意找的)  ### 2、界面介绍 参考:[IDA的初始使用说明和界面简介](https://www.idapro.net.cn/faq/ida-arrm.html) ### 3、快捷键介绍 参考:[逆向so文件调试工具ida基础知识点](https://cloud.tencent.com/developer/article/1706122) ```php F2 下断点 F4 运行到当前光标处(可应用在跳出 循坏) F5 转为C语言 F7 单步步入(进函数) F9 运行到断点处 Alt+T 搜索文本 Alt+B 搜索16进制 ESC 返回上一个操作地址 Space 切换文本视图与图表视图 d 函数识别为数据 c 数据转代码,无end结尾(无法识别堆栈是否已经平衡,所以无法识别函数结束) p 转函数,有end结尾 u 将函数中的所有代码识别为数据 ``` 三、IDA动态调试准备工作 ------------- > 这部分是连接手机并IDA动态调试软件前的准备工作,包括上传一些调试文件等。 ### 1、检查手机是否连接上 ```php adb devices ```  如果没有出现设备信息,在手机设置中-开发者选项-开启usb调试和OEM解锁 ### 2、拷贝android\_server #### 1)找到android\_server的位置  #### 2)将该程序移动到手机上 移动到`data/local/tmp`目录上 ```php adb push C:\Users\xxx\Desktop\android_server data/local/tmp ```  ### 3、赋予可执行权限 #### 1)使用adb命令进入手机内部 ```php adb shell su cd data/local/tmp ls ```  成功将`android_server`文件拷贝到目录上 #### 2)赋予程序权限 在abd shell中输入以下命令赋予该程序权限 ```php chmod 777 android_ server ```  #### 3)更改android\_server名 由于安卓机制会检查出android\_server,限制调试,将android\_server改为anserver ```php mv android_server anserver ```  ### 4、运行服务程序 ```php ./anserver ./anserver -p1234 指定端口 ```  ### 5、配置端口转发 ```php adb forward tcp:23946 tcp:23946 ```  ### 6、安装软件 新开启一个cmd命令框 ```php adb install C:\Users\xxx\Desktop\javandk1.apk ```  在手机上可以看到该软件已安装 四、debugger调试 ------------ > 用于后续脱壳 ### 1、IDA选择Android调试器类型  ### 2、选择主机名以及找到包名 在后面的手机进程列表搜NDK,需要软件先运行起来(挂起)  ### 3、成功进入IDA调试界面  ### 4、设置debugger option选项  即可开始调试,不过一般都会使用下面的普通调试 五、普通调试 ------ ### 1、adb命令进入内部启动android\_server程序 ```php su cd data/local/tmp ./anserver ./anserver -p1234 指定开启端口 ``` ### 2、配置端口转发 ```php adb forward tcp:23946 tcp:23946 ``` 这两步骤和前面的相同,就不上图了 ### 3、挂起程序 ```php 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)执行命令 ```php 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汇编指令介绍之后。
发表于 2021-09-30 11:56:11
阅读 ( 7425 )
分类:
渗透测试
0 推荐
收藏
0 条评论
请先
登录
后评论
xigua
26 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!