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毫秒