[读书][笔记]WINDOWS PE权威指南《一》PE的原理和基础 之 第一章 环境搭建及简单破解

简介: WINDOWS PE权威指南《一》PE的原理和基础 之 第一章 环境搭建及简单破解

文章目录



   前言

       前期准备

   1.1 开发语言MASM32

       1.1.1 设置开发环境

           下载安装masm

           环境变量配置

           测试是否配置成功

       1.1.2 开发第一个源程序HelloWorld.asm

           配置

           代码

       1.1.3 运行HelloWorld.exe

           vs版本运行

           masm32运行

               1.进入工作区

               2.编译源文件

               3.链接目标文件与动态链接库

               4.运行

   1.2 调试工具OllyDBG

       1.2.1 调试helloworld.exe

           1.认识OD组成

               指令解释区

               寄存器运行状态区

               代码和数据字节码区

               栈区

       1.2.2 Helloworld.exe的跟踪执行

           常用快捷键

           超级文字查找 插件使用

           调试

       1.2.2 修改Exe文件字节码

       1.2.3 静态分析

   1.3 十六进制编辑软件FlexHex

       1.3.1 UE修改程序

   1.4 破解实例:U盘监控器

       目标

       任务

       思路

       实现步骤

           步骤1 首先运行该软件,获取与破解有关的提示信息。

           步骤2 使用FlexHEX获取“注册失败!”字符串的文件偏移地址。

           步骤3 使用OD获取引用该字符串的指令在内存中的地址。

           步骤4 使用W32DASM 获取判断语句的位置。

           步骤5 使用OD更改指令字节码。

           步骤6 重新测试

   1.5 初识PE文件

       简单了解PE字节码编排

           分析结构

           PE 结构信息

   1.6 小结


前言



前期准备


开发语言:MASM V10.0


工作环境:Windows XP/Vista/8/10


源程序的编辑器:

记事本(notepad.exe)用来编写汇编源程序

Visitual Studio 2015/2017/2019也是可以的


动态调试器:OllyDBG软件


静态调试器:W32DASM


字节码的阅读器和编辑器:

FlexHex/UltraEdit(下载地址)/WinHex


1.1 开发语言MASM32



MASM32是Steve Hutchessond在微软的不同产品基础上集成开发出来的汇编开发工具包,适合Win32编程环境的汇编语言,它主要用于基于Windows平台的32位汇编语言开发,是现在最流行的 Win32汇编开发包。与VC++和VB等高级语言相比,Win32汇编具有得天独厚的优势,这些优势主要体现在:


   1.它摒弃了对系统细节的封装,更接近于系统的底层,从而使得编码更加灵活,能完成许多高级语言无法做到的事情(如代码重定位和特殊寄存器赋值等)。

   2.它生成的可执行PE文件体积小,执行速度快。

   3.它可用于软件的核心程序段设计,以提高软件的性能。

  4. 它能够直接接触系统的底层,所以使用它要远比使用VC++和VB等高级语言更适合开发与系统安全相关的程序。比如,与计算机硬件密切相关的驱动程序的开发、计算机病毒的分析与防治、软件加密与解密、软件调试、Windows PE研究等。


因此,学习Win32汇编对学习信息安全而言很有必要。MASM32是我们研究Windows PE的首选语言。

MASM32是一个免费的软件包,该软件包中包含了汇编编译器ml.exe、资源编译器rc.exe、32位的链接器link.exe和一个简单的集成开发环境( Intergrated DevelopmentEnvironment,IDE)QEditor.exe。为什么说MASM32是从其他产品集成出来的呢?这是因为软件包中的ml.exe来自Microsoft 的MASM软件包,rc.exe和 link.exe则来自Microsoft的Visual Studio。MASM32软件包还包括了详尽的头文件、导入库文件、例子文件、帮助文档和一些工具程序,如 lib.exe和dumpbin.exe等,后者被大家公认为最好的显示PE文件结构的工具。大家可以从网站 http://www.masm32.com/

