实验项目 win32反汇编
综合性实验 2020年11月25日

一、实验综述

1.实验目的及要求

(1)掌握C语言定义全局变量的基本原理
(2)掌握Ollydbg分析工具的使用
(3)在C语言源代码中添加MessageBox代码来定位全局变量赋值语句
(4)分析OD中反汇编窗口及堆栈窗口代码,寻找反汇编代码中的赋值语句

2.实验仪器、设备或软件

Ollydbg
Visual Studio 2015

3.实验原理

(1)Ollydbg简介
Ollydbg是汇编级的调试器,我们使用的VS是源码级的。
Ollydbg主要有以下五个窗口:
反汇编窗口:显示被调试程序的反汇编代码(地址栏、HEX数据栏、汇编指令栏、注释栏)
寄存器窗口:显示当前所选栈线程的CPU寄存器的内容
信息窗口:显示反汇编窗口中选中的第一个命令的参数及一些跳转目标地址、字符串等
数据窗口:显示内存或文件的内容
堆栈窗口:显示当前线程的堆栈
(2)MessageBox简介
MessageBox是一个库函数,MFC经常使用的,这是在屏幕上弹出一个带OK按钮的对话框。

二、实验过程(步骤过程、数据记录)

1.步骤

(1)使用VS2015创建项目LESSON 1(我的路径为F:\OD反汇编\LESSON 1)在项目的源文件下新建项001.c文件并写入以下代码;

#include<Windows.h>
int aaa = 0;
int main()
{aaa = 0x778899;return 0;
}


(2)选择release配置,vs中的工程有debug和release两个版本:

  • Debug通常称为调试版本,通过一系列编译选项的配合,编译的结果通常包含调试信息,但是不做任何优化(性能有影响),目的是为开发人员提供强大的应用程序调试能力,也就是说只有在Debug模式下,我们才可以使用vs所提供的所有的程序调试功能,比如:单步调试中将光标移至变量处即可以获取该变量的实时数据。
  • Release通常称为发布版本,是为用户使用的,一般客户不允许在发布版本上进行调试,在Release模式下也无法使用vs所有的调试功能。所以不保存调试信息,同时,它往往进行了各种优化,以期达到代码最小和速度最优。为用户的使用提供便利。

(3)在源代码中写入命令:MessageBox(0, NULL, NULL, MB_OK);

注:系统调用MessageBox函数会在程序运行时弹出一个信息框,可以帮助定位源代码。

(4)保存源代码并编译链接运行,运行结果如下:


(5)此过程会在该项目路径下生成可执行文件(LESSON 1.exe)

(6)打开onllydbg,File->Open->在F:\OD反汇编\LESSON 1\Release路径下的LESSON 1.exe文件,显示页面如下:


(7)右键->Go to->Experssion,输入表达式:MessageBoxW进行查找。

  • MessageBoxW:一个Unicode字符集的提示框
  • MessageBoxA:一个ANSI字符集的提示框
  • 因为我们在VS2015中使用的一般都是Unicode字符集的,因此我们此处使用表达式:MessageBoxW,代码将跳转到MessageBox的汇编代码部分。


(8)定位到MessageBox处;快捷键F2(设置断点),设置断点的地址部分会显示红色高亮;

(9)快捷键F9让程序执行到汇编指令部分,执行部分会显示紫色线条。

  • 代码中main函数调用了MessageBox函数,因此MessageBox函数返回会返回给main函数


(10)在右下角的堆栈窗口会显示函数调用,在堆栈窗口选中函数调用语句,回车,看到反汇编窗口代码跳转到了main函数。下图中紫色选中部分就是main函数部分(OD中已经用一个中括号括了起来)。


(11)从main函数中,我们可以找到自己编写的C语言程序对应的汇编代码。

鼠标选中的就是我们对全局变量的赋值,赋值的话,他会翻译为转移指令

2.数据记录

在汇编语言中,实验中C语言的赋值语句对应的汇编代码为:

mov dword ptr [aaa],778899

三、结果讨论与分析

1.实验结果

在Ollydbg调试软件中成功找到了C语言源码对应的反汇编代码,明白了C语言中赋值语句对应的汇编指令。

2.分析总结

为了熟悉Ollydbg的软件的使用,小组展开讨论,了解并熟悉了该软件的使用方法,以及如何使用一些快捷键来提高使用效率。
下面是OD的一些常用快捷键:

打开一个新的可执行程序 (F3)
运行选定的程序进行调试 (F9)
暂时停止被调试程序的执行 (F12)
单步进入被调试程序的 Call 中(F7)
步过被调试程序的 Call (F8)
跟入被调试程序的 Call 中 (Ctrl+F11)
跟踪时跳过被调试程序的 Call (Ctrl+F12)
执行直到返回 (Ctrl+F9)
显示记录窗口 (Alt+L)
显示模块窗口 (Alt+E)
显示内存窗口(Alt+M)
显示 CPU 窗口 (Alt+C)
显示补丁窗口 (Ctrl+P)
显示呼叫堆栈 (Alt+K)
显示断点窗口 (Alt+B)
打开调试选项窗口 (Alt+O)

虽然有些步骤比较快的能够帮助我们定位函数或变量,但建议使用单步运行来分析程序执行路径,关注函数跳转 ,跟踪变量取值。这样可以更好的理解汇编语言与高级语言的转化,以及相关函数的调用过程。

