加密与解密 调试篇 动态调试技术 (三)-OllyDbg 插件 Run/Hit 符号调试 加载程序

news2024/11/15 13:43:22

目录

插件

这里给出一个命令行插件

Run Trace

 运行

Hit Trace

符号调试

符号格式

1.SYM格式

2.COFF格式

3.CodeView格式

4.PDB格式

5.DBG格式

6.MAP文件

创建调试文件

加载程序

1.CreateProcess

2.将OllyDbg附加到一个正在运行的程序上


插件

OllyDbg允许插件

这里给出一个命令行插件

? 表达式                 计算表达式的值 ? 35-14
D(DB,DW,DD) 表达式       查看内存的数据  D 401000   D esp+c
BP表达四 [条件式]        设置断点 bp GerDlgItemTextA
Hw 表达式                设置硬件写断点

Run Trace

Run Trace 是可以吧被调试程序执行过的指令保存下来  
这样就可以知道之前发生了什么事情
这个功能 可以把地址 寄存器的内容 消息 记录到Run Trace缓冲区
我们在运行Run Trace的时候 要把 缓冲区开大一点
否则会出现缓冲区溢出(OllyDbg会自动丢弃旧数据)


 

 或者

 可以打开Run Trace 窗口 然后右键 可以保存到文件

 运行

当我们需要运行 Run Trace的生活

 

 这里可以打开

打开后  OllyDbg会记录执行过程的所有暂停 
使用 '+'或者'-'可以浏览程序的执行线路
这个生活 OllyDbg会使用实际的内存状态来解释寄存器和栈的变化

 程序显示进入被调试程序领空的时候 我们可以通过Run Trace 查看函数调用次数

 程序运行起来

 

 Hit Trace

Hit Trace 可以让调试者识别哪一部分的指令被执行 哪一部分没有

OllyDbg实现的方式特别简单

在选中的区域中 每一条指令设置 INT3断点 当中断发生
OllyDbg就去除INT3断点
注意!!
在使用Hit Trace 的时候 不能在数据中设置断点 不然有可能会崩溃
使用场景


在遇到跳转分支很多的代码  需要了解程序的执行路线的时候 可以使用Hit Trace

 

 会显示哪些被执行了

符号调试

调试符号是 被调试程序的二进制信息与源程序之间的桥梁

是在编辑器把源文件编译成可执行程序的过程中 支持调试二摘录的调试信息

调试信息包括 

变量 类型 函数名 源代码行等

符号格式

符号表  也叫做调试符

作用是把十六进制数转换为源文件代码行 函数名 变量名

符号表中还包括程序使用的类型信息 

调试器使用类型信息可以获取原始数据 并且把 原始数据显示未程序中所定义的结构和变量

1.SYM格式

SYM格式早期用于MS-DOS和16位的windows系统
现在只作为windows 9x的调试符使用 (windows 9x多为 16位内核)

2.COFF格式

COFF格式 是 UNIX供应商所遵循规范的一部分 
由 windows NT2.1首次引进 现在几乎被抛弃
 

3.CodeView格式

CV最早是在MS-DOS下作为 Microsoft C/C++ 7的一部分出现的 现在已经支持win32系统了

CodeView 是早期微软调试器的名称 其支持的调试符号为 C7格式

c7格式在执行模块是自我包含 符号信息和二进制代码混合(这样调试文件会非常的大)

4.PDB格式

PDB格式是现在最常用的格式 是微软自己定义的未公开格式
Viusal C++和Visual Basic都支持PDB格式 

和CV不同的是

PDB符号根据应用程序不同的连接方式保存在单独或者多个文件中

5.DBG格式

DBG是系统调试符 有了系统调试符 调试器才可以显示系统函数名

DBG文件和其他符号格式不同 因为链接器不创建DBG文件


DBG文件基本上是一个包含其他调试符的文件
(例如包含COFF或者C7等类型的调试符)

微软把操作系统调试符 分配在DBG文件中

这些文件中包含公共信息和全局信息 例如ntdll.dbg kernel32.dbg

6.MAP文件

MAP文件是全局符号 源文件和代码行号信息的唯一文本表示方式

MAP文件在 任何地方 任何时候都可以使用  不需要程序支持 通用性好

创建调试文件

如果我们要进行源代码级的首要条件是生成文件中包含的调试信息

调试信息包括程序里每个变量类型和在可执行文件中的地址映射以及源代码的行号

调试器利用这些信息可以 让源代码和机器码相关联

