Windows PE 第一章开发环境和基本工具使用
阅读原文时间:2023年07月08日阅读:1

第一章 **Windows PE

基本工具**

1.1.1设置开发环境

这个不细说了,我在整理Intel汇编的时候详细的说了环境搭建以及细节。地址是:http://blog.csdn.net/u013761036/article/details/52186683

1.1.2 开发第一个源程序HelloWorld.

这个也不多解释,我直接写了个简单例子:

;-------------------------------------

;功能:测试OD用的Hello
World程序

;作者:Act-Code

;日期:2016.9.1

;-------------------------------------

.386

.model flat,stdcall

option casemap:none

include windows.inc

include kernel32.inc

include user32.inc

includelib user32.lib

includelib kernel32.lib

.data

szText db "HelloWorld" ,0

.code

main proc

invoke MessageBox ,NULL ,addr szText ,addr szText ,MB_OK

invoke ExitProcess ,0

main endp

end main

运行结果:

OD是破解常用软件之一,我们可以通过它来调试了解开发该程序的基本思路,调试是逆向工程必须掌握的一门技术。

下面调试上面的那个HelloWorld.exe来简单介绍下OD.

主界面(各种DIY版本比较多,我用的这个是小伙伴给的 吾爱破解上的)

一:

(1)指令及指令解释区;

该区域位于整个界面的左上角,共包含四列。分别为指令所在的内存地址、指令字节码、反汇编后的指令语句,以及指令相关的注释。OD的强大之处在于,它将许多难懂的指令字节码反解释成了汇编指令,并附以形象的说明。

(2)寄存器及运行状态区;

该区域位于整个界面的右上角,包含了所有的32位寄存器,如eax、ebx、ecx、esi、edi、esp、edp等。大家要特别关注以下几个寄存器:

ebp(栈基地址指针)

esp(栈顶指针)

eip(指向下一条指令的地址指针)

除了寄存器的值外,该区还显示所有段寄存器的值及标识的位置,如FS段,这个段在后面降到异常时会用到。

(3)代码和数据区;

该区域位于整个界面的左下角,它包含了指定内存范围的字节码,我们可以通过菜单命令随时查看当前内存中的数据。

(4)栈区;

该区域位于整个界面的右下角,它反映了当前栈的分配情况及栈在程序运行过程中的变化情况。

二:简单介绍下其他载入

F7 :单步步入

F8:单步步过

F2:下断点

F9:跳到断点

还有,看到那个00401000了吗,这个应该很熟悉,固定基址,比如如果我们是用vs2012开发c++程序,这个东西在这设置:

如果选择的是否,其他的什么也不填写,那么默认就是0x00400000,上面看到的那个0x0001000多出来的那个1000就是代码段的开始,对照下面这个结构。

汇编语言编译链接的程序的可执行代码被装入操纵系统后,代码的执行入口点被设置在进程地址空间的0x00401000处,大小为1000h;紧跟着是输入表,也占1000h字节;最后是数据段,大小为1000h。以下是exe文件被加载到内存后的部分结构:

1.2.2  修改EXE文件字节码

OD不仅可以让我们对exe文件进行反汇编和单步执行调试,还可以对目标exe文件进行修改,比我我们对上面的那个Helloworld进行修改,直接修改显示的字符串。我们可以直接在(3)右键保存exe文件,然后就会跳出来一个框,直接在上面找到helloworld进行修改,记得如果后面不是00的不要修改,可能会导致崩溃。

效果:

当然如果是光要实现这个目的,方法很多,这里只是简单介绍OD,完全可以直接二进制进行编辑,比如直接用十六进制编辑软件FlexHex进行修改等:

PE(Portable Executeable File Format,可移植的执行文本格式),使用该格式的目标是使链接生成的EXE文件能在不同的CPU工作指令下工作。

可执行文件的格式是操作系统工作方式的真是写照。Windows操作系统中可执行的程序有好多种,比如COM、PIF、SCR、EXE等,这些文件的格式大部分都继承自PE。其中exe是最常见的PE,动态链接库(大部分以DLL为扩展名的文件)也是PE文件,本书只涉及这两种类型的PE文件。

PE格式中,每一个大的部分的对齐方式就是按照200h大小对齐的。