举个例子:
比如在 VB6 中有一句代码 : MsgBox "Decompile Test."
那么反编译出来的结果就是:
(代码太长不贴,这里贴主要的)
...
mov dword ptr [ebp-58], 004012E4 这里把 "Decompile Test."的地址弄进去了。
...
call dword ptr [<&MSVBVM60.__vbaVarDup>]可以清楚的看出来,复制了一份变量的句柄。因为VB里字符串指向的是内存地址。
...
call dword ptr [<&MSVBVM60.#595>] 这一句d出了MsgBox.这里如果跟进去的话是一大堆API 。
...
所以正常反编译(学汇编语言和计算机编译原理去吧)的话,看到段了就会知道这是一个 Msgbox 函数,但是具体显示的内容是什么,那是根本看不出来的。
P.S. 针对楼上[你不懂就别乱说]说的插一嘴,未加壳的 .NET 为何能被反编译出源代码,那是因为 .NET 是托管,而托管有中间语言,所以它的源代码被编译成 msil 这种中间语言而非像 VB6 直接编译成机器语言了。
VBRezQ v2.4a下载地址http://st.cnc-gd.com/soft/Software.Asp?id=330
可反编译VB6的EXE文件,得到全部窗体。
vb反编译精灵v4.3
下载地址http://gsdx.driversky.com/down/vbre.zip
但明确告诉你,目前世界上还没有任何一款软件能对稍复杂(注意仅仅是稍复杂)一点的VB6编译过成的EXE进行实用的反编译,且不用说目前的软件EXE文件大都经过加壳这样的保护处理,反编译更是不可能了。我在《问专家》网上看到过专家的解答就是这个意思,上面提到过一款说是最好的反编译VB软件,也只能把很简单的EXE编译出窗体文件,代码代码可读性非常差,更不用说稍复杂一点的程序了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)