Programming 版 (精华区)
发信人: SwordLea (飞刀李), 信区: Programming
标 题: [合集] 由PE压缩工具想到的……
发信站: 哈工大紫丁香 (Fri Aug 20 09:12:17 2004), 站内
────────────────────────────────────────
SwordLea (飞刀李) 于 (Wed Aug 18 18:51:45 2004) 说道:
说明:我并没有编译通过。
.586p
.model flat,STDCALL
option casemap :none ; case sensitive
; #########################################################################
; include files
; ~~~~~~~~~~~~~
include \Tools\Develop\Masm32\include\masm32.inc
; libraries
; ~~~~~~~~~
includelib \Tools\Develop\Masm32\lib\Kernel32.lib
includelib \Tools\Develop\Masm32\lib\User32.lib
; #########################################################################
extrn _lopen: proc
extrn _lcreat: proc
extrn _lread: proc
extrn _lwrite: proc
extrn _lclose: proc
extrn ExitProcess: proc
.data
OldFile db "pe.exe",0
NewFile db "pe.zzz",0
FileData db 0,0
.code
start:
push 0
push offset OldFile
call _lopen
cmp eax,-1
jz ExitProc
mov esi,eax
push 0
push offset NewFile
call _lcreat
cmp eax,-1
jz CloseOldFile
mov edi,eax
xor ebx,ebx
ReadData:
push 1
push offset FileData
push esi
call _lread
or eax,eax
jz ReadOver
movzx eax,FileData
or eax,eax
jnz NoZero
inc ebx
cmp ebx,0ffh
jnz ReadData
xor eax,eax
mov ah,bl
xchg ax,word ptr FileData
push 2
push offset FileData
push edi
call _lwrite
xor ebx,ebx
jmp ReadData
NoZero:
or ebx,ebx
jnz NoZeroData
push 1
push offset FileData
push edi
call _lwrite
jmp ReadData
NoZeroData:
push eax
xor eax,eax
mov ah,bl
mov word ptr FileData,ax
push 2
push offset FileData
push edi
call _lwrite
xor ebx,ebx
pop eax
mov FileData,al
push 1
push offset FileData
push edi
call _lwrite
jmp ReadData
ReadOver:
or ebx,ebx
jz CloseFile
xor eax,eax
mov ah,bl
xchg ax,word ptr FileData
push 2
push offset FileData
push edi
call _lwrite
xor ebx,ebx
CloseFile:
push edi
call _lclose
CloseOldFile:
push esi
call _lclose
ExitProc:
push 0
call ExitProcess
end start
────────────────────────────────────────
artist (手艺人) 于 (Wed Aug 18 20:46:51 2004) 说道:
请教:何谓PE压缩工具。谢谢。
【 在 SwordLea (飞刀李) 的大作中提到: 】
: 说明:我并没有编译通过。
: .586p
: .model flat,STDCALL
: ...................
────────────────────────────────────────
iamxiaohan (潇寒·纪念 ytht) 于 (Wed Aug 18 21:16:43 2004) 说道:
就是一般的exe文件压缩工具,因为win32的执行文件是pe格式,故而得名
【 在 artist (手艺人) 的大作中提到: 】
: 请教:何谓PE压缩工具。谢谢。
────────────────────────────────────────
artist (手艺人) 于 (Wed Aug 18 21:20:32 2004) 说道:
请教:exe文件和其他文件压缩有什么不同?
【 在 iamxiaohan (潇寒·纪念 ytht) 的大作中提到: 】
: 就是一般的exe文件压缩工具,因为win32的执行文件是pe格式,故而得名
────────────────────────────────────────
iamxiaohan (潇寒·纪念 ytht) 于 (Wed Aug 18 21:23:35 2004) 说道:
这种pe压缩器,压缩出来的文件还是pe格式,也就是说执行文件压缩后还能执行,
而你如果用一般的winrar压缩出来的可执行文件是不能执行的,
而这种pe压缩器不能压缩其它非可执行文件
【 在 artist (手艺人) 的大作中提到: 】
: 请教:exe文件和其他文件压缩有什么不同?
────────────────────────────────────────
artist (手艺人) 于 (Wed Aug 18 21:25:14 2004) 说道:
为什么压缩以后还能执行?能否介绍一下原理?
谢谢。
【 在 iamxiaohan (潇寒·纪念 ytht) 的大作中提到: 】
: 这种pe压缩器,压缩出来的文件还是pe格式,也就是说执行文件压缩后还能执行,
: 而你如果用一般的winrar压缩出来的可执行文件是不能执行的,
: 而这种pe压缩器不能压缩其它非可执行文件
: ...................
────────────────────────────────────────
hitool (HIT-007) 于 (Wed Aug 18 21:30:31 2004) 说道:
这个程序压缩出来的PE文件恐怕是不能运行的,它的原理无非是将连续的0变成
0后面跟上0的个数以达到压缩文件大小的目的,但是这样压缩过的PE文件还能运行吗?
【 在 artist (手艺人) 的大作中提到: 】
: 为什么压缩以后还能执行?能否介绍一下原理?
: 谢谢。
────────────────────────────────────────
iamxiaohan (潇寒·纪念 ytht) 于 (Wed Aug 18 21:33:27 2004) 说道:
原理可以这样简单的理解一下:
用一个程序把A.exe压缩了,这步按正常的压缩算法进行,这样压缩出来的东东(A.tmp)当然是不可执行的,这时,我生成一个另外的外壳,然后把A.tmp附在外壳代码的后面,而这个
外壳代码是可执行的,这样生成的程序叫做B.exe
当用户点击B.exe的时候,实际上是外壳程序先运行,然后它把它尾部的A.tmp代码解压缩到
内存中,再跳转到那去执行
【 在 artist (手艺人) 的大作中提到: 】
: 为什么压缩以后还能执行?能否介绍一下原理?
: 谢谢。
────────────────────────────────────────
artist (手艺人) 于 (Wed Aug 18 21:35:17 2004) 说道:
和winzip中的自解压是一个道理,对不?
【 在 iamxiaohan (潇寒·纪念 ytht) 的大作中提到: 】
: 原理可以这样简单的理解一下:
: 用一个程序把A.exe压缩了,这步按正常的压缩算法进行,这样压缩出来的东东(A.tmp)当然是不可执行的,这时,我生成一个另外的外壳,然后把A.tmp附在外壳代码的后面,而这个
: 外壳代码是可执行的,这样生成的程序叫做B.exe
: ...................
────────────────────────────────────────
hitool (HIT-007) 于 (Wed Aug 18 21:37:05 2004) 说道:
差不多,只是winzip只是把文件解压出来,不是解到内存中运行。
【 在 artist (手艺人) 的大作中提到: 】
: 和winzip中的自解压是一个道理,对不?
────────────────────────────────────────
iamxiaohan (潇寒·纪念 ytht) 于 (Wed Aug 18 21:37:22 2004) 说道:
yeah,当然实际的算法会对某些环节进行优化,上面只是表明可以办把“把一个可执行文件压缩后,还可执行”,而方法是多种多样的,不同的pe压缩器所用的方法都不同
【 在 artist (手艺人) 的大作中提到: 】
: 和winzip中的自解压是一个道理,对不?
────────────────────────────────────────
SwordLea (飞刀李) 于 (Thu Aug 19 09:14:37 2004) 说道:
这一点我也没想通,但据说它确实是好用的。不过,前提是EXE不做CRC校验。
【 在 hitool (HIT-007) 的大作中提到: 】
: 这个程序压缩出来的PE文件恐怕是不能运行的,它的原理无非是将连续的0变成
: 0后面跟上0的个数以达到压缩文件大小的目的,但是这样压缩过的PE文件还能运行吗?
────────────────────────────────────────
hitool (HIT-007) 于 (Thu Aug 19 09:26:28 2004) 说道:
我试试看,也许真的好使也说不定。
【 在 SwordLea (飞刀李) 的大作中提到: 】
: 这一点我也没想通,但据说它确实是好用的。不过,前提是EXE不做CRC校验。
────────────────────────────────────────
hitool (HIT-007) 于 (Thu Aug 19 09:54:48 2004) 说道:
我刚刚试过,压缩后的PE文件不能运行。我觉得这个程序只是个普通的文件压缩程序。
【 在 hitool (HIT-007) 的大作中提到: 】
: 我试试看,也许真的好使也说不定。
────────────────────────────────────────
Anna (Walking in the sun--Degauss.前年听不错) 于 (Thu Aug 19 09:59:24 2004) 说道:
如果要运行,恐怕还要写专门的工具才行。
【 在 hitool (HIT-007) 的大作中提到: 】
: 我刚刚试过,压缩后的PE文件不能运行。我觉得这个程序只是个普通的文件压缩程序。
────────────────────────────────────────
hitool (HIT-007) 于 (Thu Aug 19 10:06:27 2004) 说道:
如果是这样的话,这个程序确实很简单,但是高效就谈不上了,虽然PE文件中的0不少,
但是压缩率也高不到哪去。另外,还有很多也很简单的压缩算法可以用。
【 在 Anna (Walking in the sun--Degauss.前年听不错) 的大作中提到: 】
: 如果要运行,恐怕还要写专门的工具才行。
────────────────────────────────────────
SwordLea (飞刀李) 于 (Thu Aug 19 10:21:48 2004) 说道:
啊?原来被骗了!
看来它只是一个“只能‘简单’压缩PE文件的‘高效’压缩程序”。
那么,我们本年度第二期“程序大战”比比PE压缩怎么样?会不
会太难了?我想压缩本身不难,但如果不使用捆绑方式,也许需
要写Loader啊。
【 在 hitool (HIT-007) 的大作中提到: 】
: 我刚刚试过,压缩后的PE文件不能运行。我觉得这个程序只是个普通的文件压缩程序。
────────────────────────────────────────
iamxiaohan (潇寒·纪念 ytht) 于 (Thu Aug 19 10:27:07 2004) 说道:
这要对pe格式很熟,要求很高的,估计会有很多人观战,但不一定会有很多人下水~~~:P
其实上次哪个大赛的题目,改动一点点就是查杀病毒的工具,不如改成这个比较有趣~~:P
【 在 SwordLea (飞刀李) 的大作中提到: 】
: 啊?原来被骗了!
: 看来它只是一个“只能‘简单’压缩PE文件的‘高效’压缩程序”。
: 那么,我们本年度第二期“程序大战”比比PE压缩怎么样?会不
: ...................
────────────────────────────────────────
Anna (Walking in the sun--Degauss.前年听不错) 于 (Thu Aug 19 10:44:36 2004) 说道:
有人观战就够了,按我的想法,第一期程序大战可以延期结束,毕竟第一期都是在
假期期间,可能许多朋友看到的时候已经是个合集没办法参与,第二期可以和第一期同时
进行,而且很希望兄弟版面能够支持,这种技术问题,不会被作为多发而封post.
【 在 iamxiaohan (潇寒·纪念 ytht) 的大作中提到: 】
: 这要对pe格式很熟,要求很高的,估计会有很多人观战,但不一定会有很多人下水~~~:P
: 其实上次哪个大赛的题目,改动一点点就是查杀病毒的工具,不如改成这个比较有趣~~:P
────────────────────────────────────────
liyulongmen (Crazy) 于 (Thu Aug 19 11:01:44 2004) 说道:
PE压缩这种东西都是一个老话题啦,
upx早就做了好久了,而且有源代码可以下载,看看人家的源代码吧!
upx可以达到与winzip相当的压缩率。而且运行速度很高,
不要总是闭门造车啦
【 在 SwordLea (飞刀李) 的大作中提到: 】
: 说明:我并没有编译通过。
: .586p
: .model flat,STDCALL
: option casemap :none ; case sensitive
: ; #########################################################################
: ; include files
: ; ~~~~~~~~~~~~~
: include \Tools\Develop\Masm32\include\masm32.inc
: ...................
────────────────────────────────────────
Anna (Walking in the sun--Degauss.前年听不错) 于 (Thu Aug 19 11:06:13 2004) 说道:
你这最后一句话、说的真挺没水平的。
【 在 liyulongmen (Crazy) 的大作中提到: 】
: 标 题: Re: 简单高效的PE压缩工具
: 发信站: BBS 哈工大紫丁香站 (Thu Aug 19 11:01:44 2004)
:
: PE压缩这种东西都是一个老话题啦,
: upx早就做了好久了,而且有源代码可以下载,看看人家的源代码吧!
: upx可以达到与winzip相当的压缩率。而且运行速度很高,
: 不要总是闭门造车啦
: 【 在 SwordLea (飞刀李) 的大作中提到: 】
: : 说明:我并没有编译通过。
: : .586p
: : .model flat,STDCALL
: : option casemap :none ; case sensitive
: : ; #########################################################################
:
: : ; include files
: : ; ~~~~~~~~~~~~~
: : include \Tools\Develop\Masm32\include\masm32.inc
: : ...................
:
:
:
: --
:
※ 修改:·SwordLea 于 Aug 20 09:14:00 修改本文·[FROM: 202.118.246.*]
: ※ 来源:·哈工大紫丁香 http://bbs.hit.edu.cn·[FROM: 202.118.239.116]
────────────────────────────────────────
Amia (小羊) 于 (Thu Aug 19 11:14:45 2004) 说道:
关起门来一般都是造人,哈哈
【 在 Anna (Walking in the sun--Degauss.前年听不错) 的大作中提到: 】
: 你这最后一句话、说的真挺没水平的。
────────────────────────────────────────
SwordLea (飞刀李) 于 (Thu Aug 19 11:17:52 2004) 说道:
呵呵,学习别人的源代码当然是快速进步的好方法!
但同学们自己尝试也写一些程序,也是个提高的过程啊。
【 在 liyulongmen (Crazy) 的大作中提到: 】
: PE压缩这种东西都是一个老话题啦,
: upx早就做了好久了,而且有源代码可以下载,看看人家的源代码吧!
: upx可以达到与winzip相当的压缩率。而且运行速度很高,
: ...................
────────────────────────────────────────
Anna (Walking in the sun--Degauss.前年听不错) 于 (Thu Aug 19 11:18:54 2004) 说道:
puke e人
【 在 Amia (小羊) 的大作中提到: 】
: 关起门来一般都是造人,哈哈
────────────────────────────────────────
iamxiaohan (潇寒·纪念 ytht) 于 (Thu Aug 19 11:28:34 2004) 说道:
看别人的代码是一回事,自己写又是一回事,
A.看了别人的代码后,自己再写是一回事,
B.不看别人的代码,自己写完后再看别人的代码又是另外一回事,
前面是培养学习能力,后面是培养创造能力
一种是创新,一种是创造~~~
很多时候只强掉了看看别人是怎么做的,而觉得自己重新做一个是费力不讨好的事,
所以,我们没有 linux , 但在 linux 出来之后, 我们又可以在它上面进行丰富,发展
古代中国有很多大的发明,我们是很多东东的老祖宗,代现在我们很多时候是子孙后代,
而不是老祖宗,虽然子孙也可以把老祖宗的东西发扬光大~~~
【 在 liyulongmen (Crazy) 的大作中提到: 】
: PE压缩这种东西都是一个老话题啦,
: upx早就做了好久了,而且有源代码可以下载,看看人家的源代码吧!
: upx可以达到与winzip相当的压缩率。而且运行速度很高,
: ...................
────────────────────────────────────────
SwordLea (飞刀李) 于 (Thu Aug 19 14:26:51 2004) 说道:
已经把技术讨论上升到哲学领域了,而且慷慨激昂,大有
我以我血荐轩辕之势,此帖不m,无颜见江东父老啊!
【 在 iamxiaohan (潇寒·纪念 ytht) 的大作中提到: 】
: 看别人的代码是一回事,自己写又是一回事,
: A.看了别人的代码后,自己再写是一回事,
: B.不看别人的代码,自己写完后再看别人的代码又是另外一回事,
: ...................
────────────────────────────────────────
iamxiaohan (潇寒·纪念 ytht) 于 (Thu Aug 19 14:38:26 2004) 说道:
ft...
【 在 SwordLea (飞刀李) 的大作中提到: 】
: 已经把技术讨论上升到哲学领域了,而且慷慨激昂,大有
: 我以我血荐轩辕之势,此帖不m,无颜见江东父老啊!
────────────────────────────────────────
liyulongmen (Crazy) 于 (Thu Aug 19 21:04:15 2004) 说道:
要站在巨人的肩膀上。做东西,如果有可以参考的资料,为什么要弃而不用?
为什么看完别人的代码后不能写出更好的代码(这不算有创造力?)
【 在 iamxiaohan (潇寒·纪念 ytht) 的大作中提到: 】
: 看别人的代码是一回事,自己写又是一回事,
: A.看了别人的代码后,自己再写是一回事,
: B.不看别人的代码,自己写完后再看别人的代码又是另外一回事,
: 前面是培养学习能力,后面是培养创造能力
: 一种是创新,一种是创造~~~
: 很多时候只强掉了看看别人是怎么做的,而觉得自己重新做一个是费力不讨好的事,
: 所以,我们没有 linux , 但在 linux 出来之后, 我们又可以在它上面进行丰富,发展
: 古代中国有很多大的发明,我们是很多东东的老祖宗,代现在我们很多时候是子孙后代,
: ...................
────────────────────────────────────────
iamxiaohan (潇寒·纪念 ytht) 于 (Fri Aug 20 07:32:01 2004) 说道:
【 在 liyulongmen (Crazy) 的大作中提到: 】
: 要站在巨人的肩膀上。做东西,如果有可以参考的资料,为什么要弃而不用?
: 为什么看完别人的代码后不能写出更好的代码(这不算有创造力?)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
可以写出更好的代码,但这是更新,是修补,不是从无到有的发明创造~~~
有巨人的时候,当然站在巨人的肩上,省事,快捷,
但没有巨人的时候怎么办?如果已经习惯于站在巨人的肩上后,可能就只好等待巨人的出现了
Linux没有的时候,unix是巨人,大家站在它的肩上,捣弄unix
linux来了,linux是巨人了,于是大家又站在它的肩上,捣弄linux
.net没有的时候,大家捣弄win sdk了,
.net来了,大家又开式捣弄.net了
金山毒霸的引擎是买的俄罗斯的,
.........
操作系统是老外的,编译器也是老外的,网络路由器还是老外的,
还有什么东东我们自己的,
以前老说火药是我们发明的,造纸术是我们发明的,XX是我们最早提出的比XX早了多少年,
XX又起源于我们,
但现在,我们可以说什么是我们的? 我们每年的教授院士是一伙一伙的出现,
本科,硕士,博士一批接一批的开发批量生产,海龟也早就开始批发了,
现在中国的科学家数量,研究人员数量,不知是古代中国的多少多少倍,也可能是全球科研人数之最!
但现在,众多新技术里面,我们可以说哪些是我们的,我们是什么的巨人?
一味的强调站在巨人的肩上,而不强调独立自主的从无到有,只能加速我们对别国核心技术的
依赖,当你的创新创造全建立在别人的技术上面的时候 ............
────────────────────────────────────────
hitool (HIT-007) 于 (Fri Aug 20 08:29:48 2004) 说道:
我觉得从无到有的发明创造固然非常重要,但是在别人成果基础上的改造创新
同样有意义。在消化吸收别人的先进技术的基础上,搞出我们自己的发明创造,
不是一样的吗?就像你说的,四大发明中的火药是我们的发明创造,但是相信
你也知道现在国外的武器装备有多先进,为什么呢?还不是在消化吸收别人的
先进技术基础上,搞出了自己的发明创造。
科学无国界。在科学研究上,固步自封就是停滞不前,盲目崇洋媚外一样会跟
着别人的屁股后面走。在没有前人成果的领域,我们需要的是从无到有的发明
创造;在别人技术领先于我们的时候,需要的是虚心学习,然后是改造创新,
以至发明创造,这样才是科学研究应有的态度。
【 在 iamxiaohan (潇寒·纪念 ytht) 的大作中提到: 】
: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
: 可以写出更好的代码,但这是更新,是修补,不是从无到有的发明创造~~~
: 有巨人的时候,当然站在巨人的肩上,省事,快捷,
: ...................
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:209.676毫秒