逆向工程实验一

1.实验目的和要求
熟悉PE文件格式,通过对PE文件头分析,理解PE文件格式,掌握主要数据结构的定位及其功能,如入口点、节表、节、导入表等。研究如何利用工具对各部分的内容进行读取分析显示,理解RVA、VA、FOA之间的关系;初步掌握汇编程序的调试方法。

2.实验步骤
1、PE可执行文件分析
开发一个源程序 HelloWorld .asm,显示hello world。
    .386
    .model flat,stdcall
    option casemap:none

include    windows.inc
include    user32.inc
includelib user32.lib
include    kernel32.inc
includelib kernel32.lib

;数据段
    .data
szText     db  'HelloWorld',0
;代码段
    .code
start:
    invoke MessageBox,NULL,offset szText,NULL,MB_OK
    invoke ExitProcess,NULL
    end start

2、调试软件OllyDBG
2.1、利用OD软件调试PE文件。
从OD反汇编的结果分析,invoke MessageBox,NULL,offset szText,NULL,MB_OK分解成哪几个指令?

 

PUSH 0
PUSH 0 ; MB_OK 的值
PUSH OFFSET 00403000 ; szText字符串地址
PUSH 0 ; NULL的值
CALL <JMP.&user32.MessageBoxA> ; 调用user32模块中的MessageBox函数

问题2.2:怎么理解E8 08000000?

 

使用E8调用Call指令,E8后面跟着的是偏移地址,0800 0000应该高位先读,所以是0000 0008;Call指令把它吓一跳指令压栈,0040 1010+0000 0008=0040 1018,跳转到地址0040 1018执行。


问题2.3:F7单步步入和F8单步步过 有什么不同?
F8单步步过每按一次这个键执行一条反汇窗口中的一条指令,遇到CALL等子程序不进入其代码,越过函数实现;
F7单步步入功能与F8类似,区别在于F7遇到CALL等子程序是会进入其中,即进入函数实现。
简单来说就是按F7要一条条执行,按F8就是等同看作一条执行执行下面自己编写的所有连贯命令。

2.4:修改EXE文件字节码
   将messagebox显示的 HelloWorld 修改成 GoodNight,截图显示结果。
找到HelloWorld.,选中然后Ctrl+E跳转即可修改,然后再运行就可以了。

 

 

 

问题2.5:修改是从文件偏移的什么地方开始的(FOA和VA、RVA分别的多少)?

 

用winhex打开可以查看到是在0000 0800,可以知道FOA是0000 0800

 

.data在Virtual Offset区段在内存中的相对虚拟地址RVA是0000 3000(起始地址)

 

VA=Image Base+RVA=0040 0000+0000 3000=0040 3000
3、调试软件W32DASM
利用W32DASM查看HelloWorld.EXE的输出。
问题3.1:该函数用到哪几个DLL,分别用到哪几个函数?
使用到user32.ddl、kerne123.ddl和MessageBoxA、exitProcess函数

 

4、FlexHex 或 Winhex
熟悉十六进制编辑软件的使用。
问题4.1:如何初步判断一个文件是PE文件?

1.使用winhex工具查看文件头是否为0X4D5A;
2.若符合则用e_lfanew指针定位pe头,e_lfanew一般位于0X3C;
3.若符合1、2则判断pe头是否为0X4550;
4.以上三点都符合则是有效PE头。

5、利用PEditor查看Hellworld,读出其ImageBase的值,并给出节表(截图)。
问题5.1:画出节表。

 

Image Base = 0040 0000
节表:

 


问题5.2:某变量的FOA为410H,试分析其位于哪一节(给出分析过程。)?该变量的RVA为多少(给出计算过程)? 
位于0-1000H的.test节
RVA:1000H +(410H-400H)= 1010H

6、如何判断一个文件是否是EXE文件?
用Winhex打开文件,从文件头4D 5A(MZ)开始跳转3C,读取到数据0000 00B0,再次跳转到0000 00B0,若该地址为50 45 即为EXE文件