上获得MASM32 SDK的最新版本,并可以在论坛里与来自世界各地的汇编爱好者交流技术和思想。


1.1.1 设置开发环境


   可以选用vs作为开发工具

   可详见我的博客[笔记]vs2015 编写汇编masm32 Helloworld

   或者其他相关文章


下载安装masm


环境变量配置


include=masm32/include/;

lib=masm32/lib/;

path=masm32/bin/;


测试是否配置成功


运行cmd.exe->运行ml命令

图片.png


图片.png

1.1.2 开发第一个源程序HelloWorld.asm


配置


配置lib

图片.png

配置include

图片.png

图片.png

代码

.386
;CPU mode
.model flat ,stdcall
option casemap : none
include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kerne132.lib
;数据段
.data
szText db 'Helloworld',0
;代码段
.code
main :
  invoke MessageBox,NULL,offset szText ,NULL,MB_OK
  invoke ExitProcess,NULL
end main

1~6行是程序的注释;

7~10行定义了该汇编程序支持的基本特性;

11~16行引入了外部的动态链接库,在这些动态链接库里有程序需要的函数调用,这种调用方式符合程序代码重用的原则;

17~19行定义了这个程序中用到的数据;

20~25行则是程序的代码段,25行的伪指令“end start”告诉操作系统代码入口﹔最有用的代码行只有23行和24行,分别调用了user32.dll 动态链接库中的MessageBoxA函数和kernel32.dll动态链接库中的ExitProcess函数。


1.1.3 运行HelloWorld.exe


vs版本运行


run一下vs就成功显示

图片.png


masm32运行


1.进入工作区


2.编译源文件

在当前工作区中输入命令

ml -c -coff Helloworld.asm

然后回车。

参数-c表示独立编译,不进行链接;

参数-coff表示编译后生成标准的COFF目标文件。

编译以后会在源文件所在目录生成一个与源文件同名的obj目标文件。

ml.exe是汇编语言的编译程序,它负责将汇编源程序编译成目标文件。该程序可接受的各参数的解释和描述如下所示:


3.链接目标文件与动态链接库


链接是为了将源文件中调用到的动态链接库中的函数的相关信息附加到可执行文件中。链接命令是:

link -subsystem:windows Helloworld.obj

参数-subsystem表示允许该代码运行的子系统。

如果没有错误,执行以上命令后会在源文件所在目录下生成最终的可执行文件HelloWorld.exe。链接程序的参数解释如下:

图片.png

图片.png

4.运行

Helloworld.exe


1.2 调试工具OllyDBG



大家可能对OllyDBG(简称OD)并不是很熟悉,但在软件破解领域,它却是与TRW2000和SoftICE等齐名的跟踪破解利器。熟练掌握OD的用法对我们以后研究EXE文件内部指令跳转、病毒分析、逆向工程与反病毒设计等有很大的帮助。那么,就让我们从调试HelloWorld.exe开始学习吧。


OllyDBG 2.01版本 下载地址

OllyDBG官网下载地址

OllyDBG 吾爱破解版 自带插件会比较方便


   注意:下载需要关闭Windows实时保护


1.2.1 调试helloworld.exe


1.认识OD组成


OD工作区:

  1. 指令及指令解释区

  2. 寄存器及运行状态区

   3.代码和数据字节码区

   4.栈区

图片.png

指令解释区


指令及指令解释区(以下称①区)该区域位于整个界面的左上角,共包含四列。分别为


   指令所在的内存地址、

   指令字节码、

   反汇编后的指令语句,

   以及指令相关的注释。


OD的强大之处在于,它将许多难懂的指令字节码反解释成了汇编指令,并附以形象的说明。

例如,在内存地址0x0040101E处的指令字节码FF25 00204000,其对应的汇编指令是一个远跳转指令:

JMP DWORD PTR DS : [<&kernel32.ExitProcess>]


而该位置处的数据则是一个内存地址。该地址指向了kernel32.dll动态链接库中函数ExitProcess的起始位置。


