求压缩比大,解压速度快,实现简单的压缩算法。 (200分)

  • 主题发起人 主题发起人 yygw
  • 开始时间 开始时间
Y

yygw

Unregistered / Unconfirmed
GUEST, unregistred user!
近来打算为“应用程序病毒免疫器”增加类似于Aspack、Upx的PE文件压缩功能。
寻找一种压缩算法,如标题所述,最好能提供算法和源码。
另外如果有PE文件压缩方面的资料也请帮忙。
我没有太多时间一个个去分析网上大堆的源码,希望能提供点有实质性的帮助。

yygw.51.net的主页不让下载了,如果对该问题感兴趣的朋友可到下面的地址下载:
最新版本:V0.86,打算在V0.9支持PE文件压缩。
程序:http://263.csdn.net/FileBBS/files/2001_11/T_849_1.zip
源码:http://263.csdn.net/FileBBS/files/2001_11/T_849_2.zip
 
看看ZipTV的源代码吧,各种算法都有。
 
看vclzip的源代码:
在www.51delphi.com搜索
 
可以使用GGcat大虾的 Lzw
http://delphi.mychangshu.com/
压缩解压 里有。

很不错的。短小精悍。
 
要像Aspack一样的效果的话,不用汇编是很难想象的。
我的一个DOS试验品(仿UPX)的核心函数之一:
FUNCTION EXECUTE (Name : PathStr ; Tail : STRING) : WORD; ASSEMBLER;
ASM
; DB ; ; ;66h
; PUSH ; ;WORD PTR HeapEnd
; DB ; ; ;66h
; PUSH ; ;WORD PTR Name
; DB ; ; ;66h
; PUSH ; ;WORD PTR Tail
; DB ; ; ;66h
; PUSH ; ;WORD PTR HeapPtr
; PUSH ; ;WORD PTR HeapEnd + 2
; PUSH ; ;WORD PTR HeapEnd
; PUSH ; ;WORD PTR Name + 2
; PUSH ; ;WORD PTR Name
; PUSH ; ;WORD PTR Tail + 2
; PUSH ; ;WORD PTR Tail
; PUSH ; ;WORD PTR HeapPtr + 2
; PUSH ; ;WORD PTR HeapPtr
; CALL ReallocateMemory
; CALL SwapVectors
; CALL DOS.EXEC
; CALL SwapVectors
; CALL ReallocateMemory
; MOV ;AX, DosError
; OR ; AX, AX
; JNZ ;@OUT
; MOV ;AH, 4Dh
; INT ;21h
;@OUT :
END;

这种特殊压缩在纯WIN下是很难实现的,这也就是为什么这种类型的软件往往都是利用外壳才能在WIN下运行的原因。
不过外国佬挺厉害的,在一个国外论坛的Delphi专栏里看到有人声称已经用纯Delphi做出类似Aspack的软件,
呵呵!很好奇想知道,可是对方保密得很,只说用Pure Delphi想做的话要用很特别的技巧,只有他们内部开发小组
成员才能得到源码!我想技巧性太强难度一定相当大,那样的效率也许反不如用内嵌汇编来得快。当然话说回来,如
果能掌握那样的技巧该是多么美妙的事情啊![:D]
 
怎么下不了“应用程序病毒免疫控件 V1.23(36K)”啊?
http://yygw.51.net/Down/SelfAV1.23.zip
 
to YB_unique:
对PE文件加壳的基本方法我还是知道的。现有的“应用程序免疫器V0.86”附加到PE文件中的
代码就是用内嵌汇编写的(1000多行代码),不过写得比较乱。
我现在使用增加新节(Section)的方法附加免疫头代码,用伪造Import表的方法来调用API函数,
离Aspack的功能还差:
1.寻找一种好的压缩算法。
2.资源节中有用信息的分离和重建。
3.代码优化。
Aspack是各节分别压缩的,文件压缩后新增一个代码节和资源节。
而Upx则功能更强大:
1.原文件中的节全部合并,产生一新节Upx0,文件长度为0而虚拟长度为原文件映象长度。
2.解压缩代码和原文件压缩数据放到节Upx1。
3.新建资源节。
用纯Delphi代码加壳PE确实难以想象!!

而我现在做的工具压缩加壳是为了保护病毒免疫头的安全。带CRC32校验、不带自修复功能的
免疫头现在是3K多,带自修复功能的是7K,如果压缩后能达到旧版Aspack的水平就行。

yygw.51.net的主页不让下载了,如果对该问题感兴趣的朋友可到下面的地址下载:
程序:http://263.csdn.net/FileBBS/files/2001_11/T_849_1.zip
源码:http://263.csdn.net/FileBBS/files/2001_11/T_849_2.zip
 
看vclzip的源代码:
在www.51delphi.com搜索

现成的东西呀,而且效率很不错,既可应用,有可以学习,为什么不用呢?
快去吧!
 
ZIP的算法真的好吗?算法倒是挺复杂的。
用Upx压缩后的文件比ZIP压缩的还小呢!!
有谁知道Aspack或Upx或其它PE压缩工具是用什么算法的?
我有一个用LZW的PE压缩器源码(不全),但LZW实现虽简单,但压缩比比ZIP差远了。
 
你可以参考aPLib压缩算法。 PEpack就是利用的该算法库文件!
常用的ZIP、RAR、ARJ、LZW建议不要考虑,不适合PE压缩的特性!非得要也要用IMP,起码压缩率很大!
http://www.programsalon.com/download.asp?type_id=34 有一个PE压缩软件源程序(VC)
 
to YB_unique:
你指的是pcsnk029.zip吧,上面写错的,是Tasm写的,不是VC,我近来参考的就是它的源码。
它用的改进的LZW算法,解压算法才数条汇编指令,但没有压缩算法,且压缩比太小。
这好象是在网上唯一能找到的Win32下的PE文件压缩源码,而它也不全,缺几个头文件,好多缩写的
常量都要自己猜。
我从中学到了伪造Import表的技巧。
aPLib在哪有下载?
 
呵呵!aPLib我有一套,带Delphi源码的!留下Email吧!
其实更好的算法我也见过,在一个国外HACK网站上,可惜上天不能给我一个重来一次的机会,
错过了后悔也是枉然,周末再去瞧瞧!
 
yygw@163.com,谢!
另,Upx在Linux下的源码到处都下不了了,你能不能帮找一套?
 
Upx在http://wildsau.idv.uni-linz.ac.at/mfx/upx.html有下载!
另源码已经发出!
 
咦?源码没收到啊!能不能给个链接或重发到yygw@sina.com中?谢!
另:多谢你给的链接,上面有相当丰富的资料!
 
多人接受答案了。
 
后退
顶部