前提条件和运行环境一定要写清楚,不然会有很多坑,坑死人。

(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 动态调试最完善攻略,跨过各种坑的更多相关文章

  1. IDA动态调试Android的DEX文件

    Android程序的dex文件的动态调试确实是个大问题,网上也有一些教程但是不是特别的详细,今天用到了IDA动态调试Android的DEX文件,特此记录一下. IDA 6.6新添加了对dex文件的调试 ...

  2. Android studio动态调试smali

    前面介绍了使用IDA动态调试smali,这种方法设置简单,不用重打包,用起来方便,但是如果变量类型设置错误则会马上退出调试,这是让人不爽的地方,而使用Android studio则不会.   0x01 ...

  3. IDA动态调试技术及Dump内存

    IDA动态调试技术及Dump内存 来源 https://blog.csdn.net/u010019468/article/details/78491815 最近研究SO文件调试和dump内存时,为了完 ...

  4. 【转】安卓逆向实践5——IDA动态调试so源码

    之前的安卓逆向都是在Java层上面的,但是当前大多数App,为了安全或者效率问题,会把一些重要功能放到native层,所以这里通过例子记录一下使用IDA对so文件进行调试的过程并对要点进行总结. 一. ...

  5. 逆向分析-IDA动态调试WanaCrypt0r的wcry.exe程序

    0x00 前言 2017年5月12日全球爆发大规模蠕虫勒索软件WanaCrypt0r感染事件,各大厂商对该软件做了深入分析,但针对初学者的分析教程还比较少,复现过程需要解决的问题有很多,而且没有文章具 ...

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

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

  7. 转:使用IDA动态调试WanaCrypt0r中的tasksche.exe

    逆向分析——使用IDA动态调试WanaCrypt0r中的tasksche.exe 转:http://www.4hou.com/technology/4832.html 2017年5月19日发布 导语: ...

  8. ida动态调试笔记

    ida动态调试笔记 目标文件:阿里安全挑战赛的第二题 点击打开链接 使用环境:ida6.8点击打开链接,adt bundle点击打开链接 首先打开avd安卓模拟器,界面如下: 在dos下运行adb命令 ...

  9. 学汇编的时候可以拿IDA之类的反汇编工具辅助学习,再用gdb或者IDA动态调试,跟踪每条指令的 执行结果。都不难

    作者:潘安仁链接:https://www.zhihu.com/question/40720890/answer/87926792来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

随机推荐

  1. K3Cloud调用存储过程

    SQLScriptServiceHelper.GetDataFromStoredProc( this.Context, DatabaseType.Oracle, "/*dialect*/TJ ...

  2. 马士兵hadoop第一课:虚拟机搭建和安装hadoop及启动(转)

    马士兵hadoop第一课:虚拟机搭建和安装hadoop及启动 马士兵hadoop第二课:hdfs集群集中管理和hadoop文件操作 马士兵hadoop第三课:java开发hdfs 马士兵hadoop第 ...

  3. FZOJ Problem 2107 Hua Rong Dao

                                                                                                        ...

  4. 转 #HTTP协议学习# (一)request 和response 解析

    http://www.cnblogs.com/bukudekong/p/3834020.html #HTTP协议学习# (一)request 和response 解析   注:本文转自:http:// ...

  5. 转 Python——UnicodeEncodeError: 'ascii' codec can't encode/decode characters

    转自: http://blog.csdn.net/zuyi532/article/details/8851316 我是写爬虫的时候遇到的问题,百度了一下,先贴解决方案: 在代码中加入: import ...

  6. 使用android ndk编译boost动态库

    由于以往我写过不少使用boost库开发的项目,而最近准备移植一些代码到android上(上层界面以及jni层我不管,也没研究过,现在只完成代码的移植编译,具体如何调用,由其它人负责),所以先要解决的就 ...

  7. AC日记——爱改名的小融3 codevs 3156

    3156 爱改名的小融 3  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description Wikioi上有个人叫小融,他喜 ...

  8. 微信小程序踩坑之一[wx.request]请求模式

    最近在做小程序时,使用wx.request()方法请求时, 当使传输string类型时,一定要声明method请求模式为post,否则会一直报错,而不声明时默认为get, 已填坑 =,= wx.req ...

  9. 空扫描Idle Scanning

    空扫描Idle Scanning   空扫描Idle Scanning是一种借助第三方实施的端口扫描技术,可以很好的隐蔽扫描主机本身.它的实现基于以下两个TCP工作机制.   (1)在TCP三次握手阶 ...

  10. shell细节决定高度

    1.文件测试操作符 -f[file]:文件存在且为普通文件则为真; -d[directory]:文件存在且为目录文件则为真; -s[size]:文件存在且为文件大小不为0则为真; -e[exist]: ...