15.调试UPX压缩的notepad程序

Pasted image 20250321123820

1. 原程序的EP代码

Pasted image 20250319214032
010073B2 地址处调用了 GetModuleHandleA API,获取 notepad.exe 程序的 ImageBase。然后在 010073B4010073C0 地址处比较MZ与PE签名。希望各位熟记原 notepad.exe 的EP代码。

2. UPX压缩后的EP代码

打开会提示被压缩了。不用管 继续打开即可
然后我们可以得到 UPX EP 代码
Pasted image 20250319214426
EP地址是 01015330 这里就是第二个节区的末端部分。实际压缩的 notepad 源代码存在于EP地址的上方

查看代码开始的地方
Pasted image 20250319214614
首先使用 PUSHAD 命令把所有通用寄存器 EAX-EDI 寄存器的值保存到栈,然后分别把第二个节区的起始地址 0x1011000 与第一个节区的起始地址(0x1001000)设置到ESI EDI寄存器。UPX文件的第一个节区仅存在于内存。该处即是解压缩后保存源文件代码的地方

调试时像这样同时设置ESI与EDI,就能预见从ESI所指缓冲区到EDI所指缓冲区的内存发生了复制。此时从Source(ESI)读取数据,解压缩后保存到Destination(EDI)。我们的目标是跟踪上图中的全部UPXEP代码,并最终找到原notepad的EP代码

Tip
  • 代码逆向分析称源文件的EP为OEP。
  • “跟踪”一词的含义是通过逐一分析代码进行追踪。
  • ·实际的代码逆向分析中并不会逐一跟踪执行压缩代码,常使用自动化脚本、特殊技巧等找到OEP。但是对于初次学习运行时压缩文件的朋友而言,逐一跟踪代码才是正确的学习方法。

3. 跟踪UPX文件