7、查阅资料,简述病毒获取Kernel32模块基地址的重要性,即描述其目的是什么?
一般初始化PE文件的时候,ntdll.dll, kernel32.dll是随进程以及线程初始化时候加载的。所以即使程序中我们不引入任何输入表结构,这两个DLL在我们程序进程以及线程初始化时也必须加载。获得kernel32.dll的基地址后,就可以获得LoadLibray函数来继续加载其他的动态链接库,然后再通过我们的GetProcAdress函数来获得相应需要的api函数地址,这样也就做到了可移植性的要求。


8、导入表结构分析。
问题8.1:利用PEditor打开firstwindow.exe,分析该PE的导入表。该PE文件描述导入表的数据目录项的偏移是多少?导入表的VA和大小分别是多少?该EXE用到多少个DLL文件。验证与PEditor中查看到的是否一致?

 

 

 


数据目录项的偏移:2048H
VA:00401000H 大小:50H
用到3个dll文件
一致

问题8.2:理解PE文件的双桥结构,特别是从静态到动态桥2发生的变化。下图为导入表描述符的数据结构。仅填写与Winresult.DLL相关的信息(画出静态、动态两个)图)。

 

 

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
分享] 逆向工程四大软件简介 Imageware   Imageware 由美国 EDS 公司出品,是最著名的逆向工程软件,正被广泛应用于汽车、航空、航天、消费家电、模具、计算机零部件等设计与制造领域。该软件拥有广大的用户群,国外有 BMW、Boeing、GM、Chrysler、Ford、raytheon、Toyota 等著名国际大公司,国内则有上海大众、上海交大、上海 DELPHI、成都飞机制造公司等大企业。   以前该软件主要被应用于航空航天和汽车工业,因为这两个领域对空气动力学性能要求很高,在产品开发的开始阶段就要认真考虑空气动力性。常规的设计流程首先根据工业造型需要设计出结构,制作出油泥模型之后将其送到风洞实验室去测量空气动力学性能,然后再根据实验结果对模型进行反复修改直到获得满意结果为止,如此所得到的最终油泥模型才是符合需要的模型。如何将油泥模型的外形精确地输入计算机成为电子模型,这就需要采用逆向工程软件。首先利用三坐标测量仪器测出模型表面点阵数据,然后利用逆向工程软件(例如:Imageware surfacer)进行处理即可获得 class 1 曲面。   随着科学技术的进步和消费水平的不断提高,其它许多行业也开始纷纷采用逆向工程软件进行产品设计。以微软公司生产的鼠标器为例,就其功能而言,只需要有三个按键就可以满足使用需要,但是,怎样才能让鼠标器的手感最好,而且经过长时间使用也不易产生疲劳感却是生产厂商需要认真考虑的问题。因此微软公司首先根据人体工程学制作了几个模型并交给使用者评估,然后根据评估意见对模型直接进行修改,直至修改到大家都满意为止,最后再将模型数据利用逆向工程软件 Imageware 生成 CAD 数据。当产品推向市场后,由于外观新颖、曲线流畅,再加上手感也很好,符合人体工程学原理,因而迅速获得用户的广泛认可,产品的市场占有率大幅度上升。   Imageware 逆向工程软件的主要产品有: Surfacer――逆向工程工具和 class 1 曲面生成工具 Verdict――对测量数据和CAD数据进行对比评估 Build it――提供实时测量能力,验证产品的制造性 RPM――生成快速成型数据 View――功能与 Verdict 相似,主要用于提供三维报告   Imageware 采用 NURB 技术,软件功能强大,易于应用。Imageware 对硬件要求不高,可运行于各种平台:UNIX 工作站、PC 机均可,操作系统可以是 UNIX、NT、Windows95 及其它平台。   Imageware 由于在逆向工程方面具有技术先进性,产品一经推出就占领了很大市场分额,软件收益正以 47% 的年速率快速增长。   Surfacer 是 Imageware 的主要产品,主要用来做逆向工程,它处理数据的流程遵循点――曲线――曲面原则,流程简单清晰,软件易于使用。其流程如下:     一、点过程   读入点阵数据。   Surfacer 可以接收几乎所有的三坐标测量数据,此外还可以接收其它格式,例如:STL、VDA 等。   将分离的点阵对齐在一起(如果需要)。   有时候由于零件形状复杂,一次扫描无法获得全部的数据,或是零件较大无法一次扫描完成,这就需要移动或旋转零件,这样会得到很多单独的点阵。Surfacer 可以利用诸如圆柱面、球面、平面等特殊的点信息将点阵准确对齐。   对点阵进行判断,去除噪音点(即测量误差点)。   由于受到测量工具及测量方式的限制,有时会出现一些噪音点,Surfacer 有很多工具来对点阵进行判断并去掉噪音点,以保证结果的准确性。   通过可视化点阵观察和判断,规划如何创建曲面。   一个零件,是由很多单独的曲面构成,对于每一个曲面,可根据特性判断用用什么方式来构成。例如,如果曲面可以直接由点的网格生成,就可以考虑直接采用这一片点阵;如果曲面需要采用多段曲线蒙皮,就可以考虑截取点的分段。提前作出规划可以避免以后走弯路。   根据需要创建点的网格或点的分段。   Surfacer 能提供很多种生成点的网格和点的分段工具,这些工具使用起来灵活方便,还可以一次生成多个点的分段。     二、曲线创建过程   判断和决定生成哪种类型的曲线。   曲线可以是精确通过点阵的、也可以是很光顺的(捕捉点阵代表的曲线主要形状),或介于两者之间。   创建曲线。   根据需要创建曲线,可以改变控制点的数目来调整曲线。控制点增多则形状吻合度好,控制点减少则曲线较为光顺。   诊断和修改曲线。   可以通过曲线的曲率来判断曲线的光顺性,可以检查曲线与点阵的吻合性,还可以改变曲线与其它曲线的连续性(连接、相切、曲率连续)。Surfacer 提供很多
逆向工程实验报告全文共9页,当前为第1页。逆向工程实验报告全文共9页,当前为第1页。 逆向工程实验报告全文共9页,当前为第1页。 逆向工程实验报告全文共9页,当前为第1页。 课程题目:利用OllyDbg逆向工具学习高级语言的输入输出与底层的对应关系 逆向工程实验报告全文共9页,当前为第2页。逆向工程实验报告全文共9页,当前为第2页。实验背景 逆向工程实验报告全文共9页,当前为第2页。 逆向工程实验报告全文共9页,当前为第2页。 软件逆向工程是在1990年发展起来的,现在已经有一些会议和计算机用户组的专题会议主题。软件逆向工程是分析目标系统,认定系统的组件及其交互关系,并且通过高层抽象或其他的形式来展现目标系统的过程。逆向工程 是了解软件"所作所为"的一套最重要的技术和工具。正式地讲,逆向工程是"通过分析目标系统以识别系统的组件以及这些组件之间的相互关系并创建该系统另一种形式的表或更高级的抽象过程"。从工程实际的角度来看,大体上可以将软件逆向工程分为两大类:(1)从已知软件系统的完整代码出发,生成对应系统的 结构以及相关设计原理和算法思想的文档。(2)从没有源代码的程序出发,生成对应的源程序、系统结构以及相关设计原理和算法思想的文档等。逆向工程在软件分析中的作用主要分为以下六个部分:(1)查找恶意代码,许多病毒和恶意代码 的 探测技术使用逆向工程来理解那些令人憎恶的代码是怎样构成和运作的。通过逆向找出可用作特征码 的可识别模式用于驱动商业探测器和代码扫描器。(2)发现意想不到的缺陷和错误,即使是设计最完美的系统也可能存在漏洞,这是由于我们使用的"前向工程"开发技术所固有的特点导致的。逆向工程可以帮助我们在发生致命的软件失效前识别缺陷和错误。(3)查找是否使用了其他人所写的代码,搞清楚在应用程序的哪里使用了受保护的代码和技术,这对于保护知识产权不被滥用是很重要的。逆向工程技术可用于检测应用程序是否包含所关心的软件单元。(4)寻找对共享软件和开放源码的使用(在不该使用的地方),与侵犯代码版权相反的是,如果一个产品以 安全 和 专用 为目的,是否有可公开获取的代码可能是大家关心的问题。逆向工程能够用于检测代码复制问题。(5)从其他(不同领域或用途)产品中学习,逆向工程技术使我们能够学习先进的软件方法,还允许新学员研究大师的作品。这对于学习和积累不断发展的代码知识来说是非常有用的。许多网站是通过参考其他网站的做法来建立的。许多网页开发人员是通过阅读其他网站的源代码学习HTML和网页编程技术的。(6)发现原开发人员以前没有意思到的特性或机遇,(6)发现原开发人员以前没有意思到的特性或机遇 逆向工程实验报告全文共9页,当前为第3页。逆向工程实验报告全文共9页,当前为第3页。 逆向工程实验报告全文共9页,当前为第3页。 逆向工程实验报告全文共9页,当前为第3页。 实验环境介绍 Windows平台、OLLYDBG逆向软件、测试程序、c-free5.0。 实验工具介绍 在现代操作系统中,可以将调试器粗略地分为两种不同的风格:用户模式调试器 和 内核模式调试器。用户模式调试器是一种普通的应用程序,它将自己加在另一个进程(即被调试程序)之上,并可以完全控制该进程。本实验使用的用户模式调试器是OLLYDBG,对于逆向工作人员而言,由Oleh Yuschuk编写的OLLYDBG可能是最佳的用户模式调试器(尽管选择的余地非常小)。OLLYDBG的诱人之处在于:它一开始就是作为逆向工具而设计的,因此它具有强大的内置的反汇编器。OLLYDBG的代码分析器可以识别出循环、switch控制块以及其它主要的代码结构。它能显示所有已知函数和API的参数名,支持在代码和数据之间查找交叉引用——代码到数据或数据到代码。OLLYDBG是调试器中(除了IDA Pro调试器)反汇编能力最强的一款,连内核模式都比不上。除了具有强大的反汇编能力外,OLLYDBG还提供了大量不同的视图,包括列出模块中的导入和导出、显示被调试者拥有的窗口和其它对象的列表、显示当前的异常句柄链以及对那些在库中正确命名的函数使用导入库(.lib文件)等等。OLLYDBG的典型界面如图3.1。 逆向工程实验报告全文共9页,当前为第4页。逆向工程实验报告全文共9页,当前为第4页。 逆向工程实验报告全文共9页,当前为第4页。 逆向工程实验报告全文共9页,当前为第4页。 图3.1 OLLYDBG的典型界面 相应知识点介绍 通过测试键盘中的输入,屏幕的屏幕输出学习VC/VS 中的各种常用的输入与输出函数在底层是如何实现的;然后破解"lianxi.exe"这个小程序。输入方式很多并且高级语言也有很多种。C语言 输入函数有很多,常用的输入函数有:Scanf,getchar,getch 和 getche。如语法:sca
高尔顿实验,也称为鸟嘴瓶实验,是一种物理实验,用于观察和理解流体的动力学特性。该实验以19世纪英国科学家约翰·高尔顿命名,他首次进行了这项实验。 在这个实验中,一个由玻璃制成的像鸟嘴形状的管道被垂直放置,底部开口较小,而顶部开口较大。实验开始时,将一定量的液体(如水)倒入管道内,然后观察液体从顶部流出的情况。 实验结果显示,当液体从较小的底部开口出流时,液体流速会逐渐增加。而流速的增加并不是线性的,而是呈现出一种周期性的增加和减小。这种周期性流动被称为高尔顿振荡。 高尔顿振荡的产生是由于流体在被约束的管道内流动时,速度和压力之间的相互变化导致的。当液体从底部开口流出时,产生的速度和压力变化会逆向作用于液体流动的方向,从而减缓液体的流动速度。而当液体流动达到一定速度时,液体的运动力会抵消这种减缓效应,导致流速再次增加,从而形成周期性振荡。 高尔顿实验不仅仅是为了理解流体动力学特性,它还可以应用于其他领域。例如,在气象学中,使用高尔顿实验来研究大气环流模式;在化学工程中,使用高尔顿实验来研究反应器的流体动力学行为等。 总而言之,高尔顿实验是一种用于观察和研究流体动力学特性的实验方法。通过该实验可以深入了解流体的流动规律,并将其应用于不同领域的研究和应用中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值