第14,15章:Runtime-Packer —— UPX

对UPX压缩的Notepad.exe程序进行分析.

 

如图分析,第一个节区UPX0,可以看出,VirtualSize的值为10000H,而SizeOfRawData0.

第一个节区内目前是没有任何数据的,但是虚拟地址的大小却为10000H,可以推测,它后面会放入数据---即解压后的数据.

跟踪程序执行的流程,可以发现其一直在一个大循环中.

 

程序首先获取到第二节区的首地址,然后逐渐将数据填入到第一节区,如果没有理解错的话,此压缩算法是:

将重复的信息的位置存储起来,并且将没有重复的单独的信息和他们放在一起,构成了密文.

解密时先将前面的一部分信息释放出来,然后循环释放即可.

继续跟踪,在执行完循环后,会循环的访问INT,并且载入函数:

 

 

有意思的是ordinal值全为1.并且GetProcAddress()也确实用的是函数名称作为参数.

执行完循环之后:

 

前面的pushad和这里的popad相对应:

 

 

然后就到了正常的程序中:

 

和正常的notepad.exe程序对比,是一样的:

 

posted @ 2020-07-01 15:57  Rev_omi  阅读(137)  评论(0编辑  收藏  举报