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

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

1.2.1 调试helloworld.exe

1.认识OD组成

OD工作区:

  1. 指令及指令解释区
  2. 寄存器及运行状态区
  3. 代码和数据字节码区
  4. 栈区
指令解释区

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

  • 指令所在的内存地址、
  • 指令字节码、
  • 反汇编后的指令语句,
  • 以及指令相关的注释。

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位置打断点

调试

  1. 找到Helloworld F2打断点
  2. (1) Call F7进入MessageBox
  3. (2)Call F7 进入ExitProcess

1.2.2 修改Exe文件字节码

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

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


  2. 重写写入内容

  3. 运行修改
    OK->F9放开断点

注意

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

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

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

  1. 保存修改

1.2.3 静态分析

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

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

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

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

1.3 十六进制编辑软件FlexHex

UltraEdit(下载地址

WinHex

我用的是UltraEdit

1.3.1 UE修改程序

  1. UE打开Helloworld.exe
  2. ctrl+H 16进制查看
  3. ctrl+F 搜索0x48即’H’
  4. 找到Helloworld 然后修改 为Helloworld By UE

1.4 破解实例:U盘监控器

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

目标

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

任务

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

思路

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

实现步骤

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

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

注意:这个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 生成1.txt
  2. 步骤2 将HelloWorld.exe更改为123。注意,不要加扩展名。
  3. 步骤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大小对齐的

1.6 小结

本章 主要实现:

  • 环境安装
  • 简单PE程序修改
  • 简单认识PE


相关文章
|
2天前
|
Java 大数据 Scala
Scala快速入门--Scala环境搭建【Windows10】图解
Scala快速入门--Scala环境搭建【Windows10】图解
7 0
|
21天前
|
编解码 5G Linux
FFmpeg开发笔记(二十一)Windows环境给FFmpeg集成AVS3解码器
AVS3是中国首个8K及5G视频编码标准,相比AVS2和HEVC性能提升约30%。解码器libuavs3d支持8K/60P视频实时解码,兼容多种平台。《FFmpeg开发实战》书中介绍了在Windows环境下如何集成libuavs3d到FFmpeg。集成步骤包括下载源码、使用Visual Studio 2022编译、调整配置、安装库文件和头文件,以及重新配置和编译FFmpeg以启用libuavs3d。
36 0
FFmpeg开发笔记(二十一)Windows环境给FFmpeg集成AVS3解码器
|
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已成功集成。
41 1
FFmpeg开发笔记(十七)Windows环境给FFmpeg集成字幕库libass
|
1月前
|
编解码 Linux Windows
FFmpeg开发笔记(十三)Windows环境给FFmpeg集成libopus和libvpx
本文档介绍了在Windows环境下如何为FFmpeg集成libopus和libvpx库。首先,详细阐述了安装libopus的步骤,包括下载源码、配置、编译和安装,并更新环境变量。接着,同样详细说明了libvpx的安装过程,注意需启用--enable-pic选项以避免编译错误。最后,介绍了重新配置并编译FFmpeg以启用这两个库,通过`ffmpeg -version`检查是否成功集成。整个过程参照了《FFmpeg开发实战:从零基础到短视频上线》一书的相关章节。
51 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文章并生成、预览站点。
|
1月前
|
Linux Windows
Windows Server 下文件同步
Windows Server 下文件同步
28 0
|
4天前
|
编解码 安全 网络安全
RealVNC的 VNC server在windows7系统下无法正确运行
在Windows 7上运行旧版VNC Server(如4.1.2)可能存在兼容性问题,但可通过调整配置解决。步骤包括:安装VNC Server,设置兼容性模式(选择Windows XP SP3),启动VNC Server,配置VNC连接参数。若遇到问题,检查防火墙设置,确保系统更新,并考虑升级到新版VNC Server以提高性能和兼容性。
|
18天前
|
开发框架 .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。详细信息和下载链接在文中给出。
|
23天前
|
网络协议 Unix Linux
【技术分享】Server / Server Software / Unix Windows OS
Server / Server Software / Unix Windows OS
52 2