[读书][笔记]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


相关文章
|
3月前
|
缓存 网络协议 数据安全/隐私保护
[运维笔记] - (命令).Windows server常用网络相关命令总结
[运维笔记] - (命令).Windows server常用网络相关命令总结
191 0
|
3月前
|
Web App开发 JavaScript 前端开发
从脚手架开始学前端 【第2期】Node.js环境搭建(windows)
从脚手架开始学前端 【第2期】Node.js环境搭建(windows)
40 0
|
1月前
|
Go 开发工具 Windows
【GO语言】windows下GO语言环境搭建
【2月更文挑战第1天】windows下GO语言环境搭建
|
3月前
|
存储 Ubuntu 开发工具
ffmpeg笔记(二)windows下和ubuntu-16.04下ffmpeg编译
ffmpeg笔记(二)windows下和ubuntu-16.04下ffmpeg编译
|
4月前
|
Linux API C++
音视频windows安装ffmpeg6.0并使用vs调试源码笔记
音视频windows安装ffmpeg6.0并使用vs调试源码笔记
117 0
|
4月前
|
Java Linux Go
Golang环境搭建指南(Windows和linux)
Golang环境搭建指南(Windows和linux)
39 0
|
4月前
|
编译器 C++ Windows
9.4 Windows驱动开发:内核PE结构VA与FOA转换
本章将继续探索内核中解析PE文件的相关内容,PE文件中FOA与VA,RVA之间的转换也是很重要的,所谓的FOA是文件中的地址,VA则是内存装入后的虚拟地址,RVA是内存基址与当前地址的相对偏移,本章还是需要用到`《内核解析PE结构导出表》`中所封装的`KernelMapFile()`映射函数,在映射后对其PE格式进行相应的解析,并实现转换函数。
40 0
9.4 Windows驱动开发:内核PE结构VA与FOA转换
|
4月前
|
C语言 Windows
9.3 Windows驱动开发:内核解析PE结构节表
在笔者上一篇文章`《内核解析PE结构导出表》`介绍了如何解析内存导出表结构,本章将继续延申实现解析PE结构的PE头,PE节表等数据,总体而言内核中解析PE结构与应用层没什么不同,在上一篇文章中`LyShark`封装实现了`KernelMapFile()`内存映射函数,在之后的章节中这个函数会被多次用到,为了减少代码冗余,后期文章只列出重要部分,读者可以自行去前面的文章中寻找特定的片段。
26 0
9.3 Windows驱动开发:内核解析PE结构节表
|
1月前
|
安全 数据安全/隐私保护 Windows
解锁安全之门,Windows Server 2019密码修改攻略大揭秘
解锁安全之门,Windows Server 2019密码修改攻略大揭秘
|
1月前
|
存储 安全 网络安全
铁壁如墙-WINDOWS SERVER 2019勒索病毒终极防御指南
铁壁如墙-WINDOWS SERVER 2019勒索病毒终极防御指南