2015-09-25 63 views
0

[這個問題與登錄憑證或用戶/玩家輸入任何類型的密碼短語等無關;感謝你和請繼續閱讀。]處理資源解密密碼

首先,我的問題已經有點被問,herehere。我的問題與這兩者中的任何一個都不同,因爲我不通過互聯網獲取數據或關注任何類型的「登錄」。爲了簡單起見,我正在製作一款遊戲,並將我的遊戲資源全部加密爲專有格式,這需要一個密碼來解密數據。我必須在源代碼中隱藏該密碼。除了將密碼保存在應用程序本身之外,我想不出其他任何方式。在另一個文件中加密密碼仍然需要一個密碼,並且這開始了無限循環的隱藏該密碼的地方,等等。

這讓我想知道現代遊戲如何處理他們的資源解密密碼?想像使命召喚,上古卷軸,俠盜獵車手等遊戲,他們加密他們的數據,對吧?這意味着他們需要密碼/ salt/etc來解密它。這樣的密碼也需要在可執行文件中。 那麼他們在哪裏隱藏它?他們如何混淆它?

我考慮過一個選項,這看起來確實很不錯。基本上,我會構建一種方法,它可以通過一些數學計算的訣竅,構造一個字符串,並返回數據作爲密碼。有人可能只是撕裂的方法出來的代碼,然後在自己的私人應用程序啓動它,但至少不會是這麼明目張膽爲:

public const string ResourceDecryptionPassword = "MY_AWESOME_DECRYPTION_PASSWORD"; 

另外,我考慮只保留密碼作爲一個大的硬編碼陣列的字節,我可以在應用程序啓動時將其轉換回字符串。

任何人都可以提出任何其他解決方案來解決這個問題嗎?

此外,我忘了提及:我的遊戲的源代碼將obuficated。這是一件不容易的事情,所以它已經很難直觀地瀏覽代碼。我只需要一個很好的解決方案如何隱藏我的加密資源的密碼。

+0

爲什麼你認爲遊戲加密他們的資產?你說「數據」,但是什麼樣的數據?圖片?保存文件?將密鑰嵌入應用程序永遠不會得到合理的保護。我可以使用WinDbg,並在你調用Decrypt或者你調用它的任何地方放一個斷點,看看傳入了什麼鍵。你不需要源代碼來調試應用程序。 – vcsjones

+0

@vcsjones Data =圖像,模型,着色器,資源,默認遊戲數據。 – Krythic

+0

因此,您想要使用唯一的登錄密碼/密鑰來分發離線遊戲來解鎖它嗎?用戶在解鎖遊戲後是否可以更改此密碼?或者這是一次性在單個設備上解鎖?您可以使用許可證管理器。或者您是否希望爲每個發佈的遊戲使用相同的密碼? – Oceans

回答

1

根據您收到的評論,您已經知道在代碼中「隱藏」安全密鑰是而不是是一種很好的做法。它是Security through obscurity而不是efficient

對於遊戲,它很久以前就被使用了。隨着萬維網的發展,遊戲需要在線連接來註冊/激活遊戲。
然而,這些遊戲非常受歡迎,最終他們都被破解(通過替換在線激活的虛擬支票)。這就是現代遊戲內容(如果不是全部)的一大部分現在僅在連接到遊戲服務器時纔可用的原因。

無論如何,有些遊戲保留舊計劃的一部分並使用DRM而其他遊戲(Pillars of Eternity)沒有任何遊戲。

常見原理是所有的DRM都是使關鍵(或整個程序的調試)的逆向工程變得困難:易於計算,難以調試。

  • 像一百個左右的嵌入式加密/解密(數百個密鑰)。
  • 另一個例子是DRM software將代碼處理成虛擬機。
  • 調用非託管代碼來解密數據。
  • 檢測任何調試器並殺死它。
  • 生成解密非託管代碼,編譯並運行它。

任何足夠複雜的事情都可以。

我甚至見過一些財務知名的控制檯,當VNC在機器上運行時拒絕啓動...其他人抱怨Process Explorer。
但是,這樣的隱藏工作很複雜,如果您說代碼會被混淆,那麼應該由混淆軟件來處理。
順便說一句,如果你的目的是玩遊戲,你不應該錯過windbg