2014-04-19 34 views
3

在業餘時間,我正在和一些我的朋友做一些逆向工程遊戲,我想知道如何儘可能地防止asm的可讀性。我不想「防止」逆向工程(畢竟它總是可能的),我只是想通過在彙編代碼中對它們進行模糊處理來簡化對函數/變量的理解。在C++中混淆變量和函數名稱以防止基本的逆向工程

例如,如果我宣佈類似,在C++函數:

void thisFunctionReverseAString(std::string& mystring); 

我想,以確保它不會是可能得到的名字thisFunctionReverseAString並從組件mystring。有g++clang++有編譯選項嗎?

+0

相關[混淆C/C++代碼](http://stackoverflow.com/questions/1025494/obfuscating-c-c-code)。我想這不是一個實際的重複,因爲你想要一個編譯器技巧(如果存在) – Leeor

+0

也相關的是[剝離符號](http://stackoverflow.com/questions/5751220/best-way-to-strip-off-symbols ),因爲這似乎是Vincents主要關注的問題。 – PeterT

回答

5

混淆只會幫助源代碼。沒有調試信息的可執行文件不包含變量名稱或函數名稱。

逆向工程的方法,將涉及:

  1. 可執行轉換爲彙編語言代碼。
  2. 將彙編代碼轉換爲高級語言代碼。
  3. 理解順序命名的函數和變量。

例如,在FORTRAN(或編譯的BASIC)中取一個可執行文件並將其逆向工程轉換爲C++源代碼。

正如其他人所說,有一些功能可以從調試版本的可執行文件中刪除符號。您可以從頭開始創建不帶符號的可執行文件,通常稱爲版本版本。

3

使用strip從Linux中的可執行文件中刪除符號。在Windows上簡單刪除pdb文件。

+1

顯然'-s' g ++選項可以完成這項工作。 – Vincent