这里我们以Visual C++W为例子

1. build中选择set avtive configuration选项
在对话框中选择 win32 debug

2.在 project中 选择 setting选项 打开设置对话框

点击 C/C++选项 在 category中下拉列表框中选择 general

在debug info中 选择 program database
这里会产生存储程序信息的数据文件 其中包含类型信息和符号调试信息


3.点击 LINK 在 category 中选择debug

在debug info 选择'debug info' 'Microsoft format' 'separate type' 
也可以选择 Generate mapfile选项来生成 MAP文件

加载程序

OllyDbg有两个方式加载目标程序 进行调试

1 通过CreateProcess 创建进程

2 通过DebugActiveProcess函数把调试器捆绑到一个在运行的程序上


就是一个是没有运行 然后通过创建进行加载

一个是程序运行了 然后使用通过捆绑调试器 来加载

1.CreateProcess

File->Open/或者按F3 打开目标文件 可以调用CreateProcess创建一个用于调试的进程

OllyDbg将受到目标进程发送的调试事件信息

但是对它的子进程的调试事件将不给予理财

2.将OllyDbg附加到一个正在运行的程序上

这也是调试的实用功能 叫做附加

这个功能利用了 DebugActiveProcess 函数

这个函数可以将调试器捆绑到一个正在运行的进程上

如果执行成功 效果类似于使用CreateProcess函数

File->附加

 如果我们是隐藏的进程 那就不能使用上面的方式

OllyDbg有一个 -p的启动参数

我们只需要得到我们想附加进程的pid 就可以附加

使用 PC Hunter 、GMER可以获得隐藏进程的pid

然后在cmd中

OllyDbg.exe -p pid值

就可以附加到隐藏进程

给出一个例子
我们运行 A.exe 他会调用B.exe 这个时候如果我们使用OllyDbg附加B.exe
会无响应

我们只需要 options-> just in time debugging

把OllyDbg设置为临时调试器

把B.exe的入口设置为 INT3 断点

并且我们记下源指令是什么

然后运行 A.exe 调用B.exe 运行到INT3 触发断点

OllyDbg会作为临时调试器来加载B.exe 

然后把INT3 恢复为之前的代码 就可以调试了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/593583.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1计算机网络体系结构_1.1计算机网络概述

1.1.1计网_概念 概念: 计网是一个 将【分散的、具有独立功能的】计算机系统,通过【通信设备与线路】连接起来,由功能完善的软件实现资源共享和信息传递的系统。简言之,计算机网络就是一些 互连的、自治的 计算机系统 的 集合。 …

excel函数采集,截取特殊符号前面/后面数据

