因此,我用visual 2012製作了一個應用圖像和着色器(純文本)的應用程序。但是,真的,我不希望人們打開圖像和着色器並且四處亂竄。我如何將所有這些外部文件壓縮爲單個或多個文件,但仍然可執行文件可讀?如何編碼.exe附帶的外部文件
回答
這個問題很難以權威的方式回答,因爲沒有防篡改硬件,對於複雜的黑客來說,保護內容本質上是不可能的。但是,鑑於一個簡單的威懾力是足夠好的澄清,那麼embedding your content as resources in the executable呢?請注意,有免費的工具可以從.exe文件中提取資源。
或者,您可以加密每個文件並在您的應用程序加載時對其進行解密。加密可以像使用已知恆定字節對每個字節進行異或操作一樣簡單,或者您可以使用真正的加密算法,如Microsoft CryptoAPI。使用真正的算法會改善混淆,但仍然不會真正安全。
下面是一個使用this RC4 implementation(這是很容易,CryptoAPI的使用)來加密或解密文件,並將其寫入到標準輸出一個簡單的程序:
#include <algorithm>
#include <iostream>
#include <fstream>
#include <iterator>
#include <vector>
// insert RC4 implementation here
int main(int argc, char *argv[]) {
const std::string password = "no more secrets";
const std::string filename = argv[1];
// Read file into a buffer.
std::ifstream f(filename.c_str(), std::ios::in | std::ios::binary);
std::vector<char> buffer;
f >> std::noskipws;
std::copy(
std::istream_iterator<char>(f), std::istream_iterator<char>(),
std::back_inserter(buffer));
// Initialize the key from a password.
rc4_key key;
prepare_key((unsigned char *)password.data(), (int)password.size(), &key);
// Encrypt or decrypt (same operation).
rc4((unsigned char *)&buffer[0], (int)buffer.size(), &key);
// Write result to stdout.
std::cout.write(&buffer[0], buffer.size());
return 0;
}
注意,這是不使用RC4的安全方式而RC4算法本身不再被認爲是安全的。
嚴格地說,將簡單的xor稱爲「加密」是不負責任的。 –
@IronSavior我試圖向後彎腰說這是不安全的。有一整套的加密算法 - 有些(相信)是安全的,有些則不是。異或是替代密碼的一個例子 - 我不同意替換密碼不是原始形式的加密。 – rhashimoto
你能提供一些加密和解密文件的代碼嗎?它將如何工作? – marcg11
退房http://en.wikipedia.org/wiki/PAK_(file_format)
沒有爲Quake2中百文件在SourceForge庫:http://sourceforge.net/projects/paklib/
不過,我建議直接到源:https://github.com/id-Software/Quake-2/blob/master/qcommon/files.c
編碼文件到源代碼可執行文件。創建一個數組,文件的每個字節一次編碼一個字節。將數據包含在可執行文件中是一種非常簡單的技術。
- 1. 密碼保護外部EXE文件?
- 2. 如何使用Nuget包附帶的鏈接的exe文件
- 3. 在MFC中啓動外部exe文件,如果已打開,如何將exe文件帶到前面?
- 4. PHP郵件帶附件 - 額外的文件:部分1.4
- 5. MFMailComposeViewController帶有外部字符的文件附件名稱
- 6. 如何在Python 3中將字典編碼/解碼爲外部文件/從外部文件解碼?
- 7. 如何將外部編碼字符寫入文本文件
- 8. 如何在Visual Studio 2010中調試帶附件的構建.exe
- 9. 如何合併WinForms中的外部文件exe
- 10. 運行exe文件,包括外部dll
- 11. 通過fscommand打開外部exe文件
- 12. Java - 執行外部exe文件
- 13. 詞典:硬編碼與外部文件
- 14. 拼圖。帶有編碼文本的Txt文件。如何解碼?
- 15. 如何使用Java創建外部.exe文件
- 16. 如何使用外部.dll創建.exe文件?
- 17. 如何在C中打開外部EXE文件?
- 18. 如何在編譯時從外部文件導入Perl代碼?
- 19. 如何僅使用外部文件編寫JavaScript代碼
- 20. 如何在我的C++代碼中部署一個exe文件?
- 21. 如何編輯/更新exe文件的版本?代碼
- 22. 如何更改sp_send_dbmail附件的編碼?
- 23. C++將外部.exe嵌入到我編譯的.exe中
- 24. aws:帶附件的文件
- 25. 如何設置System.Net.Mail.MailMessage的附件文件編碼?
- 26. 如何安全地編輯exe文件?
- 27. SVG和帶外部Javascript文件的HTML
- 28. 使用帶變量的外部文件
- 29. 帶功能的外部文件
- 30. 如何使用StreamWriter使用C#代碼編寫.exe文件?
[zlib](http://en.wikipedia.org/wiki/Zlib) – deepmax
您是否試圖阻止人們將您的圖像和着色器用於其他目的,或者修改它們以使您的程序看起來或行爲不同?或兩者?前者需要某種加密或混淆,而後者只需要驗證。另外,除非您擁有防篡改的硬件支持,否則這兩項任務對於堅決的攻擊者實際上是不可能的,因此另一個問題是您想要實現它有多困難?勸阻臨時用戶不會很難,但嚴重的黑客是另一回事。 – rhashimoto
嗨,謝謝你的回答。我很高興有一個簡單的例子,所以他們不會輕易獲得圖像,着色器,模型等。 – marcg11