数据压缩

数据压缩(Data Compression)是计算机工程的主要研究内容,经过数十年发展已经有了深入研究,今后还会不断出现更多、更好的算法。
不论哪种形态的文件(数据)都是由二进制(0或1)组成的,只要使用合适的压缩算法,就能缩减其大小。经过压缩的文件若能100%恢复,则称该压缩为“无损压缩”(Lossless Data Compression);若不能恢复原状,则称该压缩为“有损压缩”(Loss Data Compression)。

无损压缩

无损压缩用来缩减文件(数据)的大小,压缩后的文件更易保存、移动。使用经过压缩的文件之前,需先对文件解压缩(此过程中应该保证数据完整性)。最具代表性的无损压缩算法有Run-Length、Lempel-Ziv、Huffman等,此外还有许多其他压缩算法,都是上面3种压缩算法的基础上改造而成。

有损压缩

相反,有损压缩允许压缩文件(数据)时损失一定信息,以此换取高压缩率。经过有损压缩后,虽然压缩文件与原文件(从数据层面上)存在差异,但重要的是人们几乎区分不出这种微小的差别。以MP3文件为例,mp3的核心算法通过删除超越人类听觉范围的波长区段来缩减(不需要的)数据大小。

运行时压缩器

运行时压缩器是针对可执行(PE,Portable Executable)文件而言的,可执行文件内部好友解压缩代码,文件在运行瞬间于内存中解压缩后执行。
运行时压缩文件也是PE文件,内部含有原PE文件与解码程序。在程序的EP代码中执行解码程序,同时在内存中解压缩后执行。
J9V47`6~_21C48HR{TNB72K.png
与普通压缩器相比,运行时压缩器的一个明显不同是“PE文件的可执行性”。把普通PE文件创建成运行时压缩文件的实用程序称为“压缩器”(Packer),经反逆向(Anti-Reversing)技术特别处理的压缩器称为保护器(Protector)。

压缩器

PE压缩器是指可执行文件的压缩器,称为“运行时压缩器”,它是PE文件的专用压缩器。
#1、使用目的
缩减PE文件的大小:文件尺寸小是其突出的优点之一,更便于网络传输与保存。
隐藏PE文件内部代码与资源:使用压缩器的另一个原因在于,它可以隐藏PE文件内的代码及资源(字符串、API名称字符串)等。压缩后的数据以难以辨识的二进制文件保存,从文件本身来看,这能有效隐藏内部代码与资源(解压缩后可以通过内存的Dump窗口查看)。
#2、使用现状
现在的PC速度已经变得非常快,用户不能明显察觉运行时压缩文件与源文件在执行时间上的差别。因此,现在的使用程序、“打补丁”文件、普通程序等都广泛应用运行时压缩。