• 标 题:暴破VFP&EXE1.72C (5千字)
  • 作 者:maxl
  • 时 间:2001-3-18 19:49:06
  • 链 接:http://bbs.pediy.com

我得到的版本为VFP&EXE 1.72C  (http://cfyn.yeah.net)
  经分析其加密方式是这样的:
  首先用自带的ZIP控件将原程序打包,再用内含的释放文件头与之合并为新
文件.当使用时文件头加载后,将打包程序段先释放到存在DESKTOP.INI的目录
下(如Recycled),再生成一个PATH文件,经锁定后,解压加载执行.
  顺便说一下,VFP&EXE中的所谓的改文件结构,就是用不同的ZIP密码打包,
而另一种就是XOR.
  至于它加密的文件很好脱壳,用BlastWave跟一下即可找到入口点,再用TRW
的MAKEPE便可脱掉.
  现在我们来谈一下如何把VFP&EXE1.72变为注册版,LET'S GO
  先脱壳(它是用UPX0.94压的)------UPX脱壳很简单我就不说了
  再用W32DASM反成ASM后,我们可看到:

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004563B3(C), :00456460(C)
|
:00456481 A134B84500              mov eax, dword ptr [0045B834]
:00456486 8B96A4020000            mov edx, dword ptr [esi+000002A4]
:0045648C E80FD9FAFF              call 00403DA0
:00456491 7509                    jne 0045649C
:00456493 803D18B8450001          cmp byte ptr [0045B818], 01
:0045649A 747F                    je 0045651B

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00456491(C)
|

* Possible StringData Ref from Code Obj ->" 演示版"
                                  |
:0045649C BABC664500              mov edx, 004566BC
:004564A1 8B8620020000            mov eax, dword ptr [esi+00000220]

..................


* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0045649A(C)
|
:0045651B 8D85ECFBFFFF            lea eax, dword ptr [ebp+FFFFFBEC]
:00456521 8B4DF4                  mov ecx, dword ptr [ebp-0C]

* Possible StringData Ref from Code Obj ->"Ver "
                                  |
:00456524 BAE8664500              mov edx, 004566E8
:00456529 E8AED7FAFF              call 00403CDC
:0045652E 8B95ECFBFFFF            mov edx, dword ptr [ebp+FFFFFBEC]
:00456534 8B86F0010000            mov eax, dword ptr [esi+000001F0]
:0045653A E87172FCFF              call 0041D7B0
:0045653F 8D85ECFBFFFF            lea eax, dword ptr [ebp+FFFFFBEC]
:00456545 8B8EA4020000            mov ecx, dword ptr [esi+000002A4]

* Possible StringData Ref from Code Obj ->"注册给:"
                                  |
:0045654B BAF8664500              mov edx, 004566F8
:00456550 E887D7FAFF              call 00403CDC
:00456555 8B95ECFBFFFF            mov edx, dword ptr [ebp+FFFFFBEC]
:0045655B 8B8620020000            mov eax, dword ptr [esi+00000220]
:00456561 E84A72FCFF              call 0041D7B0

* Possible StringData Ref from Code Obj ->"          === 谢谢您注册正式版! "
                                        ->"==="
                                  |
:00456566 BA08674500              mov edx, 00456708

将:00456491 7509                    jne 0045649C          ---->9090    nopnop
  :0045649A 747F                    je 0045651B            ---->EB7F    jmp 0045651B
  这两句PATH后就可显示为注册版了!
  Is it easy? 不过别急,这时程序只是显示为注册版,但加密后的程序仍有次数限制.  :(
下一步,我们来分析一下其限制所在,开头我不是提到一个释放文件头吗,那限制段就一定在其中了.
用ULTRAEDIT打开脱壳后的文件,在其中找ASCII字串"MZP"(可执行文件标识),一公有三处:
第一处就不说了,后两处各对应两个可执行文件,两个文件一模一样,长度为154113(25a01H)字节.
这两个文件便为释放文件头,那哪个是用于加密的呢? 你可在MZP后找一空区分别写上不同的字符
再用它去加密文件,之后,我们可查加密文件的头部,从而确定后一个是加密所用的文件头.
好了,即然确定了加密段,就让我们来看看它的代码:
把文件单独分离出来, 先运行一下弹出个框,说是“132版以下加密的,不能运行.”先别去管他,只要
能用说明就文件没坏,用FILEINFO先查一下(反汇编前必备), MY GOD!居然也用UPX压了,去壳再来,我们
可看到:
:0044C87D 8D45F4                  lea eax, dword ptr [ebp-0C]

* Possible StringData Ref from Code Obj ->"\winhelq.ini"
..............

:0044C8B4 E8B7A8FBFF              call 00407170
:0044C8B9 807DFE34                cmp byte ptr [ebp-02], 34
:0044C8BD 7604                    jbe 0044C8C3
:0044C8BF C645FE01                mov [ebp-02], 02

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0044C8BD(C)
|
:0044C8C3 807DFE33                cmp byte ptr [ebp-02], 33
:0044C8C7 7627                    jbe 0044C8F0
:0044C8C9 8BC3                    mov eax, ebx
:0044C8CB E804A9FBFF              call 004071D4
:0044C8D0 6A30                    push 00000030

* Possible StringData Ref from Code Obj ->"警告"
                                  |
:0044C8D2 B9D0C94400              mov ecx, 0044C9D0

* Possible StringData Ref from Code Obj ->"  对不起!您的使用期已到,继续使用需注册,注册"
                                        ->"费200元。

      注册信箱:cfyns@163.net "
                                        ->" 或

                cfyns@21cn.com "
                                        ->"

    欢迎您光临我的网站:http://cfyn.yeah.ne"
                                        ->"t "
原来它的次数限制放在C:\WINDOWS\winhelq.ini (注:这是隐藏文件) 的RVA=D9处,用一次加一次.
判段在这里
:0044C8B4 E8B7A8FBFF              call 00407170                  获得使用次数
:0044C8B9 807DFE34                cmp byte ptr [ebp-02], 34   
:0044C8BD 7604                    jbe 0044C8C3          超过34次就完了
:0044C8BF C645FE01                mov [ebp-02], 02
所以解限制的最简方法就是删了winhelq.ini ,不过做为一名CRACKER可不行,下面我们彻底破了它.
其实,改法很多,只要把7604--->9090就可以了,但改完后文件大了很多,再压一下还大,惨了放不回去了.
看来只有在不解压的情况下改了. 要不解压,首先想到的是用SMC(self modifying code), 但我不太会,
(高手可一试) 我改的方法是靠UPX的非全码加压,原来我们要改的7604并没有改变,所以,可这样改:
Search        C10BC16C4B347604 (共两处)
modify to    ------------9090
现在,你再加密试试,没有次数限制了吧.      :)
                           
                                        MXL