Android IDA 动态调试最完善攻略,跨过各种坑

 

From:https://www.pianshen.com/article/3409449384/

IDA 静态分析动态分析:https://zhuanlan.zhihu.com/p/38983223

新手向总结:IDA 动态调试 So 的一些坑:https://zhuanlan.zhihu.com/p/145383282

Android 逆向之旅 --- 动态方式破解 apk 进阶篇 ( IDA 调试 so 源码 ):https://zhuanlan.zhihu.com/p/23321571

IDA 动态调试 逆向 so 库:https://zhuanlan.zhihu.com/p/40174083

Android 未root 环境下使用 IDA 调试https://www.pianshen.com/article/6759779793/

 

IDA 动态调试 android 的 so 文件 (二):https://www.pianshen.com/article/29271382106/

 

********************* 前提条件 运行环境 一定要写清楚,不然会有很多坑,坑死人。 *********************

雷电、蓝叠的 cpu 是 x86 的,ida不能正常调试,需要用 Android 编译器自带的创建模拟器。
ida模拟器动态调试,当执行到断点时会出现错误,通过百度知道是因为雷电、蓝叠模拟器的cpu都是x86的架构,所以用来调试就会出错,通过观看视频发现教程中用的是Android自带的模拟器,所以这里也是创建一个模拟器。
用 Android studio 创建模拟器会出现下面的选项,选择 Other Images 选项,这时显示出 armeabi-v7a,选择这个创建模拟器,就是 arm 的模拟器不是 x86,能正常调试。

 

动态启动调试IDA 调试 Android 方法及简单的脱壳实现https://www.pianshen.com/article/12891271497/

Android Killer 反编译 x.apk,取出 classes.dex Dalvik文件,记录包名和启动类名。

修改 AndroidManifest.xml 文件,在 <application> 标签里添加属性 android:debuggable="true"  这一步越早修改越好,防止忘记改。可以查看一下AndroidManifest.xml 他们的对应关系,加深理解。

用 AndroidKiller 重新编译修改过的 x_fix.apk。
adb install x_fix.apk  安装到手机
将 IDA 安装目录 dbgsrv 目录下的 android_server 文件拷入手机
adb push dbgsrv\android_server /data/data/android_server
接着执行
        adb shell chmod 655 /data/data/android_server 添加可执行权限
        adb shell /data/data/android_server           将其运行起来

 

步骤:

(1) IDA 是 7.0 版本 

(2) JDB 使用 Java 安装目录下的

(3) 系统是 win10, 使用命令窗口时有很大的差别

 

(4) 手机是4.4 以下系统    

1.手机要有 Root 权限

2.复制 IDA 安装目录下 dbgsrv 文件里面的 android_server 文件到手机内存储的  /data/local/tmp 目录下

adb push dbgsrv\android_server /data/data/android_server

3.控制台输入 adb shell su 命令获取管理员权限

4.cd /data/local/tmp 进入android_server目录 ,输入chmod 777 android_server 命令获取执行权限

5.  ./android_server 启动 android_server

6. 新开一个命令窗口    不用获取管理员权限,直接输入 adb forward tcp:23946 tcp:23946   命令 端口转发

7.adb shell am start -D -n  包名/activity路径   启动应用

adb shell am start -D -n com.cmxxzwy.mz/com.e4a.runtime.android.mainActivity

8.打开 IDA 

9. 菜单 debugger->attach->Remote ARM Linux/android debugger

10.debug options 一定要选

11. hostname 处输入127.0.0.1

12. 点击 ok 后,在弹出的进程选择框 选择要调试的 com.cmxxzwy.mz 进程

13. 手机上的 App 开始运行后,一定要点击 IDA 的开始运行按钮。如果有反调试的话,一定要先下断点,不然一运行就崩溃了,一切重新来过。

14. 打开 DDMS,下一步要用

15. 查看  要调试的进程,发现 8700 端口被占用。可以使用 8677 端口

 jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700要改为

 jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8677

用 jdb 将 app 恢复执行。

最后在命令行中输入:
jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700
这一步的作用是使程序恢复运行。(注意这时候如果ida里还没有点击运行,程序是不会真的继续运行的)
这时候就可以正常地在IDA里下断调试了。

 

为了使用 jdb 恢复程序的运行,我们需要:

  • APK 的 AndroidManifest.xml 中 debuggable 为 true
  • 或是 根目录下ro.debuggable的值为1,如下图所示:

参考:IDA调试 :https://www.pianshen.com/article/1916803437/

C:\>adb devices
List of devices attached
040ACGD7SAE2    deviceC:\>adb shell
shell@mx2:/ $ su
root@mx2:/ # exit
shell@mx2:/ $ exitC:\>adb shell su
root@mx2:/ # cat default.prop | grep debug
cat default.prop | grep debug
ro.debuggable=0
root@mx2:/ # getprop ro.debuggable
getprop ro.debuggable
0
root@mx2:/ #

 

