先說說來由。
反編譯自己的程序是應(yīng)為一個叫做SkyPE的即時聊天工具。
它有著最好的網(wǎng)絡(luò)語音聊天質(zhì)量
怎么比較呢?
就拿QQ開刀吧,使用了SkyPE的語聊以后,你就再也不會使用QQ的語音聊天功能了。
然而他卻是用Delphi寫的。
在他的安裝文件夾下,有兩個exe文件:(新版2.0)
一個主程序,另一個程序居然還是Delphi7的那個默認(rèn)的圖標(biāo) :)
心里一想,牛,全是用Delphi寫的。
有很多人說Delphi快死了,其實,我覺得,
到了目前為止,人們對Delphi的認(rèn)識,才更進(jìn)一步的加深了,知道她擅長做什么
現(xiàn)在網(wǎng)絡(luò)上滿天飛的共享軟件不乏有她的優(yōu)秀作品,
例如,讓你感覺不到網(wǎng)絡(luò)存在的在線音樂播放器——KuGoo
當(dāng)然,商業(yè)軟件中也不乏她的存在——WPS Office 2005 和 金山毒霸(2002) 的界面。
不過這都是后話。
SkyPE的優(yōu)秀讓我的好奇心想知道,它到底是怎么做的。
于是乎,就找到了聞其名,而很少用的 DeDe 3.50.02
一個文件好辦,直接反編譯,三四分鐘后
結(jié)果出來了,我認(rèn)為,能得到的信息就是每個窗體的類名
還有一些事件的名字,其他的自行添加的方法連名字都得不到。
我這個人不太懂匯編,不過看看它反編譯后的注釋,
也只知道,某個方法內(nèi)用到了什么類,至于做什么我就不太明白了。
hoho,轉(zhuǎn)念一想,為什么不反編譯我做的程序呢?
說干就干,就是經(jīng)過三四分鐘,結(jié)果出來了。
憑著類名,我找到了我程序中的一個比較關(guān)鍵的類,里面有著一些隱蔽的信息。
打開后,心里平靜了一下,
因為我的那些方法的名字都顯示不出來,呵呵
然后我對每個方法的匯編碼進(jìn)行察看,
依稀找到了關(guān)鍵方法。
早在多年前我就知道有DeDe這個玩意兒了
所以代碼里也做了些手腳,
以我那粗淺的匯編水平來,我很難得到一些關(guān)鍵的信息。(仰天長笑中.....)
不過,也不是這么完美,在方法中使用的SQL語句還是部分的暴露了出來。
以后有機會就隱掉它。
最后,我關(guān)掉了DeDe,總結(jié)出以下幾條反DeDe的經(jīng)驗:
一、如果可能的話,關(guān)鍵部分的類名和對象名最好不要那么直白。
二、如果可能的話,代碼中事件的生成不要用Delphi的屬性編輯器來生成,而要手工生成。
三、如果可能的話,程序中最好不要出現(xiàn)明文的字符串。
四、如果可能的話,不要直接發(fā)布Delphi編譯好的程序。
五、如果可能的話,不要使用Delphi提供的和那些知名的控件。
六、上面的五條絕對是原創(chuàng),今后,如果你真的在某個地方看到了,那么你至少可以知道我是在哪兒抄的。呵呵。
最后再來補充一下,如何簡單的判斷一個程序是不使用Delphi編的。
簡單點的,就是在一個程序任務(wù)欄按鈕里,右鍵點擊,如果彈出菜單只有還原,最小化和關(guān)閉那么他60%是用Delphi/C++Builder寫的。
復(fù)雜點的。
首先,要讓你得Windows是動畫的,怎么說呢?就是你能看到程序最大化和最小化的動畫。
然后,打開一個程序,讓它顯示在桌面上,然后鼠標(biāo)點擊“顯示桌面”。
這時,你應(yīng)該可以看到桌面了。然后在任務(wù)欄里點擊剛才的那個程序。
如果,窗口的還原動畫,像平常一樣,由任務(wù)欄飛出,變成原來一般大小,那它97%不是用Delphi寫的。(如果是的話,那么它就太不經(jīng)濟(jì)了),如果窗口的還原動畫是飛向屏幕的正中間的一個點上,然后整個窗口突然出現(xiàn),嗬嗬,那它99%是用Delphi/C++Builder寫的。原因很簡單,就是VCL有一個隱藏的TApplication。
OK,就這么多了。