2013-05-19 12 views
6

Zrobiłem więc aplikację z wizualnym 2012, który ładuje obrazy i shadery (zwykły tekst). Ale tak naprawdę, nie chcę, aby ludzie otwierali obrazy i shadery i bałagani. Jak mogę skompresować wszystkie te pliki zewnętrzne do jednego lub wielu plików, ale nadal możliwe do odczytania przez plik wykonywalny?Jak kodować pliki zewnętrzne, które pochodzą z .exe

+0

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

+1

Czy próbujesz uniemożliwić osobom, które wykorzystują twoje obrazy i shadery do użycia w innych celach, lub osobom, które je modyfikują, aby Twój program wyglądał lub zachowywał się różnie? Lub oba? Ten pierwszy wymaga pewnego rodzaju szyfrowania lub zaciemniania, podczas gdy drugi wymaga jedynie sprawdzenia poprawności. Ponadto oba zadania są praktycznie niemożliwe w stosunku do określonego agresora, chyba że masz zabezpieczone przed manipulacją wsparcie sprzętowe, więc inne pytanie brzmi: jak trudno to zrobić? Zniechęcanie zwykłego użytkownika nie będzie trudne, ale poważny haker to inna historia. – rhashimoto

+0

Cześć, dziękuję za odpowiedź. Cieszę się z prostego, tak, że nie mają łatwo obrazów, shaderów, modeli itp. – marcg11

Odpowiedz

5

Na to pytanie trudno jest odpowiedzieć autorytatywnie, ponieważ bez odpornego na manipulacje sprzętem jest zasadniczo niemożliwe zabezpieczenie zawartości przed wyrafinowanym hakerem. Ale biorąc pod uwagę wyjaśnienie, że prosty środek odstraszający jest wystarczająco dobry, a może po prostu embedding your content as resources in the executable? Zwróć uwagę, że istnieją narzędzia dostępne bezpłatnie do wyodrębniania zasobów z plików .exe.

Można również zaszyfrować każdy plik i odszyfrować go po załadowaniu aplikacji. Szyfrowanie może być tak proste, jak dwukrotne archiwizowanie każdego bajtu ze znanym stałym bajtem lub można użyć prawdziwego algorytmu szyfrowania podobnego do algorytmu Microsoft CryptoAPI. Użycie prawdziwego algorytmu poprawi zaciemnianie, ale nadal nie będzie naprawdę bezpieczne.

Oto prosty program, który wykorzystuje this RC4 implementation (który jest łatwiejszy w użyciu niż CryptoAPI) do szyfrowania i deszyfrowania plików i zapisywać je na standardowe wyjście:

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

Należy pamiętać, że nie jest to bezpieczny sposób na wykorzystanie RC4 a sam algorytm RC4 nie jest już uważany za bezpieczny.

+0

Ściśle mówiąc, nieodpowiedzialne jest odwoływanie się do prostych xorów jako "szyfrowanie". –

+1

@IronSavior Próbowałem zgiąć się do tyłu, aby powiedzieć, że to nie jest bezpieczne. Istnieje całe spektrum algorytmów szyfrowania - niektóre są (jak wierzy) bezpieczne, a inne nie. XOR jest przykładem szyfru zastępczego - nie zgodziłbym się z tym, że szyfry zastępcze nie są prymitywną formą szyfrowania. – rhashimoto

+0

Czy możesz podać kod do szyfrowania i odszyfrowywania plików? Jak by to działało? – marcg11

2

zakodować pliki do swojego pliku wykonywalnego w kodzie źródłowym. Utwórz tablicę z każdym bajtem pliku zakodowanego jeden bajt na raz. Jest to bardzo prosta technika dołączania danych do pliku wykonywalnego.