栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

IDA动态调试SO文件

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

IDA动态调试SO文件

IDA动态调试SO文件
  • 前言
  • 一、启动android server,以调试方式启动APK
  • 二、调试步骤
  • 三、调试技巧


前言

此篇博文仅仅记录下本人学习 IDA pro 动态调试so文件过程。

工具:IDA pro 7.5

参考博文及APK来源:

  • https://blog.csdn.net/hbhgyu/article/details/81321923
  • https://blog.csdn.net/tabactivity/article/details/78492377
一、启动android server,以调试方式启动APK
  • 进入 [安装路径]dbgsrvdbgsrv 目录,将对应android版本的 android server和 android server64发到手机 /data/local/tmp/ 目录,并设置可执行权限,运行。(建议android server 和 android server64都发送,避免某些apk只有32位或64位so包。)

    # 同理,将android server64同样设置
    adb push [安装路径]dbgsrvandroid_server /data/local/tmp/
    adb shell
    su
    chmod 777 /data/local/tmp/android_server 
    ./data/local/tmp/android_server  # 启动
    
  • 手机端设置端口转发

    adb forward tcp:23946 tcp:23946
    
  • 调试方式启动APK,启动后,手机端出现 Waiting For Debugger 弹窗。

    adb shell am start -D -n [aok包名]/[主活动]
    
  • 启动 DDMS(进入Sdk安装目录 Sdktools下,运行 monitor.bat 脚本启动),在DDMS上选择相应进程后,使用指令使apk继续运行,成功后,DDMS上进程将显示绿色,否则是红色。

    jdb -connect com.sun.jdi.SocketAttach:hostname=localhost, port=8700 # localhost可以填127.0.0.1
    

二、调试步骤
  1. 首先,IDA 加载so文件(此时,可以先查看需要设置断点的函数,位置,然后设置断点。)

  2. 选择调试器,点击:Debugger=>Select debugger(或直接按快捷键F9),选择 Remote ARM Linux/Android debugger,点击OK。(若弹出 PLEASE READ CARFULLY 窗口,点击YES)

  3. 点击:Debugger=>Debugger options,根据需要,设置如下三个选项,会在相应位置暂停,按F9可继续调试

    • 第一个:在APK程序入口处停止。
    • 第二个:有线程启动运行或者退出时,暂停。
    • 第三个:当动态库(apk中的so文件)加载或者取消加载时,暂停。

  4. 点击:Debugger=>Process options,此处设置远程主机(android手机)和调试端口号(IDA 默认为23946),点击OK。

  5. 点击:Debugger=>Process options,选择当前待调试的apk进程,点击OK。(可按 CTRL+F 或者 ALT+T搜索包名查找)

  6. 在IDA中,按 F9 开始调试,如果在调试前设置过断点和Debugger options,调试会在相应断点位置或满足选项时停止。

三、调试技巧
  1. 可以在启动调试前,使用静态分析设置相应断点。

  2. ARM中没有NOP指令,可通过以下指令替代

    MOVS R0,R0	# 十六进制为:00 00 A0 E1
    
  3. 当调试函数遇到无法设置断点弹窗,或者到一个 DCB 定义数据处无法 F9 继续时调试和返回时,可按 G 键跳转到 LR 寄存器地址处,再按F4,函数运行到当前指针位置。

  4. 使用F5快捷键将ARM指令转化为可读的C代码,同时可以使用Y键,对JNIEnv指针做一个类型转换,从而对JNI里经常使用的JNIEnv方法能够识别;同时,可以通过选项 Copy to assembly ,将C代码注释到ARM指令中,增加Patch so 的便利性,甚至可以直接看到答案显示。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yuxw6SRQ-1635260578488)(C:UsersStepTpAppDataRoamingTyporatypora-user-imagesimage-20211019211710188.png)]

  5. 32位ARM下,函数参数保存在 R0~R3寄存器中(多余的参数入栈),可以将 Hex View 和 寄存器同步,查看函数参数数据。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/351787.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号