UPX脱壳逐一跟踪分析
写在前面
之前看到的UPX脱壳文章都只是教了方法,对UPX的原理少有提及。看了《逆核》的UPX脱壳一章后,俺尝试把UPX脱壳与PE文件结构的知识结合起来整理了一些(也可联系压缩器Paker的知识)。
分析样本来自BUUCTF:Reverse题目“新年快乐”(本文将寻找样本的OEP)
OD跟踪命令
可能会用到的几个跟踪命令:
命令 | 快捷键 | 作用 |
---|---|---|
Animate Into | Ctrl+F7 | 反复执行Step Into命令(画面显示) |
Animate Over | Ctrl+F8 | 反复执行Step Over命令(画面显示) |
Trace Into | Ctrl+F11 | 反复执行Step Into命令(画面不显示) |
Trace Over | Ctrl+F12 | 反复执行Step Over命令(画面不显示) |
停止跟踪 | F7 |
Animate:执行时画面会跟着光标移动一直显示;
Trace:会在事先设置好的跟踪条件处停下,并生成日志文件。
跟踪命令适合用在大型代码,一好处是容易发现短循环。
我分析时只是使用了F8/F7/F4。
先结合PE知识分析
一般情况下,分析压缩后的UPX壳,可以看到第一个节区的名称为UPX0,SizeOfRawData
=0,而VirtualSize
=1000h(大于0),第二个节区UPX1,它的PointerToRawData
和第一个节区的相同。也就是说,第一个节区在文件中是不占用空间的,只有运行时才分配大小。
其实,第二个节区含有解压代码和将被解压的代码(压缩前的代码),在加载过程中,第二个节区的解压代码运行,将被解压代码解压到第一个节区。最后到达EP执行代码。
分析“新年快乐.exe”
-
打开:
-
根据上文,下面会先执行解压代码,这个代码在UPX1节区,在此节区设置内存访问断点。
-
F9几次,就能在UPX1看到经