ARM学习之 动态调试ida

2020-04-24

  • 学习如何进行动态调试

  • 本文以截图和说明建议为主,后期如有新的想法再丰富
  1. 准备一部已经root过的手机,然后还要准备ida
  2. 第一步先将android_server push到手机的/data/local/tmp/目录下
    1. android_server 存放在 ida目录下的dbgsrv
    2. 命令为 adb push android_server /data/local/tmp
    3. 给android_server 修改权限 chmod 777 android_server
  3. 运行 ./android_server -pXXXX 
    1. android_server 默认端口为23946
    2. 如果没有-pXXXX则使用默认端口
    3. XXXX为要监听的端口号
    4. -pXXXX中间没有空格
  4. 端口转发 
    1. adb forward tcp:XXXX tcp:XXXX
    2. XXXX就是第三步设置的端口号,,
    3. 如果第三步默认,则此处转发端口号为23946
  5. 挂起应用
    1. adb shell am start -D -n package/ActivityName
    2. 如何查看包名和ActivityName
      1. 使用jadx-gui,将apk拖入到该软件中,查看"资源文件->AndroidManifest.xml"文件。如图
      2. adb shell am start -D -n com.example.javandk1/.MainActivity
    3. 挂起成功之后,手机界面显示如下图
  6. ida Attach
    1. 打开IDA 32位版本
    2. 选择 Debugger->Attach->Remote ARMLinux/Android debugger如图
    3. 在打开的界面设置HostName和Port,HostName=127.0.0.1 Port=上部转发的XXXX,如图
    4. 在打开的界面中选中需要注入的进程,可以通过ctrl+f搜索名称,找到后双击进入
    5. 进入ida主界面,然后选择三项,方法是依次选择Debugger->Debugger options
    6. 在打开的Debugger setup界面设置三项。其中
      1. 含义如下
        1. Suspend on process enter point  进程入口点挂起
        2. Suspend on thread start/exit  线程启动/退出时挂起
        3. Suspend on library load/unload 库加载/卸载时挂起
    7. 点击左上角的绿色三角或者F9运行命令
    8. 打开ddms查看apk运行的端口,此时端口为8644
      1. 运行jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8604
      2. 运行成功如下图
    9. 此时IDA已经断下,截图:
      1. 此时ida成功断下,
      2. 在右边modules中搜索javankd1.so。so名称在包体的lib目录下,
      3. ​​找到so后双击so文件,在打开的Module: libjavankd1.so中搜索需要打断点的函数,本文以JNI_OnLoad为例,如图:
      4. 下好断点之后F9运行,在没有反调试的情况下,,就会正确的停在断点处。
    10.  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值