我得到的版本为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
- 标 题:暴破VFP&EXE1.72C (5千字)
- 作 者:maxl
- 时 间:2001-3-18 19:49:06
- 链 接:http://bbs.pediy.com