Zaciemnianie / kodowanie c# EXE

0

Cześć,

muszę napisać program, który będzie w stanie zaszyfrować plik EXE napisany w c#. Pierwotny program nie może utracić swojej funkcjonalności. Jak się do tego zabrać? Możecie mnie nakierować na jakieś materiały lub macie jakieś pomysły?

Dodam jeszcze, że zakodowany plik ma działać na maszynie bez dodatkowego pliku do deszyfrowania.

2

Primo to co ty chcesz zrobić, czy masz zaszyfrować plik EXE bo zawiera wrażliwe dane, czy może chodzi o zaciemnienie (obfuskację) kodu tak żeby ktoś nie był w stanie łatwo odtworzyć kodu źrudłowego?

Dla obu przypadków istnieją gotowe narzędzia:

Szyfrowanie najprościej zrobić poprzez zaszyfrowanie pliku DLL następnie odszyfrowania (w pamięci) i załadowanie do .NET.

Inna opcja to kompilacja AOT https://www.codeproject.com/Articles/5262251/Generate-Native-Executable-from-NET-Core-3-1-Proje sam nigdy z tego nie korzystałem więc nie wiem jak bardzo jest to bezpieczne.

0

Jedna sensowna odpowiedź i kilak durnych komentarzy. Myślałem, że na forum dzieli się wiedzą a swoimi frustracjami. Dzięki za pomoc @obscurity czy @jacek.placek

1

@JanekObe: Polecam się. Jak będziesz szukał idiotycznych problemów to zawsze napiszę, że to idiotyczny problem :)

0

@0xmarcin: Tak z ciekawości zapytam . Takie zacienianie nie ma wpływu na wydajność programu ?

0

@Zimny Krawiec: To zależy :D np. zmiana nazw metod na a, b, c... na pozytywny wpływ bo metadane są krótsze, zajmują mniej pamięci itp. Z drugiej strony zamiana każdego string'a na wywołanie metody XyzjF(0x3298383, 0x83838329, 0x382932923) które po drodze będzie wywoływać jeszcze 10 innych metod może mieć dość spory narzut. Najlepiej oczywiście zmierzyć, generalnie zaciemnianie nie zmienia złożoności algorytmów, może tylko zmienić stałą w O-notacji.

Z bardziej zaawansowanych problemów, zaciemniony kod może się gorzej optymalizować. Kompilator C# specjalnie generuje bardzo prosty kod po to żeby łatwiej było optymalizować. Jak każdy if i for zostają zamienione na switch'e to optymalizator może zgłupieć (np. branch prediction).

Szyfrowanie ma negatywny wpływ na czas startu aplikacji.

0

Z ArmDot

Without obfuscation: 0.02298607 ms
Names obfuscation: 0.02341139 ms (+1%)
Control flow obfuscation: 0.06654356 ms (+189%)
Virtualization: 1.5812997 ms (+6779%)

1 użytkowników online, w tym zalogowanych: 0, gości: 1