吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6771|回复: 20
收起左侧

[Android 原创] 那些年用ida动态调试so所踩坑坑

[复制链接]
nisodaisuki 发表于 2020-5-20 13:43
本帖最后由 nisodaisuki 于 2020-5-20 17:47 编辑

[TOC]

虽然Java层代码包含了许多有用的信息,但是一般稍微注重安全的应用都会把核心代码放到Native层,所以对Native层的调试就显得尤为重要了。

动态调试步骤

使用工具:

am + pm +IDA, 其中am和pm为安卓系统自带

复制android_server到设备中,并执行。

android_server的目录为:IDA目录>dbgsrv>android_server

注意:

android_server分版本的,使用对应的版本。

//复制到设备上
adb push android_server /data/local/tmp

//修改权限,使之能执行
chmod 777 /data/local/tmp/android_server

//执行
cd /data/local/tmp
./android_server

adb forward tcp:23946 tcp:23946

等待附加。

pm确定要调试apk的包名

pm(package manager)包管理工具.

列出所有的包信息:pm list packages [filter]

  • pm过滤器
    • -d:只显示禁用的应用的包名
    • -e:只显示可用的应用的包名
    • -s:只显示系统应用的包名
    • -3:只显示第三方应用的包名

am启动被调试应用

am是activity manager的缩写

am启动程序命令:am start -D -n com.example.testarm/.MainActivity

am start -D -n调试模式打开应用

com.example.testarm要调试启动的包名

.MainActivityLunch Activity

启动后等待调试器的链接。


<img src="https://gitee.com/nisodaisuki/pictures/raw/master/img/Screenshot_20200518-155216_TestArm.png" style="zoom: 25%;" />

设置IDA调试器

  • 用IDA打开想要调试的so库。

  • 选择Remote ARM Linux/Android debugger

  • 设置调试选项

开始附加程序

设置主机和端口

选择要调试的程序进行附加

弹出对话框表示全部加载完成了.

此时会显示出PC的位置

IDA 按F9,继续执行.

jdb连接

   jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8700

8700为apk运行的端口, 根据实际情况更改.

确定port的方法

触发断点

same

Yes

调试快捷键

F2下断点

F7单步步入

F8单步步过

F9执行到下个断点

可能的错误

  • 由于没有设置参数,所以经常有下面的错误提示, 忽略或者随便给个参数

  • 没有进行端口映射

    adb forward tcp:23946 tcp:23946

  • android_server未开启

  • 可附加的程序过少

    启动android_server的用户权限低.用root用户运行android_server来监听.

  • ida调试版本的so和正在运行的so不一致

  • jdb连接失败

  • ida打开的so文件名要和运行apk中的so名一致. 如果不一致会导致断点无效.

免费评分

参与人数 2威望 +1 吾爱币 +21 热心值 +2 收起 理由
qzhing + 1 + 1 表哥6666666
qtfreet00 + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

金罡 发表于 2020-5-21 17:30
1.如果我们下断点的位置非常早,可以启动JDWP调试器的目的提前在原生层下断点:am start -D -n com.example.testarm/.MainActivity,否则直接IDA附加就可以了。
2.要知道安卓分为两个调试器一个是JDWP调试器用来调试虚拟机,另一个是原生调试器用来调试so代码。IDA附加后仅仅连接了原生调试器,此时JDWP还在等待中程序并未运行。
3.DDSM查看和jdb附加的目的就是为了正在等待JDWP调试器的程序恢复运行,在这里可以不借用DDMS和jdb来恢复运行,可以借助JEB附加连接JDWP调试器再分离同样可以达到目的。
cbhblb20211111 发表于 2021-11-16 13:41
nisodaisuki 发表于 2020-5-20 17:39
ida打开的文件是本地的文件, 动态调试的时候 运行的是apk中的so, ida要你确定这两个文件是一样..  如果选 ...


小木曾雪菜 发表于 2020-5-20 17:00
触发断点那里为什么会弹出来对话框呀?

ida打开的文件是本地的文件, 动态调试的时候 运行的是apk中的so, ida要你确定这两个文件是一样..  如果选择了 不再提示, 以后就没有了
如果我是DJ? 发表于 2020-5-20 13:51
不明嚼栗的根号2 发表于 2020-5-20 13:55
支持楼主分享!
酷鸟 发表于 2020-5-20 14:21
求最后图那个壁纸
 楼主| nisodaisuki 发表于 2020-5-20 15:19
酷鸟 发表于 2020-5-20 14:21
求最后图那个壁纸

https://www.jianguoyun.com/p/DfK3gBIQh-vgBxiQ0poD
小木曾雪菜 发表于 2020-5-20 17:00
触发断点那里为什么会弹出来对话框呀?
 楼主| nisodaisuki 发表于 2020-5-20 17:39
小木曾雪菜 发表于 2020-5-20 17:00
触发断点那里为什么会弹出来对话框呀?

ida打开的文件是本地的文件, 动态调试的时候 运行的是apk中的so, ida要你确定这两个文件是一样..  如果选择了 不再提示, 以后就没有了,
yuhan694 发表于 2020-5-20 19:49
ida可以用模拟器调试吗
A00 发表于 2020-5-20 21:47
期待多交流
夜步城 发表于 2020-5-21 00:00
感谢楼主的教程
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 20:22

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表