2013-05-19 3 views
6

kommen, zu encodieren Also machte ich eine Anwendung mit visuellen 2012, die Bilder und Shader (Klartext) load. Aber wirklich, ich möchte nicht, dass Leute die Bilder und Shader öffnen und herumspielen. Wie kann ich alle diese externen Dateien in eine einzelne oder mehrere Dateien komprimieren, aber immer noch lesbar für die ausführbare Datei?Wie externe Dateien, die mit der .exe

+0

[zlib] (http://en.wikipedia.org/wiki/Zlib) – deepmax

+1

Sie versuchen zu verhindern, dass Personen Ihre Bilder und Shader für andere Zwecke verwenden, oder wenn Benutzer sie so ändern, dass Ihr Programm aussieht oder sich verhält anders? Oder beides? Ersteres erfordert eine Art von Verschlüsselung oder Verschleierung, während letzteres nur eine Validierung erfordert. Außerdem sind beide Aufgaben gegen einen entschlossenen Angreifer praktisch unmöglich, es sei denn, Sie haben eine manipulationssichere Hardware-Unterstützung, also ist eine andere Frage, wie schwierig Sie es machen wollen? Ein zufälliger Benutzer zu entmutigen wird nicht schwer sein, aber ein ernsthafter Hacker ist eine andere Geschichte. – rhashimoto

+0

Hallo Danke fürs Beantworten. Ich bin glücklich mit einem einfachen, nur damit sie die Bilder, Shader, Modelle usw. nicht so leicht bekommen. – marcg11

Antwort

5

Diese Frage ist schwer zu beantworten, denn ohne manipulationssichere Hardware ist es im Grunde unmöglich, Inhalte gegen einen erfahrenen Hacker zu sichern. Aber angesichts der Klarstellung, dass eine einfache Abschreckung gut genug ist, wie wäre es mit nur embedding your content as resources in the executable? Beachten Sie, dass es Tools gibt, die frei verfügbar sind, um Ressourcen aus EXE-Dateien zu extrahieren.

Alternativ können Sie jede Datei verschlüsseln und entschlüsseln, wenn Ihre Anwendung sie lädt. Die Verschlüsselung könnte so einfach sein, wie jedes Byte mit einem bekannten konstanten Byte zu kodieren, oder Sie könnten einen echten Verschlüsselungsalgorithmus wie einen von der Microsoft CryptoAPI verwenden. Die Verwendung eines echten Algorithmus wird die Verschleierung verbessern, ist aber immer noch nicht wirklich sicher.

Hier ist ein einfaches Programm, das this RC4 implementation verwendet (die als CryptoAPI zu verwenden leichter ist) zu verschlüsseln oder eine Datei zu entschlüsseln und zu stdout schreiben:

#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; 
} 

Beachten Sie, dass dies nicht eine sichere Art und Weise ist RC4 zu verwenden und der RC4-Algorithmus selbst wird nicht mehr als sicher angesehen.

+0

Streng genommen ist es unverantwortlich, auf eine einfache XOR als "Verschlüsselung" zu verweisen. –

+1

@IronSavior Ich habe versucht, mich nach vorne zu beugen, um zu sagen, dass das nicht sicher ist. Es gibt ein ganzes Spektrum von Verschlüsselungsalgorithmen - einige sind sicher und manche nicht. XOR ist ein Beispiel für eine Substitutions-Chiffre - ich würde nicht zustimmen, dass Substitutions-Chiffren keine primitive Form der Verschlüsselung sind. – rhashimoto

+0

Können Sie Code zum Verschlüsseln und Entschlüsseln von Dateien bereitstellen? Wie würde es funktionieren? – marcg11

2

Encode die Dateien in der ausführbaren Datei im Quellcode. Erstellen Sie ein Array, wobei jedes Byte der Datei jeweils ein Byte codiert ist. Es ist eine sehr einfache Technik, um Daten in eine ausführbare Datei einzuschließen.

Verwandte Themen