2008-09-24 156 views
0

所以,我喜歡復活節彩蛋...這可以追溯到我成爲復活節彩蛋檔案社區的一部分。代碼混淆?

但是,我也做了很多開源編程。

我想知道的是,您認爲什麼是系統化和方法性混淆代碼的最佳方式。

首選PHP/Python/C/C++中的示例,但在其他語言中的示例是正確的,如果方法得到正確解釋。

+2

我沒有看到你關於復活節彩蛋和開源的聲明與代碼混淆有關。你的問題被混淆了嗎? :-) – Hobbo 2008-09-24 06:45:58

+0

我可能會在這裏很沉悶(昨晚的小睡覺),但你想混淆開源代碼?這不是針對開源真正的那種嗎?我會說,而不是隱藏它,只是讓它不那麼明顯。只要把雞蛋埋在沒有多少人可能會看的地方。 – 2008-09-24 07:17:58

+0

我想說清楚,復活節彩蛋基本上是存在的......或者製作一些邪惡的代碼,希望花費更長時間才能發現它比偶然發現復活節彩蛋時更容易。 – Mez 2008-09-24 07:30:17

回答

3

在這種情況下,您應該使用/寫入「混淆器」。一個爲你完成這項工作的計劃。

Salamander混淆器可以用來混淆.Net程序,但它更多的是防止反編譯,因此不完全是你所需要的。

瞭解用C混淆的好地方是International Obfuscated C Code Contest

1

的問題是,如何在不出現它執行另一個函數來創建在衆目睽睽(開源)看似非混淆代碼。

1

一些明顯的方法:

  • 刪除註釋,並儘可能空白,你可以不打破東西
  • 結合線
  • 重命名變量和函數是無意義的(最好是1個字符)
4
  1. 通過完全優化編譯代碼。完全去掉二進制文件。
  2. 在代碼上使用反編譯器。

我可以保證結果會是這樣完全不可讀的,你甚至不會能夠閱讀它;)

1

有關的代碼系統,有條理的混淆,你不能擊敗的Perl。如果你想要一些編譯成二進制文件的東西,總會有APL。

如果您的目標是.NET框架,請將您的復活節彩蛋源代碼作爲binhex字符串放在資源文件中。然後你可以讓你的一個初始化例程獲取它,解碼並編譯到內存中。你可以使用反射來調用它。

如果您需要編譯到內存中的技術方面的幫助,並調用生成的程序集,我可以給你我編寫的庫和使用它的示例程序。

你可以使用這項技術來加載插件,這是一個合理的事情要做和合理的初始化。

2

本着重命名符號的精神:通過命名具有相同名稱的不同變量來過度使用範圍和可見性規則。