基础篇
第一章 PE学习环境搭建
在正式学习PE之前,先给大家介绍一下学习WindowsPE所需的开发环境和相关工具软件的使用方法。
本章学习知识概要:
源码编译工具
静态分析工具
动态分析工具
本书提供的示例代码有两种,一种是32位汇编语言代码,另一种是32位C语言代码。因此,需要使用汇编语言和C语言两种不同的编译工具。接下来我们将介绍汇编和C语言两种编译环境的搭建。有兴趣的读者可以将两种代码互译。
本节必须掌握的知识点:
汇编语言开发环境
C语言开发环境
1.1.1 汇编语言开发环境
■MASM32介绍
MASM32是Steve Hutchessond在微软的不同产品基础上集成开发出来的汇编开发工具包,适合Win32编程环境的汇编语言,主要用于基于Windows平台的32位汇编语言开发, 是现在最流行的Win32汇编开发包。与VC++和VB等高级语言相比,Win32汇编具有得天独厚的优势,这些优势主要体现在:
(1)摒弃了对系统细节的封装,更接近于系统的底层,从而使得编码更加灵活,能完成许多髙级语言无法做到的事情(如代码重定位和特殊寄存器赋值等)。
(2)生成的可执行PE文件体积小,执行速度快。
(3)可用于软件的核心程序段设计,以提高软件的性能。
(4)能够直接接触系统的底层,所以使用它要远比使用VC++和VB等高级语言更适合开发与系统安全相关的程序。比如,与计算机硬件密切相关的驱动程序的开发、计算机病毒的分析与防治、软件加密与解密、软件调试、Windows PE研究等。
MASM32是一个免费的软件包,该软件包中包含了汇编器ml.exe、资源编译器rc.exe、32位的链接器link.exe和一个简单的集成开发环境(Intergrated Development Environment, IDE) QEditor.exe。
软件包中的ml.exe来自Microsoft的MASM软件包,rc.exe和link.exe则来自Microsoft的 Visual Studio。
MASM32软件包还包括了详尽的头文件、导入库文件、例子文件、帮助文档和一些工具程序,如lib.exe和dumpbin.exe等。可以从网站http://www.masm32.com/上获得MASM32 SDK的最新版本(masm32v11r),并可以在论坛里与来自世界各地的汇编爱好者交流技术和思想。
■MASM32安装
●步骤1:运行安装程序install.exe,安装汇编环境。
首先选择安装路径,此处我们选择的路径为 D:\(软件),然后单击“Install”按钮,如图1-1和图1-2所示。此后,中间过程所有的按钮均选择默认的设置,即可完成软件安装。安装结束后,会显示IDE汇编集成环境QEditor的界面,如图1-3所示。我们也可以选择自己熟悉的文本编辑工具,建议使用Notepad++,如图1-4所示。
图1-1 MASM32安装
图1-2 安装路径
图1-3 Qeditor
图1-4 Notepad++
●步骤2:建立自己的工作区
建议选择将软件安装到非系统盘(例如D盘)。为了能存放自己编写的汇编代码。可以在D:\masm32中新建立一个文件夹source存放代码。也可以在其他目录新建一个文件夹,如图1-5所示。接下来设置汇编程序所依赖的环境,以及要调用的API函数库都在该文件夹内。
图1-5 设置工作区
●步骤3设置系统环境变量
“我的电脑”上点鼠标右键,选择“属性”,选择“高级”选项 卡,单击“环境变量”按钮,在用户的环境变量中增加以下三个环境变量,如图1-6所示:
1.include=d:\masm32\include //头文件目录
2.lib=d:\masm32\lib //lib库
3.path=d:\masm32\bin //编译工具软件
如果系统中已经存在相同名字的环境变量(如path变
量),则在该变量的值的最后加上一个分号,然后加
上上面列出的值即可。
例如,假设未设置前系统存在路径变量path,且值为:
C:\Users\16400\AppData\Local\Microsoft\WindowsApps
修改以后的值为:
d:\masm32\bin; C:\Users\16400\AppData\Local
\Microsoft\WindowsApps
特别提示:要用英文输入,且不要忘记前面的分号。
也可以建立系统环境变量的批处理文件:假设文件名为var.bat
@echo off
set include = d:\masm32\include
set lib = d:\masm32\lib
set path = d:\masm32\bin;%path%
echo on
图1-6 环境变量设置
文件中设置了3个环境变量:
1.indude变量指定头文件的搜索目录。定义了这个环境变量后,ml.exe和rc.exe在处理asm和rc文件中遇到include语句时,会自动在环境变量定义的目录中查找include 语句指定的文件,这样include语句中就不必写头文件的全路径名,如下所示:
include c : \masm32 \ include\windows . inc //不设置. include 环境变量时的写法
include windows . inc //设置include环境变量后可以这样写
这样处理的好处是以后移动了 MASM32的安装位置后不必修改每个源文件中的include语句。
如果使用Visual C++的集成环境来建立rc文件的话,为了使rc.exe能找到头件,还要把VC++安装目录下的include和MFC\include 目录包含进来,多个路径之间用“;”隔开:
set include=x:\masm32\include;VC目录\include;VC目录\MFC\include。
2.lib环境变量指定导入库文件的搜索目录。ml.exe根据这个变量寻找include lib语句指定的导入库文件,Link.exe也根据这个变量寻找库文件的位置。
3.path环境变量可以使我们不必在键入命令时带长长的路径。
■代码编辑工具软件2:使用Nodepad++,如图1-7所示。可以根据个人偏好选择自己满意的编辑工具。
实验一:使用NotePad++编写32位汇编源程序HelloWord.asm。
图1-7 Notepad++
■源代码
;FileName:HelloWorld.asm
;例1:第一个32位汇编源程序
;by:bcdaren
;2021.01.06
;=======================================
.386 ;支持386及以上CPU