IDA动态调试Android的DEX文件
Android程序的dex文件的动态调试确实是个大问题,网上也有一些教程但是不是特别的详细,今天用到了IDA动态调试Android的DEX文件,特此记录一下。
IDA 6.6新添加了对dex文件的调试支持,但是功能还是很弱的说,因为IDA动态调试Android程序的DEX文件时,查看变量很不方便,可以说然并卵。
@根据android的官方文档,如果要调试一个App里面的dex代码,必须满足以下两个条件中的任何一个:
1.App的AndroidManifest.xm中Application标签必选包含属性android:debuggable="true";
2./default.prop中ro.debuggable的值为1;
由于正常的软件发布时都不会把android:debuggable设置为true,所以要达成条件1,需要对app进行重新打包,这不仅每次分析一个App都重复操作,而且很多软件会对自身进行校验,重打包后执行会被检测到,所以想办法满足第2个条件是个一劳永逸的办法,我实际使用的方法就是满足第二个条件。
由于default.prop是保存在boot.img的ramdisk中,这部分每次重新启动都会重新从rom中加载,所以要到目的必须修改boot.img中的ramdisk并重新刷到设备中。
测试使用的设备为Nexus 7,修改步骤如下:
a) 从Google官方网站下载到boot.img,
b) 使用工具(abootimg,gunzip, cpio)把boot.img完全解开,获取到default.prop
c) 修改default.prop
d) 把修改后的文件重新打包成boot_new.img
e) 使用fastboot工具把boot_new.img刷入设备(fastboot flash boot boot_new.img)
图1 修改后的default.prop内容
说明:上面这段话引用自http://bbs.pediy.com/showthread.php?p=1291716大神的。
其实,对于第2个条件有一个简单的方法,在网上找个靠谱的刷机助手软件,然后下载刷机助手中提供的供开发者使用的ROM版本,刷到Android的测试手机上就可以了。博主就是这么做的,之前费了好大的劲从网上找教程,但是由于Linux系统不熟悉,尝试几次都失败了,后来就是用这个办法解决问题的。因此,博主的Nexus 4手机的/default.prop中ro.debuggable的值为1,符合Android程序的DEX文件的被动态调试的条件。
工具:
谷歌Nexus 4
IDA Pro 6.6
Eclipse
0x1,将Nexus 4手机开启开发者USB调试模式连接到电脑上。连接成功以后,打开Eclipse程序,查看Nexus 4手机的设备序号,如图:
从图中,可以得知Nexus 4手机的设备序号为03aae257437d8244,将这个设备序号记下来,后面调试Android程序的DEX文件时要用到,然后关闭Eclipse程序。
0x2,Cmd命令行情况下,安装要调试的apk程序到手机上。
0x3,IDA 6.6的设置。
1.用IDA 6.6打开apk文件,选择dex文件进行加载;
2.设置debugger选项,Debugger->Debugger options->Set specific options按如下图所示进行设置,然后确定返回;
Debugger->Process Options其他默认不变,端口这里改为8700;
3.找到在感兴趣的函数要下断点的位置,光标移到要下断点的那一行,按F2下断点;
4.选中IDA Pro 6.6窗口,按F9运行,如果出现下图的画面并且手机屏幕出现"Waiting For Debugger"界面就说明设置成功,可以进行动态调试了。
注意:如果运行过程中一直显示下图所示窗口,就需要关注一下手机上的屏幕界面,看是否是需要与用户进行交互了。
5.当IDA中断在了我们设置断点的地方,这时选中ida->debugger->use source level debugging(源码水平调试),然后点击ida->debugger->debugger windows->locals打开局部变量窗口,就可以产看变量的值了。尽管如此,IDA动态调试Android程序的Dex文件时,变量的查看不是很方便。
说了那多,IDA调试Android程序的DEX文件就是这么简单。
参考博文的网址:
http://bbs.pediy.com/showthread.php?p=1291716
http://www.cnblogs.com/goodhacker/p/4257433.html
http://drops.wooyun.org/?p=5942&preview=true
文档的下载的地址:http://download.csdn.net/detail/qq1084283172/9201921
IDA动态调试Android的DEX文件的更多相关文章
- Ida动态修改android程序的内存数据和寄存器数值,绕过so文件的判断语句
我们继续分析自毁程序密码这个app,我们发现该程序会用fopen ()打开/proc/[pid]/status这个文件,随后会用fgets()和strstr()来获取,于是我们在strstr()处下个 ...
- IDA动态调试so文件出现SIGILL
用ida6.6 调试android的so文件时经常会报SIGILL的错误,意思是指令非法.而且这种错误基本都是发生在系统函数内部,像我遇到过的mmap,fopen,fgets等等.在这些函数内部如果用 ...
- IDA动态调试技术及Dump内存
IDA动态调试技术及Dump内存 来源 https://blog.csdn.net/u010019468/article/details/78491815 最近研究SO文件调试和dump内存时,为了完 ...
- 【转】安卓逆向实践5——IDA动态调试so源码
之前的安卓逆向都是在Java层上面的,但是当前大多数App,为了安全或者效率问题,会把一些重要功能放到native层,所以这里通过例子记录一下使用IDA对so文件进行调试的过程并对要点进行总结. 一. ...
- 动态调试Android程序
最近好几天来一直在看动态调试.首先是这一篇(http://www.52pojie.cn/forum.php?mod=viewthread&tid=293648)里面介绍了多种IDA动态调试的情 ...
- 逆向分析-IDA动态调试WanaCrypt0r的wcry.exe程序
0x00 前言 2017年5月12日全球爆发大规模蠕虫勒索软件WanaCrypt0r感染事件,各大厂商对该软件做了深入分析,但针对初学者的分析教程还比较少,复现过程需要解决的问题有很多,而且没有文章具 ...
- 转:使用IDA动态调试WanaCrypt0r中的tasksche.exe
逆向分析——使用IDA动态调试WanaCrypt0r中的tasksche.exe 转:http://www.4hou.com/technology/4832.html 2017年5月19日发布 导语: ...
- ida动态调试笔记
ida动态调试笔记 目标文件:阿里安全挑战赛的第二题 点击打开链接 使用环境:ida6.8点击打开链接,adt bundle点击打开链接 首先打开avd安卓模拟器,界面如下: 在dos下运行adb命令 ...
- IDA 动态调试
感谢南邮,让我把ida动态调试,给搞定了,困扰了很久,之前下的ubuntu的源,好像有问题,ifconfig这个命令一直装不上,突然想起来了我的服务器很久没用了,重装了下系统,换成ubuntu,这里记 ...
随机推荐
- 微信小程序点击按钮将图片保存到手机
SaveCard: function(e) { let that = this; console.log('保存'); var imgSrc = e.currentTarget.dataset.img ...
- 【DB宝42】MySQL高可用架构MHA+ProxySQL实现读写分离和负载均衡
目录 一.MHA+ProxySQL架构 二.快速搭建MHA环境 2.1 下载MHA镜像 2.2 编辑yml文件,创建MHA相关容器 2.3 安装docker-compose软件(若已安装,可忽略) 2 ...
- BurpSuite 一些小技巧
拦截请求 设置不拦截下面的网站(记得保存项目,不然每次都要添加) .*\.?baidu.com|.*\.?google.com|.*\.?bcebos.com|.*\.?bdstatic.com|.* ...
- (Java基础--Spring阶段)常见面试题题目及解析整理(2021.03.12)
题目整理 Java基础进阶阶段 基础概念类 1.JDK1.8新特性? 2.面向对象和面向过程的区别? 3.什么是值传递和引用传递? 4.什么是不可变对象? 5.讲讲类的实例化顺序? 6.java 创建 ...
- DataTable.SELECT日期类型筛选处理
初始化: public DataTable1() { InitializeComponent(); Init(); } private void Init() { dt = new DataTable ...
- frp实现内网穿透
frp实现内网穿透 目标 通过外网访问内网设备,本文中实现通过手机的移动流量,可以访问到树莓派设备 设备准备 需要被访问的设备(本文中使用Raspberry Pi`).公网IP设备(本文中使用阿里云 ...
- Android学习之服务初体验
•概念 Service(服务)是一个长期运行在后台,没有用户界面的应用组件,即使切换到另一个应用程序或者后台,服务也可以正常运行: 因此,服务适合执行一些不需要显示界面的后台耗时操作,比如下载网络数据 ...
- 如何在CMDB中落地应用的概念?
如何在CMDB中落地应用的概念? 我们前面讲了应用是整个微服务架构体系下运维的核心,而CMDB又是整个运维平台的基石.今天我就讲讲在CMDB中如何落地应用这个核心概念,以及如何建立应用集群分组的思路. ...
- Java学习笔记--异常机制
简介 在实际的程序运行过程中,用户并不一定完全按照程序员的所写的逻辑去执行程序,例如写的某个模块,要求输入数字,而用户却在键盘上输入字符串:要求打开某个文件,但是文件不存在或者格式不对:或者程序运行时 ...
- [2020年10月28日普级组]1405.小B浇花
区 间 和 的 和 区间和的和 区间和的和 题目解析 就直接模拟,从最低的花的高度向最高的花的高度枚举,如果当循环变量的值到达了顶峰,但还有花的数量大于2的,就把循环上线加一(所以数组要开大些) Co ...