當前位置:編程學習大全網 - 腳本源碼 - 如何讓C++寫的dll不被反編譯?

如何讓C++寫的dll不被反編譯?

簡單回答:

1、理論上不能保證程序不被反編譯。

2、壹些加殼軟件可以做到加大被反編譯的難度,迫使操作者先解殼才能做反編譯,但同時會降低程序的運行效率。

3、當前的技術條件下,壹般而言,反編譯出的“源代碼”壹般而言並不能作學習,參考的源代碼,多數情況下只能用於分析區部片斷分析,主要用於破解或小範圍類修改。

4、壹些簡單的加殼軟件:ASPACK、UPX、PECompact等,如果想嘗試,自個去搜索下載後試試。加殼後的軟件還有可能被某些殺軟當成惡意軟件。

5、這也正是很多對安全要求高的系統使用“三層架構”(類似訪問網頁/網站)的原因。因為在三層架構中,核心軟件、數據不被用戶直接接觸。

************以下是相關知識,有耐心可看看************

壹、關於反編譯與破解。

1、以當前的技術來說,理論上,所有的程序都存在被反編譯的可能。

2、但是反編譯出來的代碼並不壹定能被技術不高的人看懂,因為反編譯出來的“源代碼”與編寫者寫出的原代碼在80%以上是不同的。這是因為反編譯的原理是根據機器碼(或中間碼),讓機算機進行反向生成高級語言,而不是找出編寫者原有的代碼,找出原有的代碼是不可能的。反編譯出來的代碼在可理解性、可閱讀性上,壹般而言是非常差的。

3、但是,這並不代碼反編譯出來的“源代碼”沒有價值,對於內行來說,分析反編譯出來的代碼中的某些特定片段,就可以對程序進行破解,找出程序的關鍵點、口令、數據來源等等。因為破壞總是比建設要容易,分析局部比規劃全局要容易得多。

4、如果考慮到被反編譯將關鍵代碼進行特殊處理的話,可能加大相關的難度,比如將特定的字符串分成多個字串在程序中存儲,或是進行加密後存儲,在使用時合成/生成,不用時即時在內存中清除等等……。

5、反編譯後對關鍵部分的定位往往是根據字符串來進行的,比如在用戶沒有註冊時,跳出壹行對話,告訴用戶“請註冊後再使用”,破解者就會在反編譯後追查這個字串所在,然後查到這個字串對應的變量與地址,再追查調用這個變量或地址的代碼,然後再延伸查到什麽情況下調用“調用這個變量或地址的代碼”,最後,設定跳過語句。這就是最典型的破解註冊的方法。破解完再將修改了的“源代碼”進行編譯,或是根據“源代碼”直接修正程序中對應的代碼,OK,破解版正式完成。

二、關於加殼。

1、理論上,同樣,沒有破解不了的殼。

2、但是有些加殼軟件使用了壹些特別的方法,使得破解殼的難度變得非常難,技術不夠的朋友很難下手,比如將原程序代碼拆分、變型、植入自校驗等等技術。

3、但加殼軟件同樣是程序,它自身就存在被反編的可能,加了殼可以類比成,在壹個木箱外面再加個保險櫃。但千萬別以為保險櫃就壹定是保險的,面對各種技術開鎖、暴力開箱,再強的保險櫃也只能是加大難度而已。

4、越復雜的加殼,就會使得程序運行時效率降得越低,這是必然的,因為原本只關註目標任務的程序現在還要時時提防著被提取、被監測。

  • 上一篇:觸目驚心電影完整劇情
  • 下一篇:民間流傳的定雞術是真的麽?
  • copyright 2024編程學習大全網