16. 好了可以开始调试了 F7进入函数,F8单步调试,F9跳到下一个断点,F2下断点,G调到函数地址

 

17. 以某数字加固为例 给 libc.so 的 fopen 函数起始位置下断点。

然后一路F9, 直到出现

然后开始F8,一直F8执行,知道出现如下提示框

才真正进入我们要调试的 so库

 

18. 动态调试的时候面对的都是 Arm 汇编,理解能力要跟的上调试速度,这有点难。怎么办?

那就是动静态结合调试。我们来看动态调试窗口

1 为这句代码的动态内存地址。 2 为该so文件的动态内存基地址。  3 为内存段的大小。

静态调试窗口显示的都是代码的相对偏移地址,所以我们用  1动态内存地址  - 2内存基地址 = 静态相对偏移地址

所以 F24B4 就是静态代码的偏移地址。所以我们打开静态调试窗口就可以看到

这样,动态和静态的代码就对上了,用静态的代码来记录动态调试的位置信息,就不怕调试过程中断带来的麻烦。而且使用F5来辅助理解代码也是棒棒哒

 

19. 动态调试过程往往反反复复,命令有时候懒得重新输入。快捷键 ctrl +c 结束当前命令程序,按上下键输入之前输过的命令。

20. 有时候,跳转到指定地址的时候全是 DCB 数据,这怎么办

这个时候可以按 C 键识别为代码,或者按 P 键识别为函数

 

21.我们动态调试经常就是为了看内存,那么怎么看内存。很简单,执行下图前三步,就能在4步的视图中查看内存

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/495267.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一场科技盛宴,一次“盈”满天下 安创成长营五期Demo Day完美收官

2018年6月21日&#xff0c;安创成长营第五期Demo Day在北京金隅喜来登拉开帷幕&#xff0c;16家安创成长营五期成员代表齐齐亮相&#xff0c;为资本圈带来了一场集科技、创新、前瞻于一体的项目展示。数百数位业内有影响力的Arm生态系统的合作伙伴、知名品牌厂商创新事业部负责…

安卓逆向_25 --- 密码学 之 《Java加密与解密的艺术》

《Java加密与解密的艺术》中文 PDF版 &#xff1a;https://www.jb51.net/books/65048.html 1. 密码学应用 &#xff1a;https://www.bilibili.com/video/BV1oA411J7Lb?p1 密码学应用 密码学的基本概念&#xff0c;对称密码&#xff0c;公钥密码&#xff0c;Hash算法&#xff…

深度丨一文读懂智能制造的主线——智能生产(工厂/车间数字化)

来源&#xff1a; 亿欧摘要&#xff1a; 发展智能制造对于中国制造业乃至中国经济的重要性不言而喻&#xff0c;先进制造业作为深耕制造业领域的专业媒体&#xff0c;长期关注智能制造发展&#xff0c;助力中国制造转型升级&#xff0c;努力做“中国制造2025”的推动者。近年来…

最好用的十六进制编辑器 010 Editor

最好用的十六进制编辑器010 Editor https://blog.csdn.net/qq_38482805/article/details/89309120 新版010Edit注册机&去除网络验证&#xff1a;https://bbs.pediy.com/thread-249724.htm 010Editor脚本语法入门&#xff1a;https://www.jianshu.com/p/ba60ebd8f916 宇宙…

Object to XML

摘要&#xff1a;本节主要介绍如何把Object对象转换为XML 引言&#xff1a;最近工作中因为工作需要&#xff0c;需要把两个系统之间的传递的报文修改一下&#xff08;现在系统之间一般都是通过发送xml字符串传数据吧&#xff09;&#xff0c;最开始用的Jdom来实现的&#xff0c…

Science:发现重写创伤记忆的神经元

来源&#xff1a;生物谷摘要&#xff1a;对创伤经历的回忆会导致精神健康问题&#xff0c;如创伤后应激障碍&#xff08;PTSD&#xff09;&#xff0c;这会破坏一个人的生活。对创伤经历的回忆会导致精神健康问题&#xff0c;如创伤后应激障碍&#xff08;PTSD&#xff09;&…

安卓逆向_23 --- Hook 框架 Cydia Substrate( Hook Java层 和 so层)

From&#xff1a;Android Hook 框架 Cydia_substrate 详解&#xff1a;https://www.cnblogs.com/lkislam/p/4859957.html 通过 cydia substrate 对 framework API进行注入&#xff1a;https://www.jianshu.com/p/cc49b30c5b5b Android 逆向之旅 --- Native层的Hook神器Cydia …

高校人工智能热的“冷”思考

来源&#xff1a;中国科学报高校在开设相关专业时&#xff0c;应该组织教授委员会、学术委员会&#xff0c;结合国家的人才政策、产业发展对人才的需求、国内外其他高校同类专业人才培养的情况&#xff0c;就本校开设这方面的专业有无现实条件&#xff0c;怎样进行师资建设、课…

