一. 比较notepad.exe与notepad_upx.exe的EP代码
notepad.exe:
程序的EOP在0100739D处,在010073B2处调用函数getModuleHandleA()API,获取notepad.exe的Imagebase。然后在010073B4和010073C0处比较MZ和PE签名,这部分的EP代码很重要,后面分析notepad_upx.exe时会进行比较,也方便找到真正的程序的OEP。
notepad_upx.exe:
在地址01015330处是压缩之后的第二节部分,PUSHAD命令将EAX~EDI寄存器的值保存到栈中,然后分别把第二个节区的起始地址(01011000)与第一个节区的起始地址(01001000)设置到ESI与EDI寄存器中。
在地址01015330处上方的代码是notepad.exe的源代码;
UPX文件第一节区仅存在于内存,该处即是解压后保存源文件代码的地方
调试时像这样同时设置ESI和EDI,就能预见从ESI(Source)所指的缓冲区到EDI(Destination)所指的缓冲区的内存发生了复制。