隨想錄(反調試技術)

【 聲明:版權所有,歡迎轉載,請勿用於商業用途。  聯繫信箱:feixiaoxing @163.com】

 

    和代碼逆向不同的是,反調試的最終目的還是增加逆向工作者的時間和成本,讓調試者失去耐心、放棄調試。同時,對調試過程中的常用套路進行重點監控、設防,不讓逆向者輕而易舉攻破軟件。

 

1、字符串加密

    大部分逆向軟件的同學都是使用OllyDbg來調試軟件的。通常情況下,他們第一步會找到字符串,藉着這個字符串來找到對應的代碼開始調試。所以,軟件開發者要做的就是對相應的字符串進行加密處理,或者設置多個相同的字符串迷惑調試者。加密可以自己加密,或者用特定的api函數來完成。

 

2、判斷當前進程是否處於調試狀態

    在windows下面有很多的api、寄存器可以判斷當前進程是否處於調試狀態。比如函數IsDebuggerPresent就可以做到這一點。

 

3、關鍵代碼壓縮

    關鍵代碼壓縮是防止代碼被逆向的有效手段,比如用libz壓縮。

 

4、代碼加密

    很多文件其實都可以被加密,比如dll文件、exe文件等等。初期,將dll文件加密變成執行文件的data段,等到執行後重新解密、加載dll,也是不錯的調試方法,比如openssl庫。基本上,有了壓縮和加密之後,靜態彙編分析就會變得很困難。但是還是會存在一個問題,如果在代碼中保存或者生成key,這是需要自己好好思考的問題。

 

5、監控主線程運行時間

    可以設置單個或者多個thread,來監控系統的運行時間。如果系統執行時間明顯過長,也可以判斷出當前發生了異常、或者代碼正在被反編譯、調試中,所以此時可以直接退出程序。

 

6、安全編譯器

    現在有些廠家提供安全編譯器,它可以將原來很簡單的代碼邏輯變得非常複雜,大大增加逆向者的反編譯難度,降低反調試的效率。

 

7、週期性代碼校驗

    如果關鍵代碼發生了修改,那麼代碼週期性校驗也是不錯的一個方法。當然這個方法僅僅比較適合於關鍵代碼段。用多了,軟件的使用體驗會比較差,因爲會佔用很多的cpu資源。

 

8、不定時替換、升級加密算法

    一個軟件不被破解的可能性很低,軟件公司要做的就是儘量讓破解的成本高一點。及時升級和替換不同的加密算法、加密手段、加密密鑰,也是一種有效的辦法。

 

9、大絕招,驅動檢測

    對於那些流量特別大、收入特別高的遊戲軟件來說,軟件安全是十分重要的一部分內容。常用的方法對於普通的逆向程序員或許有用,但是對於資深的程序員來說作用有限。這個時候,很多軟件公司會自己寫一個windows內核驅動(比如虛擬設備驅動),在內核層hook住關鍵API(比如WriteProcessMemory),直接在源頭攔截調試線程,這個方法雖然暴力,但是常常有意想不到的效果。

 

其他:

    很多時候,逆向和用戶體驗是一個相互博弈的過程。很多時候,加密防住了,但是開發人員自己調試也變得很困難,這個時候就得不償失了。所以,兩者總是處於魔高一尺、道高一丈的相持階段。有利益的地方,就有江湖!!!

 

    逆向,反逆向,反反逆向,這是一個循環往復的過程。

 

    如果是利用視頻學習,有一個小甲魚的視頻挺不錯的。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章