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
Odpowiedz
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.
Ściśle mówiąc, nieodpowiedzialne jest odwoływanie się do prostych xorów jako "szyfrowanie". –
@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
Czy możesz podać kod do szyfrowania i odszyfrowywania plików? Jak by to działało? – marcg11
Wyjazd http://en.wikipedia.org/wiki/PAK_(file_format)
Jest biblioteka na SourceForge plików PAK Quake2: http://sourceforge.net/projects/paklib/
Ja jednak polecam przechodząc bezpośrednio do źródła: https://github.com/id-Software/Quake-2/blob/master/qcommon/files.c
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.
- 1. Jak przechowywać pliki w EXE
- 2. Jak ukryć wiadomości w konsoli, które pochodzą z elementów iframes
- 3. Jak podświetlić daty kalendarza, które daty pochodzą z bazy danych
- 4. jak pobierać pliki zewnętrzne w gradle?
- 5. Jak uruchamiać pliki exe w skrypcie NSIS?
- 6. Gdzie @Context obiekty pochodzą z
- 7. Skąd pochodzą pakiety PHP Composer?
- 8. Zaktualizuj wszystkie pakiety pip, które nie pochodzą od Conda.
- 9. Pliki hostowane przez HTTPS i zewnętrzne (CDN)?
- 10. Cross skompilować 64-bitowe pliki .exe z linux
- 11. Jak Python zamyka pliki, które zostały gc'ed?
- 12. jak kodować pasek postępu
- 13. Jak kodować słownik Pythona?
- 14. Jak otworzyć plik .exe z innego pliku C++ .exe?
- 15. Skąd pochodzą dane User.Identity?
- 16. Jak kodować demona Mono
- 17. Jak kodować zapisane komentarze?
- 18. Jak kodować procentowo w Javie?
- 19. Gdzie "." i "..." pochodzą od?
- 20. jak kodować piękne PHP razem z HTML?
- 21. Skąd te wątki 1k pochodzą z
- 22. W jaki sposób pliki uzyskują zewnętrzne zależności w MSVC++ 2010?
- 23. Uruchamianie .exe z JavaScript
- 24. Jak upewnić się, że żądania pochodzą z mojej witryny?
- 25. Jak kodować ROT13 w Pythonie3?
- 26. Jak kodować obraz base64 javascript
- 27. jak kodować/dekodować prosty ciąg
- 28. Jak kodować moduł jądra Linux?
- 29. Czy można dołączyć zewnętrzne pliki do manifestu pamięci podręcznej?
- 30. Jak eksportować pliki exe w Visual Studio z wszystkimi używanymi plikami
[zlib] (http://en.wikipedia.org/wiki/Zlib) – deepmax
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
Cześć, dziękuję za odpowiedź. Cieszę się z prostego, tak, że nie mają łatwo obrazów, shaderów, modeli itp. – marcg11