截取前面 LEFT(I2,FIND("-",I2)-1) 截取后面 MID(I2,FIND("-",I2)1,99) 房贷利率计算公司,等额本金 (B2-G2*A2)*F2*0.01 Excel常用电子表格公式大全  一、Excel基本公式   1、查找重复内容公式:IF(COUNTIF(A:A,A2)>1,&qu…

国密算法解析

国密算法即国家密码局认定的国产密码算法。 国密算法是商用密码,仅能用于商业用途。国密算法是一套标准,由国家密码局制定的规范,凡是符合的,都可以称之为国密算法。国密算法暂无官方的代码实现,企业可以自己编码实现…

2022年五一杯数学建模A题血管机器人的订购与生物学习解题全过程及论文和程序

2022年五一杯数学建模A题 血管机器人的订购与生物学习 原题再现: 随着微机电系统的发展,人类已经可以加工越来越小的机器。这些机器小到一定程度就可以放进血管开展疾病治疗,这就是血管机器人。血管机器人可以携带药物放入血管里定点治疗与…

信号调制的工作原理

要理解如何进行无线数据传输,我们需要了解: 什么是频率? 信息/数据信号 时间表示 频率表示,为什么它很重要? 滤波器如何工作? FCC通信频段 调制和解调 这些主题可能您在大学专业课上学过&#xff0c…

uboot下的mw写内存和md显示内存命令以及nand命令

配置uboot参数 setenv ipaddr 192.168.0.10;setenv serverip 192.168.0.40;setenv gatewayip 192.168.0.1;setenv netmask 255.255.255.0 setenv bootargs mem512M consolettyAMA0,115200 root/dev/mtdblock2 rootfstypeyaffs2 rw init/init mtdpartshinand:1M(boot),4M(kern…

面试offer收割机,爆肝整理高频软件测试面试题(带答案)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 软件测试面试题&am…

excel 给合并的单元格进行序号填充

一、问题描述 提示:这里描述项目中遇到的问题: 在使用excel 的时候,是否遇到过要给合并单元格排序的情况,下拉会显示需要相同的单元格才行,如图: 二、解决方案 目的是给单元格计数,所以使用…

Module not found: Error: Can‘t resolve ‘fs‘ in ‘/root/workspace/

项目发版时 因为webpack5 不会自动引入polyfills 导致报了一系列错, 按照提示做如下配置 externals 官网文档解释的很清楚,就是webpack可以不处理应用的某些依赖库,使用externals配置后,依旧可以在代码中通过CMD、AMD或者wi…

打车/代驾/跑腿小程序源码司机入住uniapp/thinkphp

开发代驾顺风车货运 客户端:Uniapp 开发 司机端:Uniapp 开发 后台:thinkphp5 框架 数据库:MySQL 打车/代驾/跑腿小程序源码司机入住uniapp/thinkphp 为什么用UNIAPP开发? UNIAPP框架简单,学习成本低…

Spring(IOC,DI,事务)属性

Spring(IOC,DI,事务)属性 IOC 概念 Inverse Of Controll:控制反转;反转了依赖关系的满足方式,由之前的自己创建依赖对象,变为由工厂推送。(变主动为被动,即反转)解决了…

1_5 optical_flow

采用特征点法做VO存在耗时较大的问题,一般耗时情况:如下 (1) 在图像中提取特征点并计算特征描述, 非常耗时 ~10ms ORB,shift耗时更多; (2) 在不同图像中寻找特征匹配, 非常耗时 …

day43|动态规划5-不同0-1背包的问题形态

关键点: 找到前后两种状态的依赖关系 经典0-1背包: 给定一个背包,问装满该背包的最大价值。分割等和子集: 给定一个背包,能不能装满该背包(将重量抽象成价值)最后一块石头重量: 给一…

如何快速图片压缩指定大小?图片压缩到200k以内的方法

图片压缩到200k以内的介绍 在现代社交媒体和网页设计中,高质量的图片是必不可少的。但是,大型图像文件可能会导致页面加载时间过长,从而影响用户体验。这时就需要使用图片压缩技术来将图片文件大小减小到合理的范围内。其中,将图…

稳健地对时间序列光学卫星图像进行配准教程

一、引言 几何误差会导致连续卫星图像采集之间的错位,进而影响土地监测和变化检测分析。在这篇博客文章中,我们研究了如何稳健地对时间序列光学卫星图像进行配准,以减少这种错位的影响。 在本篇博客的末尾,给出用Python配准大区域…

【TES710D-EXT】基于复旦微的FMQL10S400全国产化ARM核心模块之扩展板

板卡概述 TES710D-EXT是专门针对我司TES710D(基于复旦微FMQL10S400的全国产化ARM核心板)的测试扩展板。 FMQL10S400是复旦微电子研制的全可编程融合芯片,在单芯片内集成了具有丰富特点的四核处理器(PS)和可编程逻辑&am…

B/S架构与C/S架构的区别

B/S与C/S区别: 1、c/s架构主要应用于局域网内,而b/s架构主要应用于广域网中; 2、c/s架构一般面向相对固定的用户群,对信息安全的控制能力很强,而b/s架构对安全的控制能力相对弱; 3、B/S架构维护升级比较简单…

考研算法复试刷题第20天:Dijkstra求最短路 【有向图的最短路径问题】

Dijkstra求最短路 我们先来说说这道算法的过程: 和上道题不同的是我们这次是求一个有向图到最终节点的最短距离,所以其策略也有所不同。我们先手动模拟一下过程吧假如有4个点,有他们之间有五条边,那么我们如何来求其1到4的最短路…

【Daily Share】觉得浏览器low?手写一个浏览器扩展程序,让自己的浏览器变得与众不同!!!!

浏览器扩展 概念 扩展为浏览器添加了特性与功能。它通过我们所熟悉的 Web 技术-HTML,CSS 还有 JavaScript 来创建。扩展可以利用与 JavaScript 相同的网页 API,但是扩展也可以访问它自己专有的 JavaScript API。这意味着,和在网页里编码相比…

音视频基础知识

视频基础知识 分辨率 分辨率又称为解析度,分辨率越高,像素越多,图像越清晰。 视频分辨率:又称为图像分辨率,由视频的宽高组成,表示形式宽x高,常见的视频分辨率有480P、720P、1080P、2K(2048x…