寄存器运行状态区


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


   ebp(栈基地址指针)

   esp(栈顶指针)

   eip(指向下一条要执行的指令的位置)

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


代码和数据字节码区


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


栈区


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


1.2.2 Helloworld.exe的跟踪执行


跟踪一个程序的执行不仅可以帮助我们判断程序是否在按照自己预先设计的思路运行,还可以使我们了解某个时刻计算机的寄存器、栈、全局变量、内存等的状态,便于我们理解和更好地把握程序运行过程,优化程序设计,提高编程水平。


常用快捷键


F3:加断点

F7:单步步入

F8:单步步过

F9:运行

Ctrl+F2:重新运行


超级文字查找 插件使用


指令解释区右键->Search for->All reference Text String找到Helloworld位置打断点


调试


   找到Helloworld F2打断点

   (1) Call F7进入MessageBox

   (2)Call F7 进入ExitProcess

  图片.png


1.2.2 修改Exe文件字节码


   OD不仅可以让我们对EXE文件进行反汇编和单步执行调试,还可以对目标EXE文件进行修改,后面的许多章节都会涉及这一操作。下面我们对HelloWorld.exe文件中的部分字节码进行更改,将显示信息“HelloWorld”更改为“HelloWorld-modified by OD”。这种修改要成功,要求更改后的字符串长度不能超出EXE中数据段的范围。幸运的是,由于链接器在进行链接时是以200h字节对齐段长度,即数据段的长度要大于等于200h字节,所以这次修改一定可以成功。


   1.在字节码区选中要修改的内容,右键,选择Binary->Edit

 图片.png

图片.png


  2. 重写写入内容

 图片.png


 3.  运行修改

   OK->F9放开断点

图片.png

   注意

   1.要选中足够的大小的内容 大小少了是无法增加的

   2.注意内容中的’.‘需要替换成空格 不然就提前\0结束字符串显示内容了

   就变成Helloworld\0by OD 显示不全


4. 保存修改

图片.png图片.png

图片.png


1.2.3 静态分析


如果说OD是一个擅长动态分析的软件,那么W32DASM则是一个擅长静态分析的软件。后者可以标识整个EXE文件中指令间的调用关系,对于跟踪和识别指令之间的承前启后的关系有很大的帮助,该软件在随书文件中可以找到。


这里可以选用IDA Pro(下载地址)


   静态分析最大的好处是:能从当前指令反查调用此处的指令所在。例如,地址0x00401018处的指令是谁调用了呢(加粗部分)﹖请分析如下代码行:


   提示﹐由于静态分析和动态分析均正确地模拟了Windows 操作系统的进程装载机制,所以二者的指令地址是一致的。


1.3 十六进制编辑软件FlexHex



UltraEdit(下载地址)

WinHex

我用的是UltraEdit


1.3.1 UE修改程序


   UE打开Helloworld.exe

   ctrl+H 16进制查看

   ctrl+F 搜索0x48即’H’

   在这里插入图片描述

   找到Helloworld 然后修改 为Helloworld By UE


1.4 破解实例:U盘监控器



通过一个简单的破解软件的实例,进一步展示以上软件的使用方法。


目标


U盘监控器。该软件可以从互联网上获得,也可以从本书的随书文件中找到。


任务


该软件需要注册才能使用全部功能,我们的任务是使得输入任何注册码均能注册成功。


思路


通常在注册时,程序会读取注册码,然后对注册码进行判断:正确则显示注册成功,转到正常的程序运行状态;错误则显示注册失败,转到未注册运行状态。如果我们将判断转移条件更改一下,错误则转到正常的运行状态,反之则转到未注册的运行状态。这样,如果我们输入了错误的注册号,程序也会像输入了正确的注册号一样运行,流程如图1-18所示。

图片.png


实现步骤


步骤1 首先运行该软件,获取与破解有关的提示信息。


