Windows PE开发环境

1、PE可执行文件分析

1.1开发一个源程序 HelloWorld .asm,显示hello world。
    .386
    .model flat,stdcall
    option casemap:none
    
include    windows.inc
include    user32.inc
includelib user32.lib
include    kernel32.inc
includelib kernel32.lib
//数据段
 .data
szText     db  'HelloWorld',0
//代码段
 .code
start:
 invoke MessageBox,NULL,offset szText,NULL,MB_OK
 invoke ExitProcess,NULL
 end start

在命令提示符下输入HelloWord,查看结果。
在这里插入图片描述

2、调试软件OllyDBG

2.1、利用OD软件调试PE文件。

问题2.1:从OD反汇编的结果分析,invoke MessageBox,NULL,offset szText,NULL,MB_OK分解成哪几个指令?

push 0
push 0
push hellwor.00403000
push 0
call<JMP.&user32.MessageBoxA>

问题2.2:怎么理解E8 08000000?

使用E8调用Call指令
E8后跟着的是偏移地址,08000000应为高位先读,则应读为0000 0008
Call指令把它下一条指令压栈,00401010+00000008=00401018,随即转到地址00401018执行

问题2.3:F7单步步入和F8单步步过 有什么不同?

单步步入与单步不过的不同在于,单步步入在遇到子程序时,会跳转到子程序内部执行,而单步步过遇到子程序则将该调用当成一条指令执行,并不进入子程序内部。

2.2、修改EXE文件字节码

将messagebox的 HelloWorld 修改成 GoodNight,显示结果。
在这里插入图片描述

问题2.4:修改是从文件偏移的什么地方开始的(FOA和VA、RVA分别的多少)?

FOA的800偏移
VA的2000偏移
RVA的400偏移

3、调试软件W32DASM

利用W32DASM查看HelloWorld.EXE的输出。
问题3.1:该函数用到哪几个DLL,分别用到哪几个函数?

使用到user32.dll和kernel32.dll,用到了0个函数。

4、FlexHex 或 Winhex

熟悉十六进制编辑软件的使用。
问题4.1:如何初步判断一个文件是PE文件?

使用Winhex工具
从文件头4D 5A(MZ)开始,跳转3C(即偏移3C)
跳转后可读取到数据为0000 00B0
再跳转到地址0000 00B0
若该地址数据为50 45(即PE)就为PE文件。

5、利用PEditor查看Hellworld,读出其ImageBase的值,并画出节表。

问题5.1:画出节表。
ImageBase=0x00400000
在这里插入图片描述

6、破解实例:U盘监控器

U 盘监控器需要注册才能使用全部功能,我们的任务是使得输入任何注册码均能注册成功 。通常在注册时,程序会读取注册码,然后对注册码进行判 断: 正确则显示注册成功,转到正常的程序运行状态:错误则显示注册失败 ,转到未注册运行状态。
如果我们将判断转移条件更改一下,错误则转到正常的运行状态,反之则转到来注册的运行状态 。这样,如果我们输入了错误的注册号,程序也会像输入了正确的注册号一样运行,流程 如图所示。
在这里插入图片描述

利用OllyDBG、W32DASM、WinHex破解U盘监控器的注册流程
(1)运行USE监控器软件,发现在未知注册码的情况下注册是失败的
在这里插入图片描述
(2)使用WinHex打开USE监控器软件,找到“注册失败”字符串的文件偏移地址,偏移地址为0x81A79。
在这里插入图片描述
(注:若WinHex右侧显示的不是文字,则需要在相关设置中修改,点击选项->常规->取消选中“Display byte as text one by one”)
在这里插入图片描述

(3)使用OllyDBG获取引用该字符串的指令在内存中的地址。

内存地址=0x0400000+偏移地址=0x0400000+0x81A79=0x00481A79;
在OllyDBG中搜索0x00481A79,查找到指令所在的内存地址为0x00405D2D.

在这里插入图片描述

(4)使用W32DASM获取判断语句的位置,通过分析静态代码,可找到调用错误下信息的代码,找到位置0x00405D2D。
(5)使用OllyDBG更该指令字节码。
在这里插入图片描述

(6)再次运行USB监控器进行注册。
在这里插入图片描述

问题6.1:破解是将指令代码更改为什么?并加以说明。

将JG 00405D11中的JG修改为JL,即JL 00405D11。
JG在汇编语言里的意思是:如果大于则跳转。其相反的指令为JL,其判断条件正好相反。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值