解狗思路的一點總結!純屬個人意見! (3千字)

看雪資料發表於2002-10-21

  目前國內解狗高手還不是很多,非常多的cracker們都在研究共享軟體的破解,主要研究註冊碼、序列號等等。當然,研究這些是學習解狗的一個非常必須的過程,要破解狗您首先要知道如何爆破一個軟體,知道程式演算法的基本流程。

  狗加密說白了就是一個帶黑匣子的演算法問題,普通的軟體我們可以在程式內部瞭解到整個演算法的全過程,而解狗相當於一部分重要的演算法轉移到狗的內部進行運算,我們不能從程式中得到這個演算法,只能靠猜的辦法來進行,當然猜也要猜得有點規律,不能亂猜。而這個規律從何而來?當然還是程式本身,無論什麼軟體在讀狗之後一般都要馬上判斷加密狗是否存在以及是否正確,而判斷的本身就是一種條件的獲得,找到了關鍵的判斷其實也就是找到了程式破解的突破口,找到之後的辦法當然就是修改了。

  一是直接修改判斷之後的程式流程,讓沒有狗的情況下執行正確的程式流程,另外就是修改判斷之前的程式,讓程式走道判斷的地方的時候關鍵資料是正確的。個人認為後一種方法較好,因為這種判斷可能是顯性的,也可能是隱型的,如果能夠在程式內部最底層讀狗的部位修改,讓程式正確執行,那麼出現軟體破解不完全的可能性會大大減少。當然這是很難的,第一是判斷讀狗部位比較難,第二就是逆推出演算法比較難,沒有很好的功底,怕是難以實現!如果真能做到這一步,那麼這個軟體的破解就算比較完美了!

  現在我知道黑心破解金天地的狗採用了修改(或者重新程式設計,我沒弄清楚)讀狗驅動的方法,完美支援了升級,我想就是完全搞清楚了程式在轉入狗驅動之後整個的演算法流程。修改讀狗驅動是非常省事情的!因為狗驅動一般很少發生變化,所以可以很好的支援軟體頻繁的升級問題!當然直接修改源程式也未必不可!如果摒棄軟體頻繁升級帶來的不便,修改主執行程式和修改讀狗驅動之間並不存在誰優誰劣的問題,當然這裡要宣告一點,因為修改讀狗驅動,首先確保了修改者至少研究透了在主執行檔案最底層的演算法過程,而在讀狗驅動裡面偽造了一個黑匣子,最大可能的減少了因為對主執行檔案研究不透徹而造成的破解不完全現象,但是這裡也存在一個問題,就是作者要花費大量的時間研究整個演算法過程,沒有極其豐富的經驗和對整個程式的瞭解,是很難做到這一步的!比如金天地的狗,我個人認為它的讀狗判斷過程可能是相對比較簡單的,都是以返回值為0作為正確值(當然這個值一般情況下是非常隱型的)但是讀懂在層層設障以大量花指令迷惑視線的演算法過程,這才是最最困難的地方,如果您可以突破這一步,金天地的狗對您來說應該是不在話下了。但是對於我們來言,這一步跨度太大了,甚至有些高不可攀。

  但是情況有時候也未必就完全令我們絕望,首先我們明確一點,到了存在花指令的部位,其實也就是到了讀狗的關鍵部位,加密者(應該說是加密狗的設計者更準確,因為這些花指令並不是購買狗對軟體進行加密的人所編寫的,而是在加密過程由加密主程式自動生成的)為了隱藏其讀狗過程而人為設定的,這裡就有兩個資訊提供出來了!

  第一:我們來到了讀狗核心,第二,我想也是最最最大的漏洞暴露出來了(為什麼這麼說,等會解釋)。雖然看著這一段包含花指令的程式步驟很多,其實他完成的演算法過程是相對比較簡單的。這裡就要求我們再一次的去猜,猜猜看程式在這裡到底完成了什麼步驟,進行了什麼樣的演算法轉換,當然這要從程式後續的判斷來進行逆推,推測的好!那麼我們就可以在這裡修改,程式應該比較完美的執行了!而且這樣的判斷應該是比較底層的子程式,其他地方的判斷也應該呼叫他!當然,也許這樣的判斷子程式會有多處,但是據個人經驗,這樣的地方一般在一個程式之內時非常非常少的!這裡就要再提一下為什麼說是一個非常大的漏洞:因為我們剛才說了,這個地方的花指令並不是軟體加密者自己編寫的,而是由加密主程式自動生成來迷惑解密者的!那麼這個自動其實也就代表著另外一個意思:規律。對,就是它的規律性。瞭解到了規律性的東西,其實也就是對於某種軟體狗一個整體掌握的體現。規律性體現在很多地方:程式程式碼的相似性,運算過程的相似性等等。拿同一個軟體而言,在其升級的過程中,主執行檔案可能發生非常大的變化,而這段規律性的的判斷讀狗過程卻一般都原封不動的轉到了新的程式裡面,為什麼這樣?因為它的對軟體狗加密的主程式沒有發生,其實他和讀狗驅動一樣,升級變化的動作很小,而且在程式中很容易判斷出來!另外在這個地方的程式流程演算法過程也不會發生變化。除非該軟體狗廠商對軟體狗的配套程式進行了重大的改變!我想這時候就算是修改讀狗驅動的也不能支援升級了!

相關文章