网上公开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.img

2.使用工具(abootimg,gunzip, cpio)把boot.img完全解开,获取到default.prop

3.修改default.prop

4.把修改后的文件重新打包成boot_new.img

5.使用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. apk逆向 - smali动态调试

    author: Dlive date: 2016/10/6 0x00 前言 ​ 之前有人问过smali的动态调试方法,其实网上已经有很多文章讲这些内容,但是为了方便大家学习,我还是写一下让大家少走点坑 ...

  3. Android APK程序的smali动态调试

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/71250622 一.Apktool的下载和安装 Apktool是Android逆向分 ...

  4. Android studio动态调试

    Reference:  http://cstsinghua.github.io/2016/06/13/Android%20studio%E5%8A%A8%E6%80%81%E8%B0%83%E8%AF ...

  5. IDA Pro使用(静态分析+动态调试)

    链接:http://skysider.com/?p=458 IDA Pro使用(静态分析+动态调试) 1.静态分析 IDA FLIRT Signature Database —— 用于识别静态编译的可 ...

  6. Android Studio 动态调试 apk 反编译出的 smali 代码

    在信安大赛的准备过程中,主要通过 Android Studio 动态调试 apk 反编译出来的 smali 代码的方式来对我们分析的执行流程进行验证.该技巧的主要流程在此记录.以下过程使用 Andro ...

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

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

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

    Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码) 来源 https://blog.csdn.net/jiangwei0910410003/article/details/51 ...

  9. Android动态方式破解apk前奏篇(Eclipse动态调试smail源码)

    一.前言 今天我们开始apk破解的另外一种方式:动态代码调试破解,之前其实已经在一篇文章中说到如何破解apk了: Android中使用静态方式破解Apk  主要采用的是静态方式,步骤也很简单,首先使用 ...

随机推荐

  1. tilestache + mbutil应用

    1. 安装pip. 我们同样需要在Python的官网上去下载,下载地址是: https://pypi.python.org/pypi/pip#downloads 2. 解压. 解压pip-9.0.1. ...

  2. 活字格Web应用平台学习笔记5 - 编辑和删除记录

    了几天,今天上活字格网站一看,他们获奖了,好厉害 荣膺盘古奖!活字格引领企业信息化建设新潮流 好吧,我继续学习,希望早点拿到认证证书. 今天要学的是编辑删除记录.目标: 还是接续之前的工程.做好后是这 ...

  3. Vue -- 项目报错整理(1):RangeError: Maximum call stack size exceeded

    这几天项目运行报了个错: Uncaught RangeError: Maximum call stack size exceeded,刚开始看到 "returnNodeParameter&q ...

  4. 检查xml文件

    #coding=utf- import os import time def verify(filePath): print("verify--" + filePath) list ...

  5. 数组、ArrayList、链表、LinkedList

    数组   数组 数组类型 不可重复 无序(线性查找) 可重复(找到第一个即可) 无序(线性查找) 不可重复 有序(二分查找) 可重复(找到第一个即可) 有序(二分查找) 插入 O(N) O(1) O( ...

  6. ReactNative仿微信朋友圈App

    摘要: 欢迎各位同学加入: React-Native群:397885169 大前端群:544587175 大神超多,热情无私帮助解决各种问题. 一.前沿||潜心修心,学无止尽.生活如此,coding亦 ...

  7. JAVA:函数的定义、使用

      本文内容: 什么是函数 函数的定义格式 函数的重载(overload): 函数的调用使用注意 关于形式参数的使用 首发时间:2017-06-23 修改时间:2018-03-21:修改了布局,修改了 ...

  8. 【转】python version 2.7 required,which was not found in the registry

    源地址:http://www.cnblogs.com/thinksasa/archive/2013/08/26/3283695.html 方法:新建一个register.py 文件,把一下代码贴进去, ...

  9. 结合 spring 使用阿里 Druid 连接池配置方法

    1.数据源 <!-- 配置数据源 --> <bean name="dataSource" class="com.alibaba.druid.pool.D ...

  10. C#中获取数组中相加和最接近或等于(<=)给定值的算法

    , ,,,,,,,,, }; List<List<int>> mylist = new List<List<int>>(); int length = ...