利用IDA6.6进行apk dex代码动态调试
网上公开IDA6.6已经有一段时间,这个版本有个好处就是可以动态调试java代码。正好现在需要动态调试,所以顺便练习一下。
根据android的官方文档,如果要调试一个apk里面的dex代码,必须满足以下两个条件中的任何一个:
1.apk中的AndroidManifest.xml文件中的Application标签包含属性android:debuggable=”true”
2./default.prop中ro.debuggable的值为1
由于一般软件发布时都会把android:debuggable设置为false,所以要达成条件1需要反编译原apk,修改AndroidManifest.xml并进行重新打包,这样不仅麻烦,而且很多软件进行了加固,要破解很难。所以想办法满足第2个条件是个一劳永逸的办法。
由于default.prop是保存在boot.img的ramdisk中,这部分每次重新启动都会重新从rom中加载,所以要到目的必须修改boot.img中的ramdisk并重新刷到设备中。修改步骤如下:
1.从Google官方网站下载到boot.img2.使用工具(abootimg,gunzip, cpio)把boot.img完全解开,获取到default.prop3.修改default.prop4.把修改后的文件重新打包成boot_new.img5.使用fastboot工具把boot_new.img刷入设备(fastboot flash boot boot_new.img)
具体可参考:http://www.cnblogs.com/goodhacker/p/4106139.html
由于我们这篇文章的重点是如何动态调试dex代码,所以我们就假设该dex是可调试的。
1.用ida打开apk文件,选择dex文件进行加载 2.设置debugger选项,Debugger->Debugger options->Set specific options,按如图1所示进行设置(adb路径也要设置),然后一路确定返回 3.找到要下断点的位置,光标移到要下断点的那一行,按f2下断点 4.手机开启调试选项,连接到电脑,运行apk 5.选中IDA pro窗口,按f9运行,如果出现如图2的画面,就说明设置成功,可以进行动态调试了。
图1 调试设置
图2 调试界面
如何查看寄存器的值呢?选中ida->debugger->use source level debugger,然后点击ida->debugger->debugger windows->locals打开本地变量窗口,就可以查看寄存器的值了。
如果变量的值出现“Bad type”的情况,如下图所示:
可以按下述步骤解决:
点击“Debugger->Debugger windows->Watch view”,会弹出“Watch view”窗口:
然后在Watch view窗口中右击,选择“Add watch”:
然后在弹出的窗口中自己为变量添加一个类型,类似这样:
(Object*)v0 (String)v0 (char*)v0 (int)v0
假设我们要设置v0寄存器值的类型为String类型,就在在弹出的对话框中输入(String)v0,点击“OK”就可以在Watch view窗口中看到变量值了。
注意:如果运行过程中一直显示如图3所示窗口,就需要关注一下你的手机屏幕,看是否是需要与用户进行交互了。
图3
参考文章:http://www.joenchen.com/archives/1196
利用IDA6.6进行apk dex代码动态调试相关推荐
- Android(五)——dex文件动态调试
代码动态调试: 代码动态调试技术,一般是通过观察程序在运行过程中的状态,如寄存器内容,函数执行结果,内存使用情况等等,分析函数功能,明确代码逻辑,查找可能存在的漏洞 工具:IDA 条件:Android ...
- DDMS+AndroidStudio实现动态调试
所需工具 AndroidStudio(用于调试smali代码) monitor.exe(DDMS工具连接手机后可查看进程端口,与AndroidStudio一起使用实现动态调试) AndroidKill ...
- 安卓逆向_13 --- AndroidStudio + Smalidea 动态调试 smali 代码【APK可调试】、gradle 配置
教我兄弟学Android逆向04 动态调试smali代码:https://www.52pojie.cn/thread-658865-1-1.html From:Android Studio 3.6 调 ...
- 动态照片墙 python 实现_利用python生成照片墙的示例代码
这篇文章主要介绍了利用python生成照片墙的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 PIL(Python Im ...
- Android动态方式破解apk进阶篇(IDA调试so源码)
一.前言 今天我们继续来看破解apk的相关知识,在前一篇:Eclipse动态调试smali源码破解apk 我们今天主要来看如何使用IDA来调试Android中的native源码,因为现在一些app,为 ...
- Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码)
一.前言 今天我们继续来看破解apk的相关知识,在前一篇:Eclipse动态调试smali源码破解apk 我们今天主要来看如何使用IDA来调试Android中的native源码,因为现在一些app,为 ...
- Android逆向之旅---动态方式破解apk前奏篇(Eclipse动态调试smail源码)
一.前言 今天我们开始apk破解的另外一种方式:动态代码调试破解,之前说的主要采用的是静态方式,步骤也很简单,首先使用apktool来反编译apk,得到smail源码,然后分析smail代码,采用代码 ...
- 安卓逆向_12 --- jeb工具的使用 ( 动态调试 smali 代码 【 普通调试 和 debug调试 】)
From:https://www.52pojie.cn/forum.php?mod=viewthread&tid=742250 jeb 动态调试 smali 代码:https://www.bi ...
- 迷你播放器--第一阶段(7)--安全攻防第一战--对抗反编译,代码混淆和对抗动态调试
迷你播放器--第一阶段(7) 安全攻防第一战--对抗反编译,代码混淆和对抗动态调试; 本文章为CSDN作者原创,转载请保留出处:http://blog.csdn.net/lrs0304/article ...
最新文章
- 稍等片刻 正在提取文件_三亚种子罐市场价,中药提取浓缩设备的价格
- 常用的下载文献的地方
- 【机器学习】一文全览机器学习建模流程(Python代码)
- C++counting sort计数排序的实现算法(附完整源码)
- Qt Quick 中 QML 与 C++ 混合编程详解
- 一生只有43年,喜欢泡妹打架,却凭借一篇文章震惊世界,跻身一流数学家
- PL/SQL 编程(二)
- Java StackTraceElement getClassName()方法与示例
- 国内首家,每周到岗上班3天,携程率先推出“3+2”混合办公模式
- jQuery 属性操作 - toggleClass() 方法
- Flink CDC 实时同步mysql
- Spring Boot细节挖掘(Redis的集成)
- IIS7 部署MVC 运行不了 注意事项
- 运筹学实验报告c语言,运筹学教案-实验.doc
- 魏武帝 太祖知不可匡正,遂不复献言
- mw150um 驱动程序win10_Intel网卡驱动Win10专版 64位
- 手写一个博客平台 ~ 第六天
- Linux修改fstab引起系统无法启动问题的解决方法
- 【算法图解】第七章:7.5(狄克斯特拉算法优化版)
- 把代码字体加大的办法
热门文章
- 指定某行复制多次的方法
- mysql+主从复制重做_XtraBackup实现MySQL不停机重做主从复制
- godaddy 管理mysql_在godaddy上使用MySQL和Entity Framework的安全例...
- 天翼云从业认证课后习题(第四章云场景化解决方案综合应用)
- 笔记-信息化与系统集成技术-区块链的技术架构
- Hexo+腾讯CVM+又拍云+github+gitee+coding
- Winform中在使用VS+svn进行协同开发时添加引用时的相对路径和绝对路径的问题
- SqlServer2014怎样还原数据库
- flutter项目迁移空安全
- 调用c++_WebAssembly: 在C代码中调用JS的函数