2017-04-10 32 views
-1

我正在做一個需要用戶反編譯二進制文件的crackme挑戰。強制編譯器接受一個未使用的字符串?

我嘗試包括以下絆倒了誰試圖扭轉使用字符串二進制用戶:

const string pointless = "Strings would be too easy"; 

不幸的是沒有在我的代碼引用這個地方的冗餘代碼在編譯時刪除。有什麼辦法可以告訴編譯器包含它嗎?

+0

你可以用無意義的方式引用它。 –

+0

@RaymondChen我同意,但我想知道是否有更好的方法! – Codingo

回答

3

使用變量是保持編譯代碼中變量的唯一方法。現在接下來不要在編譯代碼中使用這個使用語句。

所以最後我們有兩個任務。

  • Use variable
  • 然後not to get this using code in compiled code

,你知道,如果你使用你會得到它在編譯的代碼是肯定的。我們將使用該變量Debug類,所以你將只能得到,如果你編譯成debug模式,如果您編譯相同的代碼,release模式下,你不會得到這個using your variable代碼。如下所示 -

const string pointless = "Strings would be too easy"; 
Debug.WriteLine(pointless); 

現在因爲您已經使用了該變量,它將不會從編譯格式中刪除。現在,如果您編譯代碼debug你會得到這個Debug.WriteLine(pointless);

但現在編譯代碼爲release模式,你會得到你的變量,但不是這個Debug.WriteLine(pointless);

希望它能幫助。!