打开软件,进行注册。随便输入注册码,单击注册以后,系统出现一个对话框提示“注册失败!”,如图1-19所示。这个字符串就是我们要获取的与破解有关的提示信息

图片.png


   注意:这个USB监控程序 在书附源码文件中,可以私信找我要


步骤2 使用FlexHEX获取“注册失败!”字符串的文件偏移地址。

步骤3 使用OD获取引用该字符串的指令在内存中的地址。

步骤4 使用W32DASM 获取判断语句的位置。

步骤5 使用OD更改指令字节码。

步骤6 重新测试


1.5 初识PE文件



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

可执行文件的格式是操作系统工作方式的真实写照。Windows操作系统中可执行程序有好多种,

比如 COM、PIF、SCR、EXE 等,这些文件的格式大部分都继承自PE。其中:


   EXE是最常见的PE文件,

   动态链接库(大部分以dll为扩展名的文件)也是PE文件。


本书只涉及这两种类型的PE文件。


简单了解PE字节码编排


分析结构


我们首先以HelloWorld.exe为例,简单地了解一下PE格式文件的字节码编排。如果你手头没有合适的软件,还想获取像FlexHEX那样的十六进制格式字节码内容,可以使用以下步骤。


   步骤1 生成1.txt

   步骤2 将HelloWorld.exe更改为123。注意,不要加扩展名。

   步骤3 在命令提示符下运行以下命令:

Debug 123<1.txt>2.txt


这样,就可以生成规则排列的十六进制字节码并存储在文件2.txt中,如代码清单1-2所示。是不是和FlexHEX显示的结果差不多呢?

(卡在Debug命令了,这一步骤实现,有点没搞懂)


   解决Debug命令没找到问题 参考在windows10 64位系统上使用debug命令


   思路:


       先用DOSBOX挂载c盘

       再使用debug.exe (debug.exe是16位的,默认无法在64位机器运行)


PE 结构信息


PE以200H大小对齐的

图片.png


1.6 小结



本章 主要实现:

   环境安装

   简单PE程序修改

   简单认识PE