转载:实用 FRIDA 进阶 --- objection :内存漫游、hook anywhere、抓包

转载&#xff1a;实用FRIDA进阶&#xff1a;内存漫游、hook anywhere、抓包&#xff1a;https://www.anquanke.com/post/id/197657 Frida Hook Android 常用方法&#xff1a;https://blog.csdn.net/zhy025907/article/details/89512096 实用FRIDA进阶&#xff1a;脱壳、自动化…

谷歌李飞飞:我们依旧站在人工智能研究的起点

来源&#xff1a;机器人大讲堂摘要&#xff1a;8 年来&#xff0c;在 ImageNet 数据集的训练下&#xff0c;人工智能对于图像识别的准确度整整提高了 10 倍&#xff0c;甚至超越了人类视觉本身。但李飞飞认为&#xff0c;我们对于人工智能的研究仍在起点上。说起人工智能&#…

Android Intent 用法总结

From&#xff1a;https://www.jianshu.com/p/67d99a82509b Android 中提供了 Intent 机制来协助应用间的交互与通讯&#xff0c;Intent 负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述&#xff0c;Android 则根据此 Intent 的描述&#xff0c;负责找到对应的组件…

FRIDA - API使用篇:rpc、Process、Module、Memory 使用方法及示例

官方 API (JavaScript API)&#xff1a;https://frida.re/docs/javascript-api/ From&#xff1a; ( FRIDA-API使用篇 )&#xff1a;https://www.anquanke.com/post/id/195215 前言 在这篇文章中来对其官方的一些非常常用的 API 进行学习。所谓工欲善其事&#xff0c;必先利其…

Entity Framework 实体关系总结(转)

通过 Entiy Framework实践系列文章&#xff0c;理了理 Entity Framework 的实体关系。 为什么要写文章来理清这些关系&#xff1f;“血”的教训啊&#xff0c;刚开始使用 Entity Framework 的时候&#xff0c;由于没有静下心来认真理清关系&#xff0c;走了一些"痛不欲生&…

技术架构分析:攻克Dota2的OpenAI-Five

来源&#xff1a;CreateAMind摘要&#xff1a;OpenAI昨日发布研究成果&#xff0c;宣布Dota2 5v5在限定条件下&#xff08;英雄阵容固定&#xff0c;部分道具和功能禁用&#xff09;战胜人类半职业选手。本文主要对其模型技术架构做一些分析总结。一、 模型输入与输出模型的输入…

Redis基础-Redis概念及常见命令

1.nosql数据库 NoSQL数据库是一种提供了非关系型数据存储的数据库系统&#xff0c;与传统的关系型数据库&#xff08;如SQL数据库&#xff09;不同。NoSQL数据库的特点是灵活性高&#xff0c;能够处理结构化、半结构化或非结构化数据。它们通常用于大数据和实时Web应用。NoSQL数…

Java 高级特性 --- 反射

From&#xff1a;Java 高级特性 --- 反射&#xff1a;https://www.jianshu.com/p/9be58ee20dee From&#xff1a;Java 基础之 --- 反射&#xff08;非常重要&#xff09;&#xff1a;https://blog.csdn.net/sinat_38259539/article/details/71799078 From&#xff1a;Java 高级…

G20国家科技竞争力大盘点,中国科研创新表现突出,人工智能变道超车

来源&#xff1a;科睿唯安中国科学院文献情报中心和科睿唯安6月25日在北京联合发布了《G20国家科技竞争格局之辩》系列报告&#xff0c;报告分为总体篇及人工智能专题篇&#xff08;下文有重点介绍&#xff09;&#xff0c;聚焦G20国家的科研产出规模、学术影响力、领域分布、国…

Java中泛型 Class<T>、T与Class<?>、 Object类和Class类、 object.getClass() 和 Object.class

From&#xff1a;Java中泛型 Class<T>、T 与 Class<?>、 Object类 和 Class类、 object.getClass() 和 Object.class &#xff1a;https://www.cnblogs.com/zhaoyanhaoBlog/p/9362267.html Class<T>和 Class<?>类型 有什么区别&#xff1a;https://…

智能驾驶是否会“运动式”发展

来源&#xff1a;中国科学网最近&#xff0c;无人驾驶车发生撞人致死事故再度引发公众恐慌。在近日举行的全球人工智能技术大会上&#xff0c;中国工程院院士李德毅表示&#xff0c;不管是无人驾驶还是有人驾驶&#xff0c;事故总是有的。实际上人类才是第一马路杀手&#xff0…

Java学习之java高级特性

From&#xff1a;https://blog.csdn.net/w252064/article/details/79923999 [Java高级特性详解]&#xff1a;https://blog.csdn.net/qq_37977176/article/details/78941649 菜鸟教程 之 Java 教程&#xff1a;https://www.runoob.com/java/java-tutorial.html 本部分内容主要…