真正反編譯是不可能的,不管是P代碼還是本機代碼,不加殼也反編譯不了,至于什么.net反編譯,更是癡人說夢!網(wǎng)上雖有一些反編譯軟件,但是頂多把你用了哪些控件找出來,至于代碼就無能為力了
創(chuàng)新互聯(lián)建站提供高防主機、云服務(wù)器、香港服務(wù)器、聯(lián)通機房服務(wù)器托管等
你都懂得反編譯還編不了個小信息管理系統(tǒng)啊...vb6程序的話可以的 因為vb6本來就是偽代碼,vb.net就不行了,.net framework至少能防止你把程序反編譯成特定高級語言的。
如果說 VB3、VB4 還有可能的話,那么 VB5、VB6 反編譯就是完全的癡人說夢了,VB6 已經(jīng)不是純粹的解釋性語言了,根本不可能反編譯出完整的源代碼,對于這種語言寫出來的程序,只能獲得中間語言或低級語言。一般來說 VB6 都是 P 代碼,而 P-Code 的代碼逆向回來只能自己看,機器是識別不了的。
舉個例子:
比如在 VB6 中有一句代碼 : MsgBox "Decompile Test."
那么反編譯出來的結(jié)果就是:
(代碼太長不貼,這里貼主要的)
...
mov dword ptr [ebp-58], 004012E4 ; 這里把 "Decompile Test."的地址弄進去了。
...
call dword ptr [MSVBVM60.__vbaVarDup]; 可以清楚的看出來,復(fù)制了一份變量的句柄。因為VB里字符串指向的是內(nèi)存地址。
...
call dword ptr [MSVBVM60.#595] ; 這一句彈出了MsgBox.這里如果跟進去的話是一大堆API 。
...
所以正常反編譯(學(xué)匯編語言和計算機編譯原理去吧)的話,看到段了就會知道這是一個 Msgbox 函數(shù),但是具體顯示的內(nèi)容是什么,那是根本看不出來的。
P.S. 針對樓上[你不懂就別亂說]說的插一嘴,未加殼的 .NET 為何能被反編譯出源代碼,那是因為 .NET 是托管,而托管有中間語言,所以它的源代碼被編譯成 msil 這種中間語言而非像 VB6 直接編譯成機器語言了。