win32反汇编初步探索及Onllydbg的使用相关推荐

  1. Win32反汇编(二)几种常见的指令反汇编详解:EAX、MOVSX与MOVZX、LEA、SUB、CMP与转移指令

    前言 作者:浪子花梦,一个有趣的程序员 ~ 此系列文章都是一些基础的文章,每篇文章都通过几个小例子快速的了解 Win32反汇编与OD的使用,在此作个笔记 如若对您有帮助,记得三连哟 ~ 前文链接 Wi ...

  2. python socket发送数组_利用pyprocessing初步探索数组排序算法可视化

    [经过两次更新,功能基本完成]最终效果请直接下拉到最后一个视频观看 背景说明 这篇文章旨在初步探索利用pyprocessing的强大的可视化功能,以及pyprocessing和Ipython之间的本地 ...

  3. Alibaba Druid 源码阅读(二) 数据库连接池实现初步探索

    Alibaba Druid 源码阅读(二) 数据库连接池实现初步探索 简介 在上篇文章中,了解了连接池的应用场景和本地运行了示例,本篇文章中,我们尝试来探索下Alibaba Druid数据库连接池的整 ...

  4. Redis主从复制架构初步探索 http://www.sxt.cn/info-1750-u-324.html#SXT_h2_11

    Redis主从复制架构初步探索 目录http://www.sxt.cn/info-1750-u-324.html#SXT_h2_11 ·  一.主从复制架构简介 ·  1.1 源于关系数据库的读写分离 ...

  5. 企查查app sign算法破解初步探索

    企查查app sign算法破解初步探索 之前有说过企查查的sign的解密,但这次是企查查app的sign算法破解,目前是初步进程. 目前我们需要做查壳,具体方法可以百度搜索,企查查用的360加固,很简 ...

  6. ASPNet请求处理机制初步探索之旅Part2核心

    ASPNet请求处理机制初步探索之旅Part2核心 开篇:上一篇我们了解了一个请求从客户端发出到服务端接收并转到ASP.Net处理入口的过程,这篇我们开始探索ASP.Net的核心处理部分,借助强大的反 ...

  7. 创客教育和Mixly的初步探索

    创客教育的理论与实践 + Mixly的初步探索 创客教育 傅骞老师在课堂上指出,创客教育要注重"创新"和"分享","创客就是让你没有目标的去做你喜欢做 ...

  8. 电子游戏理论基础知识的初步探索(转)

    电子游戏理论基础知识的初步探索(转)[@more@] 抛砖引玉,请读者指正. 一.游戏(Game) 约翰?赫伊津哈和弗里德里?希格奥尔格?容格尔在<游戏的人>(1938年)和<玩游戏 ...

  9. 【Google Earth Studio】初步探索

    Google Earth Studio教程专栏 [Google Earth Studio]初步探索 [Google Earth Studio]基础编辑技巧 [Google Earth Studio]进 ...

  10. python实战故障诊断之CWRU数据集(二):异常数据剔除及包络解调初步探索

    文章目录 1. 概述 2. 异常数据探索 2.1. 电噪声干扰 2.2. 驱动端与风扇端传感器信号混淆 2.3. 分段采集信号整合 3. 正常信号的平方包络解调分析 1. 概述   在完成了CWRU数 ...

最新文章

  1. Java多线程间的通信
  2. 脚手架工程:介绍安装
  3. 高效率Oracle SQL语句
  4. Java获取硬盘信息
  5. qt tableview修改表格内容_如何修改一次代码就可以完成多种类型 cell 的 UITableView 增删修改
  6. odoo10参考系列--ORM API 二(新旧API兼容性、模型参考和方法修饰符)
  7. 依赖混淆 exploit 已被滥用于攻击亚马逊等多家大厂
  8. HDU1811 Rank of Tetris【拓扑排序+并查集】
  9. Decorator模式设计模式
  10. Java学生成绩管理系统(一次学会java类及容器使用,内含java编程小tips)
  11. 常用的控件样式风格设置(qss)——QtWidgets
  12. acer台式计算机如何拆硬盘,原件 Acer V5471G拆卸与更换固态硬盘的详细说明
  13. c++除法保留小数_小学数学整数和小数的应用题解答方法公式汇总,新学期必备...
  14. JAVA入门第二季 第一章 类和对象
  15. fliebeat+kafka ELK日志分析平台实战
  16. 斐尔可(FILCO)67键迷你机械键盘 如何使用快捷键
  17. 【我的产品观】开发wangEditor一年总结
  18. sdcard/DCIM/.thumbnails文件夹里的庞然大物 是这样来的
  19. proteus原理图转化为pcb
  20. Azure基础:什么是云计算(2) NIST云计算模型定义

热门文章

  1. wangEditor上传不了图片
  2. Rxjava + retrofit + dagger2 + mvp搭建Android框架
  3. java开发 微信商家转账到零钱,发起商家转账API,微信支付
  4. 个人域名备案详细流程(图文并茂)
  5. 数学【1】:矩阵特征值与特征向量的求法
  6. 你知道黑体、仿宋、楷体、宋体、微软雅黑、新宋体也是有版权的吗?是否还能用?
  7. 发达国家如何布局大数据战略
  8. zk kafka常识
  9. 苹果为什么不能开无线网络连接服务器,苹果手机不能上网怎么办 iPhone网络故障解决【详解】...
  10. Stata:多元回归中控制其他因素不变的含义