【转】Android IDA 动态调试最完善攻略,跨过各种坑
前提条件和运行环境一定要写清楚,不然会有很多坑,坑死人。
(1)IDA 是最新的7.0版本 (2) JDB 使用Java安装目录下的 (3)系统是win10 使用命令窗口时有很大的差别
(4)手机是4.4 以下系统
1.手机要有Root权限
2.复制IDA 安装目录下dbgsrv 文件里面的android_server文件到 手机内存储的 /data/local/tmp 目录下
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,将Eclipse切换到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恢复执行。
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步的视图中查看内存
from:https://blog.csdn.net/marketandtechnology/article/details/82116074
【转】Android IDA 动态调试最完善攻略,跨过各种坑的更多相关文章
- IDA动态调试Android的DEX文件
Android程序的dex文件的动态调试确实是个大问题,网上也有一些教程但是不是特别的详细,今天用到了IDA动态调试Android的DEX文件,特此记录一下. IDA 6.6新添加了对dex文件的调试 ...
- Android studio动态调试smali
前面介绍了使用IDA动态调试smali,这种方法设置简单,不用重打包,用起来方便,但是如果变量类型设置错误则会马上退出调试,这是让人不爽的地方,而使用Android studio则不会. 0x01 ...
- IDA动态调试技术及Dump内存
IDA动态调试技术及Dump内存 来源 https://blog.csdn.net/u010019468/article/details/78491815 最近研究SO文件调试和dump内存时,为了完 ...
- 【转】安卓逆向实践5——IDA动态调试so源码
之前的安卓逆向都是在Java层上面的,但是当前大多数App,为了安全或者效率问题,会把一些重要功能放到native层,所以这里通过例子记录一下使用IDA对so文件进行调试的过程并对要点进行总结. 一. ...
- 逆向分析-IDA动态调试WanaCrypt0r的wcry.exe程序
0x00 前言 2017年5月12日全球爆发大规模蠕虫勒索软件WanaCrypt0r感染事件,各大厂商对该软件做了深入分析,但针对初学者的分析教程还比较少,复现过程需要解决的问题有很多,而且没有文章具 ...
- Android Studio 动态调试 apk 反编译出的 smali 代码
在信安大赛的准备过程中,主要通过 Android Studio 动态调试 apk 反编译出来的 smali 代码的方式来对我们分析的执行流程进行验证.该技巧的主要流程在此记录.以下过程使用 Andro ...
- 转:使用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之类的反汇编工具辅助学习,再用gdb或者IDA动态调试,跟踪每条指令的 执行结果。都不难
作者:潘安仁链接:https://www.zhihu.com/question/40720890/answer/87926792来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
随机推荐
- 【bzoj3098】Hash Killer II 生日悖论
这天天气不错,hzhwcmhf神犇给VFleaKing出了一道题:给你一个长度为N的字符串S,求有多少个不同的长度为L的子串.子串的定义是S[l].S[l + 1].… S[r]这样连续的一段.两个字 ...
- Entity Framework表名默认自动变为复数形式等常见问题解决方法
今天使用了一下手写EntityFramework,发现一些常见的问题,做个记录: 1.以前使用模板生成不太在意的问题,就是在定义实体类时,如果没映射注释,自动映射的表名会变成复数形式 如:表名==&g ...
- CentOS 7.4升级Linux内核
CentOS 7.4升级Linux内核 [日期:2018-01-15] 来源:Linux社区 作者:straycats [字体:大 中 小] 由于最近intel出了Meltdown和Spectre两 ...
- bzoj 3779 重组病毒 好题 LCT+dfn序+线段树分类讨论
题目大意 1.将x到当前根路径上的所有点染成一种新的颜色: 2.将x到当前根路径上的所有点染成一种新的颜色,并且把这个点设为新的根: 3.查询以x为根的子树中所有点权值的平均值. 分析 原题codec ...
- 【Visual Studio】error C2220: 警告被视为错误 - 没有生成“object”文件 (转)
原文转自 http://www.cnblogs.com/kex1n/archive/2011/10/19/2217266.html [错误原因] 该文件的代码页为英文,而我们系统中的代码页为中文. [ ...
- npm 安装出现 UNMET DEPENDENCY 的解决方案
npm imuzhicloud@0.2.2 E:\com\muzhicloud_make_web+-- UNMET PEER DEPENDENCY react@15.4.2+-- react-dnd@ ...
- Delphi将图片缩放成指定大小
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...
- Spring Tool Suite(STS)安装
Spring Tool Suite是一个基于Eclipse的开发环境,可以自定义用于开发Spring应用程序.它提供了一个随时可用的环境来实现,调试,运行和部署Spring应用程序,包括Pivotal ...
- OceanBase数据库实践入门——手动搭建OceanBase集群
前言 目前有关OceanBase功能.案例.故事的文章已经很多,对OceanBase感兴趣的朋友都想安装一个数据库试试.本文就是分享初学者如何手动搭建一个OceanBase集群.这也是学习理解Ocea ...
- robot upstart 问题
1.启动后在记录文件发现左轮节点未启动: 因为左边的类未实例化,不会去订阅消息然后初始化 2.两个节点均可以启动后,发现启动后又死掉 因为在程序里有getenv(“HOME”)然后付给string,g ...