我不會投入太多精力去做這件事,因爲逆向工程師會贏得這一輪。
https://softwareengineering.stackexchange.com/questions/155131/is-it-important-to-obfuscate-c-application-code
混淆C++的二進制文件是有點的一場敗仗。這取決於你處理的是誰,但是如果你的逆向工程師足夠聰明,可以使用IDA Pro和一些插件,以及一個好的調試器,那麼它應該是徒勞的。
混淆優先
老實說,這並沒有太大的幫助,因爲最終你的代碼將不得不調用某種非混淆的共享庫來完成任何事情。在某些時候,您將使用標準庫或STL,甚至可以進行系統調用。
,這樣反向工程師可以有一個調試器樂趣。反分析技術對逆向工程師來說是衆所周知的,他們幾乎可以用像ollydbg這樣的調試器繞過。
即反向工程師喜歡一起玩。再次,這是一個預期的舉措,並且迴應是僅僅繞過有問題的代碼,或者修改掉陷阱。任何接受RE正式培訓的人都會感受到這一點。
- 將我的二進制文件的大部分打包到一個加密區域,該區域在執行之前由存根進行解密。
與上述相同的答案。逆向工程師從第一天開始訓練。
請記住,反向工程師正在尋找信息的有針對性的信息 - 他們很少嘗試重新創建整個應用程序。安全密集型代碼,許可證驗證代碼,家庭基礎通信代碼,網絡代碼。這些都是主要目標 - 把你的精力放在讓這些棘手的地方生活。
請記住,地球上最大的公司的二進制文件通常會在20年代初期被人們反向設計。
不要將您的調試符號留在最終的二進制文件中,因爲這些符號肯定有助於分析。
如果你是專門做這件事的話,還專注於浪費工程師時間 - 時間總是對付逆向工程師。
請記住,任何有意義的混淆可能也會使性能增益成本上升,因此首先在C++中工作是合理的。 C世界中有很多區域(對於Java世界而言),在那裏無法實現有意義的混淆。例如遊戲不能隱藏他們對OpenGl API的調用,也不能真正阻止工程師收集他們的着色器代碼。
另請注意,逆向工程師大多數時間在程序集級別上查看您的代碼。他寧願有你的功能名稱,但如果需要的話,他可以沒有它。他可以看到你的程序在儘可能最有限的水平上正在做什麼。他發現關鍵的例程只是時間問題。
爲了您的目的,找到一個程序來破解函數名稱,讓老闆高興,並稱之爲一天。至少在那個時候,逆向工程軟件將不會是微不足道的。
你是模糊源代碼還是二進制代碼? – baordog 2015-02-23 02:45:52
它將作爲一個.so文件分發,但我認爲或者是可以接受的,只要最終的結果是一個對於逆向工程來說,這將是一個挑戰 – ahjohnston25 2015-02-23 02:46:34
這可能是最好的問候在stackoverflow – Shelvacu 2015-02-23 05:56:20