相关文章
|
7天前
|
编解码 Windows
FFmpeg开发笔记(二十九)Windows环境给FFmpeg集成libxvid
XviD是开源MPEG-4视频编码器,与DivX相似但后者非开源。早期MP4常使用XviD或DivX编码,现已被H.264取代。在Windows上集成FFmpeg的XviD编解码库libxvid,需访问<https://labs.xvid.com/source/>下载源码,解压后在MSYS环境中配置、编译和安装。之后重新配置FFmpeg,启用libxvid并编译安装。详细步骤包括configure命令、make和make install。成功后,通过`ffmpeg -version`检查是否启用libxvid。更多音视频开发技术可参考《FFmpeg开发实战:从零基础到短视频上线》。
36 0
FFmpeg开发笔记(二十九)Windows环境给FFmpeg集成libxvid
|
1月前
|
算法 Linux Windows
FFmpeg开发笔记(十七)Windows环境给FFmpeg集成字幕库libass
在Windows环境下为FFmpeg集成字幕渲染库libass涉及多个步骤,包括安装freetype、libxml2、gperf、fontconfig、fribidi、harfbuzz和libass。每个库的安装都需要下载源码、配置、编译和安装,并更新PKG_CONFIG_PATH环境变量。最后,重新配置并编译FFmpeg以启用libass及相关依赖。完成上述步骤后,通过`ffmpeg -version`确认libass已成功集成。
46 1
FFmpeg开发笔记(十七)Windows环境给FFmpeg集成字幕库libass
|
28天前
|
编解码 5G Linux
FFmpeg开发笔记(二十一)Windows环境给FFmpeg集成AVS3解码器
AVS3是中国首个8K及5G视频编码标准,相比AVS2和HEVC性能提升约30%。解码器libuavs3d支持8K/60P视频实时解码,兼容多种平台。《FFmpeg开发实战》书中介绍了在Windows环境下如何集成libuavs3d到FFmpeg。集成步骤包括下载源码、使用Visual Studio 2022编译、调整配置、安装库文件和头文件,以及重新配置和编译FFmpeg以启用libuavs3d。
41 0
FFmpeg开发笔记(二十一)Windows环境给FFmpeg集成AVS3解码器
|
10天前
|
Java 大数据 Scala
Scala快速入门--Scala环境搭建【Windows10】图解
Scala快速入门--Scala环境搭建【Windows10】图解
13 0
|
1月前
|
编解码 Linux Windows
FFmpeg开发笔记(十一)Windows环境给FFmpeg集成vorbis和amr
在Windows环境下,为FFmpeg集成音频编解码库,包括libogg、libvorbis和opencore-amr,涉及下载源码、配置、编译和安装步骤。首先,安装libogg,通过配置、make和make install命令完成,并更新PKG_CONFIG_PATH。接着,安装libvorbis,同样配置、编译和安装,并修改pkgconfig文件。之后,安装opencore-amr。最后,重新配置并编译FFmpeg,启用ogg和amr支持,通过ffmpeg -version检查是否成功。整个过程需确保环境变量设置正确,并根据路径添加相应库。
47 1
FFmpeg开发笔记(十一)Windows环境给FFmpeg集成vorbis和amr
|
1月前
|
编解码 Linux Windows
FFmpeg开发笔记(十三)Windows环境给FFmpeg集成libopus和libvpx
本文档介绍了在Windows环境下如何为FFmpeg集成libopus和libvpx库。首先,详细阐述了安装libopus的步骤,包括下载源码、配置、编译和安装,并更新环境变量。接着,同样详细说明了libvpx的安装过程,注意需启用--enable-pic选项以避免编译错误。最后,介绍了重新配置并编译FFmpeg以启用这两个库,通过`ffmpeg -version`检查是否成功集成。整个过程参照了《FFmpeg开发实战:从零基础到短视频上线》一书的相关章节。
64 0
FFmpeg开发笔记(十三)Windows环境给FFmpeg集成libopus和libvpx
|
1月前
|
Rust 前端开发 Windows
blog-engine-06-pelican 静态网站生成 windows11 安装实战笔记
这篇内容是一个关于在Windows 11上安装和使用静态网站生成器的教程,主要包括对多个博客引擎(如Jekyll、Hugo、Hexo等)的简介和对比,以及详细步骤教你如何在Windows环境下安装Python、Pelican、Rust和Cargo。作者首先介绍了Python和Pelican的安装,然后在遇到依赖问题时,引导读者安装Rust和Cargo来解决。最后,通过`pelican-quickstart`创建项目,编写Markdown文章并生成、预览站点。
|
数据安全/隐私保护 Windows
Windows 08R2_破解管理员密码
目录 目录 破解Windows 08R2管理员密码 破解Windows 08R2管理员密码 将登录界面的功能链接变成cmd.exe的链接,通过CMD进入到目录C:\Windows\System32下,再使用net user指令来修改账号和密码。
918 0
|
12天前
|
编解码 安全 网络安全
RealVNC的 VNC server在windows7系统下无法正确运行
在Windows 7上运行旧版VNC Server(如4.1.2)可能存在兼容性问题,但可通过调整配置解决。步骤包括:安装VNC Server,设置兼容性模式(选择Windows XP SP3),启动VNC Server,配置VNC连接参数。若遇到问题,检查防火墙设置,确保系统更新,并考虑升级到新版VNC Server以提高性能和兼容性。
|
25天前
|
开发框架 .NET API
在Windows Server 2008 R2上运行.Net 8应用
在Windows Server 2008 R2上成功运行.Net 8程序,需安装三个补丁:Windows Server 2008 R2 SP1 (KB976932)是基础更新;VC_redist.x64提供MSVC库支持;KB3063858解决.NET运行时加载`kernel.dll`的路径问题。KB3063858可能需要KB2533623。详细信息和下载链接在文中给出。