ida使用技巧之动态调试

一、ida动态调试

1、介绍

众所周知,ida是一款非常优秀的反编译软件,在静态逆向中是属于屠龙宝刀一般的存在,他不仅仅有着优秀的静态分析能力,同时还有着极其优秀的动态调试能力,甚至可以直接对生成的伪代码进行调试,这一点远超其他只能在汇编层进行调试的动态调试器,极大的增加了动态调试程序的可读性,能够节省很多精力。甚至可以以远程调试的方式,将程序部署在linux或安卓端上,实现elf文件和so文件等的动态调试。

2、本地调试(Windows)

首先从本地动态调试开始

加载目标文件

万年第一步,使用ida打开目标文件,然后点击菜单项中的“Debugger”
在这里插入图片描述
选择select debugger
在这里插入图片描述本地调试Windows文件,所以这里选择local Windows debugger。
在这里插入图片描述点击ok之后,再看debugger菜单发现此时菜单以新的形式展开

在这里插入图片描述此时再点击带有绿色三角符号的“Start process”即可开始调试程序

ida还支持另一种调试方式,即将目标文件附加到一个正在运行的进程上,以调试某些无法独立运行的文件,如果想以这种方式进行调试,则在选好调试器后点击“Attach to process”后即可选择附加进程
在这里插入图片描述

调试器界面

经过一段时间的加载之后,进入了调试器界面
在这里插入图片描述“IDA-view-eip”界面是反汇编窗口,在这里点击f5,可以进入伪代码调试
在这里插入图片描述

可以说是非常的好用
下面的“hex view”顾名思义,右边从上到下分别是级寄存器/标志寄存,加载到进程内存空间中的可执行文件和共享库,双击模块名称可打开该模块输出的符号表,再向下看就是栈窗口

调试命令
ida快捷键功能
F7单步步进
F8单步步过
F9继续运行程序
F4运行到光标所在行
Ctrl + F7直到该函数返回时才停止
Ctrl + F2终止一个正在运行的进程
F2设置断点
断点

ida的动态调试同样支持设置条件断点
在这里插入图片描述
设置好断点后,右键断点,点击第二行“Edit breakpoint”即可打开断点设置菜单
在这里插入图片描述
location栏是断点地址,condition栏则是条件断点的表达式
例:EAX == 12
指当EAX的值为12时中断,同时,因为condition栏由IDC表达式支持,所以可以使用一些IDC的函数。
比如:GetRegValue(“ZF”)
指当ZF的值不为0时中断

监视窗口

ida同样也支持对数据的监视,需要监视的数据一般在栈或者数据块中,进入栈或者数据,点击右键打开菜单,选择“Add watch”
在这里插入图片描述即可在窗口“watch list”中显示,如果需要删除,则按“Delete”键
在这里插入图片描述

3、远程调试

ida支持远程调试Windows、linux、Android、Mac OS的二进制文件,将文件放在远程的对应系统服务器上,ida远程连接服务器,在服务器上运行、调试程序,并在本地客户端显示调试界面。界面视图上和本地调试并没有区别。
如果需要远程调试,首先需要将ida的服务端部署在远程服务器上,ida的服务端存储在ida目录中的dbgsrv文件中
在这里插入图片描述将需要调试的文件和服务端版本放入服务器中,然后运行服务端,会默认在23946端口启动ida服务端程序,以linux为例
被调试程序是64位elf文件,所以在linux端运行linux_server64,然后回到客户端
在这里插入图片描述
客户端的第一步没什么变化,在菜单选择debugger栏,在选择debugger时,选择Remote Linux debugger
在这里插入图片描述然后在菜单中先选择“Process option”进行设置
在这里插入图片描述
打开后页面如下
在这里插入图片描述第一行application和input file选择被调试文件在服务端中的存储路径。下面第三行的directory是存储路径,直接选被调试文件所在目录就行。再下面第四行的是程序启动时传入的参数,可以为空。第五行则“Hostname”则填服务端的ip和端口号,我这里选的服务端是虚拟机。最后一行的password是linux_server启动时设置的密码,如果没有设置,则为空即可。全部设置正确之后就可以开始调试了
点击“start process”开始调试程序

在这里插入图片描述可以看到在服务端程序已经成功启动
在这里插入图片描述

接下来的步骤和本地调试并没有什么区别不再赘述。其他安卓和Mac的文件远程调试也是大同小异,也不再多说了。

  • 10
    点赞
  • 105
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
IDA.Pro代码破解揭秘 目录 第1章 导言 1 1.1 代码调试器概述 2 1.2 小结 3 第2章 汇编及逆向工程基础5 2.1 导言 6 2.2 汇编语言及IA-32处理器 6 2.3 栈、堆及二进制可执行文件中的其他区段 14 2.4 最新的IA-32指令集及参考资料 19 2.5 小结 25 第3章 可移植可执行文件格式和可执行链接格式 27 3.1 导言 28 3.2 可移植可执行文件格式 28 3.3 可执行链接格式 35 3.4 小结 47 第4章 实战1 49 4.1 导言 50 4.2 跟踪执行流 50 4.3 快速跟踪并找出解决方案 63 4.4 常见问题 64 第5章 调试 65 5.1 导言 66 5.2 调试的基础知识 66 5.2.1 断点 67 5.2.2 单步 68 5.2.3 监视 68 5.2.4 异常 68 5.2.5 跟踪 69 5.3 使用IDA Pro进行调试 69 5.4 调试技术在逆向工程中的应用 71 5.5 堆和栈的访问和修改 78 5.6 其他调试器 80 5.6.1 Windbg 80 5.6.2 Ollydbg 80 5.6.3 immdbg 81 5.6.4 PaiMei/PyDbg 81 5.6.5 GDB 81 5.7 小结 82 第6章 反逆向技术 83 6.1 导言 84 6.2 调试 84 6.3 举例阐述 87 6.4 混淆技术 87 6.5 小结 104 第7章 实战2 105 7.1 协议问题 106 7.2 协议结构 106 7.2.1 分帧与重组 106 7.2.2 自相似性 108 7.2.3 Hit Marking 120 7.2.4 Hitlist示例 124 第8章 高级攻略 129 8.1 导言 130 8.2 逆向分析恶意软件 131 第9章 IDA脚本编写和插件 161 9.1 导言 162 9.2 IDA脚本编写基础 162 9.3 IDC语法 162 9.3.1 输出 163 9.3.2 变量 164 9.3.3 条件 165 9.3.4 循环 165 9.3.5 函数 166 9.3.6 全局变量 168 9.4 简单脚本示例 170 9.5 编写IDC脚本 173 9.5.1 用IDC解决问题 173 9.5.2 新的IDC调试器功能 180 9.5.3 有用的IDC函数 181 9.6 IDA插件基础 185 9.6.1 模块/插件资源 186 9.6.2 IDA Pro SDK介绍 187 9.7 插件语法 188 9.8 设置开发环境 189 9.9 简单插件示例 191 9.9.1 Hello World插件 191 9.9.2 find memcpy插件 194 9.10 间接调用插件 209 9.10.1 收集数据 210 9.10.2 用户接口 211 9.10.3 实现回调 213 9.10.4 显示结果 215 9.11 插件开发和调试策略 250 9.11.1 创建一个新的IDA开发目录 250 9.11.2 编辑配置文件 250 9.12 加载器 255 9.13 处理器模块 256 9.14 第三方脚本插件 256 9.14.1 IDAPython 256 9.14.2 IDARub 257 9.15 常见问题 257

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值