2016-11-29 46 views
-2

我一直在做一些混淆研究,我想知道如何有效地優化混淆代碼。在混淆C++代碼中使用優化

優化代碼是否會從程序集中移除能夠幫助別人逆向工程代碼的東西?

更一般地說,代碼優化是否會使程序集更難理解?一般的答案是好的,我只是想了解兩者之間的相關性,如果有的話。

編輯:這是不是一個客戶,這是休閒迷惑和好奇

+2

不是非常有效。任何有能力的裝配程序員和/或逆向工程師都有閱讀優化代碼的經驗,因爲每個人都將其編譯器設置爲發佈版本。更一般地說,混淆並不是非常有效。你可以期望的最好的方式是減慢一個好的逆向工程師,或者可能停止腳本小子。如果你的應用程序值得破解,有人會破解它。專注於使它值得開裂,這也將使得值得爲之付費的人值得。 –

回答

2

當您向客戶提供二進制可執行文件或庫時,對C++代碼進行模糊處理毫無意義。

模糊處理通常用於解釋語言來阻礙逆向工程。然後這是由軟件完成的,以便原始代碼可讀/可維護。

至於影響性能。模糊處理通常會給變量/函數賦予隨機和無意義的名字,同時刪除空白。這不會影響C編譯的二進制文件。因此根本沒有任何區別。

2

代碼混淆可能意味着不同的事情。通常,它指的是使代碼更難或不可讀的技巧。

沒有特別涉及優化的混淆結果。您可能會想到更多簡潔的代碼,可以在某些情況下(或者至少用於)使代碼更難以閱讀和更高效地運行。但是,今天的編譯器通常不會這樣,而且與混淆無關。

+0

哎呀,如果您足夠好地混淆了源代碼,那麼在編譯器完成優化之前,您的代碼可能會更容易被讀取。 – user4581301

+0

因此,使用標誌沒有什麼特別的作用,使組裝變得困難?當我看着調試時,它看起來有點奇怪,我驚訝地發現它並沒有超出我的想象。 – Semaphore

+0

@JayM。編譯器將會採用瘋狂的混淆混亂的源代碼,並將其解析爲[語法樹](https://en.wikipedia.org/wiki/Abstract_syntax_tree)。一旦它有一棵樹,它會過濾箔條,移動節點,否則強制樹上的正確順序,這樣可以使輸出程序運行得更快。然後,隨着樹被轉換爲機器指令,事情會再次變得瘋狂,但是對於那些熟悉處理器和編譯器的人來說,輸出中會有不同的模式。 – user4581301