网上公开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代码动态调试相关推荐

  1. Android(五)——dex文件动态调试

    代码动态调试: 代码动态调试技术,一般是通过观察程序在运行过程中的状态,如寄存器内容,函数执行结果,内存使用情况等等,分析函数功能,明确代码逻辑,查找可能存在的漏洞 工具:IDA 条件:Android ...

  2. DDMS+AndroidStudio实现动态调试

    所需工具 AndroidStudio(用于调试smali代码) monitor.exe(DDMS工具连接手机后可查看进程端口,与AndroidStudio一起使用实现动态调试) AndroidKill ...

  3. 安卓逆向_13 --- AndroidStudio + Smalidea 动态调试 smali 代码【APK可调试】、gradle 配置

    教我兄弟学Android逆向04 动态调试smali代码:https://www.52pojie.cn/thread-658865-1-1.html From:Android Studio 3.6 调 ...

  4. 动态照片墙 python 实现_利用python生成照片墙的示例代码

    这篇文章主要介绍了利用python生成照片墙的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 PIL(Python Im ...

  5. Android动态方式破解apk进阶篇(IDA调试so源码)

    一.前言 今天我们继续来看破解apk的相关知识,在前一篇:Eclipse动态调试smali源码破解apk 我们今天主要来看如何使用IDA来调试Android中的native源码,因为现在一些app,为 ...

  6. Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码)

    一.前言 今天我们继续来看破解apk的相关知识,在前一篇:Eclipse动态调试smali源码破解apk 我们今天主要来看如何使用IDA来调试Android中的native源码,因为现在一些app,为 ...

  7. Android逆向之旅---动态方式破解apk前奏篇(Eclipse动态调试smail源码)

    一.前言 今天我们开始apk破解的另外一种方式:动态代码调试破解,之前说的主要采用的是静态方式,步骤也很简单,首先使用apktool来反编译apk,得到smail源码,然后分析smail代码,采用代码 ...

  8. 安卓逆向_12 --- jeb工具的使用 ( 动态调试 smali 代码 【 普通调试 和 debug调试 】)

    From:https://www.52pojie.cn/forum.php?mod=viewthread&tid=742250 jeb 动态调试 smali 代码:https://www.bi ...

  9. 迷你播放器--第一阶段(7)--安全攻防第一战--对抗反编译,代码混淆和对抗动态调试

    迷你播放器--第一阶段(7) 安全攻防第一战--对抗反编译,代码混淆和对抗动态调试; 本文章为CSDN作者原创,转载请保留出处:http://blog.csdn.net/lrs0304/article ...

最新文章

  1. 稍等片刻 正在提取文件_三亚种子罐市场价,中药提取浓缩设备的价格
  2. 常用的下载文献的地方
  3. 【机器学习】一文全览机器学习建模流程(Python代码)
  4. C++counting sort计数排序的实现算法(附完整源码)
  5. Qt Quick 中 QML 与 C++ 混合编程详解
  6. 一生只有43年,喜欢泡妹打架,却凭借一篇文章震惊世界,跻身一流数学家
  7. PL/SQL 编程(二)
  8. Java StackTraceElement getClassName()方法与示例
  9. 国内首家,每周到岗上班3天,携程率先推出“3+2”混合办公模式
  10. jQuery 属性操作 - toggleClass() 方法
  11. Flink CDC 实时同步mysql
  12. Spring Boot细节挖掘(Redis的集成)
  13. IIS7 部署MVC 运行不了 注意事项
  14. 运筹学实验报告c语言,运筹学教案-实验.doc
  15. 魏武帝 太祖知不可匡正,遂不复献言
  16. mw150um 驱动程序win10_Intel网卡驱动Win10专版 64位
  17. 手写一个博客平台 ~ 第六天
  18. Linux修改fstab引起系统无法启动问题的解决方法
  19. 【算法图解】第七章:7.5(狄克斯特拉算法优化版)
  20. 把代码字体加大的办法

热门文章

  1. 指定某行复制多次的方法
  2. mysql+主从复制重做_XtraBackup实现MySQL不停机重做主从复制
  3. godaddy 管理mysql_在godaddy上使用MySQL和Entity Framework的安全例...
  4. 天翼云从业认证课后习题(第四章云场景化解决方案综合应用)
  5. 笔记-信息化与系统集成技术-区块链的技术架构
  6. Hexo+腾讯CVM+又拍云+github+gitee+coding
  7. Winform中在使用VS+svn进行协同开发时添加引用时的相对路径和绝对路径的问题
  8. SqlServer2014怎样还原数据库
  9. flutter项目迁移空安全
  10. 调用c++_WebAssembly: 在C代码中调用JS的函数