• 标 题:关于pe-scan v3.0x的壳研究 (3千字)
  • 作 者:flyfancy
  • 时 间:2002-7-12 13:42:34
  • 链 接:http://bbs.pediy.com

关于pe-scan v3.0x的壳研究


今天下载了最新版pe-scan v3.03版,感觉功能是强了不少,但是英文版的毕竟看了不爽,于是又想自己动手汉化了,要汉化就要先脱壳,但相信pe-scan的作者对壳的研究是很深的,所以写了这篇文章,如果有什么错误还请大家指正.

先看看它加了什么壳,用Fi,显示UPX + cryptor (⺁E);用PEiD,显示ASPack 2.1 -> Alexey Solodovnikov;用pe-scan自己,它也说是aspack2.1.
既然两个都说是aspack,用脱aspack的方法试试,用caspr,无效,用AspackDie 1.3g ,还是无效(竟然没有导入表),于是用自己写的UPX(S)通用脱壳脚本脱,还是无效,看来只有好好研究一下了.

用TRW载入,看上去真像ASPACK,也像UPXPR,个人感觉像Aspack多一点,莫非是变形壳?
0187:00496002 E872050000      CALL    00496579            //载入后停在这里
0187:00496007 EB33            JMP      SHORT 0049603C
0187:00496009 87DB            XCHG    EBX,EBX
0187:0049600B 90              NOP   
0187:0049600C 0000            ADD      [EAX],AL
0187:0049600E 0000            ADD      [EAX],AL
0187:00496010 0000            ADD      [EAX],AL
...
bpx getprocaddress
pmodule
...
就来到这里
0187:0049343A 09C0            OR      EAX,EAX                //停在这里
0187:0049343C 7407            JZ      00493445
0187:0049343E 8903            MOV      [EBX],EAX
0187:00493440 83C304          ADD      EBX,BYTE +04
0187:00493443 EBD8            JMP      SHORT 0049341D
0187:00493445 FF966C380900    CALL    NEAR [ESI+0009386C]
0187:0049344B 61              POPA   
0187:0049344C E98B90F7FF      JMP      0040C4DC            //这里就跳OEP了,下面都是ADD ...  要是有手工脱UPXS的经验就会发现它们真的很像.而aspack在这里应该是个ret
...
到了OEP,直接makepe,运行脱壳的程序
居然出错了?
"Windows无法运行该程序,因为它的格式无效."

于是打开程序的导入表,删除里面错误余的项,运行程序,这次其他都正常了,但是点击"关于"按钮,就非法操作,我倒~~~~~~,怎么和脱ASPR一样啊!.无奈下用freeres载入pe-scan重建资源,这次搞定了,但是重建资源后的pe-scan只有90多K,用makepe出来的却有600多k,我当然要探究竟了,原来,freeres只是释放了菜单和对话框这类的资源,pe-scan本身带有一个数据库,freeres并没有释放这个,但是makepe出来的文件却释放过了,所以makepe出来的程序很大.
就汉化来说用freeres释放资源后目的已经达到了,但是就脱壳来说还不行,于是继续努力.



先上网转转看看是否有高手搞定这个壳了,于是看到pe-scan3.00汉化版,是汉化新世纪的作品,真是感到很惊讶的,下载下来看,才知道这个汉化的脱壳是用UG2001的工具脱的,看来这篇文章还是有必要继续写下去了.
还是继续研究它的壳吧,于是换一种方式来脱
还是同样的OEP,试试pedump,哈哈,居然成功了,运行也没有错误了,哈哈,真想不到!真的是很简单啊!
其实在pe-scan里有两个地方可以直接pedump的(两个OEP?),一个是0040C4DC,还有一个是004932F2,大家都可以试试.


后记:不知道为什么在trw里,用makepe搞不定,用pedump却可以呢?谁可以告诉我,莫非是trw自作聪明偏要给原来的程序添加一个Section造成的.所以以后如果makepe不行,别忘了试试pedump啊,说不定还有奇效.其实pe-scan加了2层壳,第一层是比较像aspack但不是,因为他没有压缩功能,另外一层就是UPX Protector 1.0x了(当脱掉第一层的时候,文件大小反而小了,由46k变为41k),再脱UPX Protector 1.0x的壳文件就只有591k了,上面介绍的只是一个比较简单的方法,并没有详细研究.
本人才疏学浅,如果有什么疏漏和错误,还请各位高手指正



搞汉化还是太麻烦,各位要是感兴趣的话可以做3.03版的汉化,不要认为3.00和3.03一样,3.03前的3.0x版的shell功能都是无效的,3.03才修正了这个错误.