LGPL i utrudnianie dekompilacji

0

Piszę pewien program przy użyciu środowiska MonoDevelop.

Słyszałem, że sam MonoDevelop jest na licencji LGPL, czyli mogę uzywać kompilatora za darmo bez żadnych opłat. Jednak chciałbym się upewnić, czy programy napisane przy użyciu MonoDevelop mogę sprzedawać komercyjnie bez udostępniania kodu źródłowego? Słyszałem, że tak, tym bardziej, że spotkałem się z ofertami zatrudnienia jako programista .NET/Mono na Linuxa.

Druga sprawa, to utrudnianie dekompilacji programu.

Jest taki program Artisteer, napisany w .NET. Jak się wczyta Exe do Net Reflector, to nie da rady wyświetlić wielu metod. Jak się wczyta Exe skompilowanego bezpośrednio w MonoDevelop lub VisualStudio, to można odtworzyć prawie cały kod źródłowy. Chciałbym zrobić coś, co zrobili autorzy Artisteera. Słyszałem, że zabieg polegający na utrudnieniu dekompilacji, to jest "obfuscacja". Wpisałem w Google "net obfuscator" i popatrzyłem na wyniki. Moim zdaniem wszystkie obfuskatory różnią się tylko nazwą, bo cel ich użycia takiego programu jest zawsze ten sam, tylko jeden robi to trochę lepiej, drugi robi to trochę gorzej. Dużo było obfuskatorów płatnych, znalazłem darmowy Eazfuscator.NET i SkaterLight. Sprawdziłem efekt działania i w obu przypadkach rzeczywiście w miejscu nazw wszystkich zmiennych pojawił się kwadracik, czyli już cos jest, ale też nie do końca, bo można odtworzyć wszystkie metody (tylko zginęły ich nazwy), w których są wszystkie ify i fory, tylko nie widać, skąd dokąd płyną dane, bo wszystkie zmienne wyglądają tak samo i nie da się odnaleźć która jest która. Czy jest jakiś darmowy obfuskator, który daje pożądany efekt?

0

Niestety MSILa łatwo zdekompilować, gdyż C# z natury korzysta z wielu bibliotek, które nie są zaciemniane - mógłbyś dołożyć co prawda standardowe biblioteki i je zaciemnić, ale rozmiar exeka znacznie by wzrósł. Poza tym MSIL jest dość wysokopoziomowy w porównaniu do asemblera - kod zarządzany explicite musi podawać ilość pól w klasach, ich typ, itp Jest ścisła kontrola typów i zakresów, więc te informacje muszą znaleźć się w MSILu. Gdybyś pisał w kodzie natywnym to kompilator wyrzuciłby wtedy te informacje, ale kompilując do MSILa nie może.

1

Sprawdziłem efekt działania i w obu przypadkach rzeczywiście w miejscu nazw wszystkich zmiennych pojawił się kwadracik, czyli już cos jest, ale też nie do końca, bo można odtworzyć wszystkie metody (tylko zginęły ich nazwy), w których są wszystkie ify i fory, tylko nie widać, skąd dokąd płyną dane, bo wszystkie zmienne wyglądają tak samo i nie da się odnaleźć która jest
która.

Wyobraź sobie czytanie kodu dużego systemu w ten sposób. Albo nawet małego systemu. Jest to bardzo ciężkie, jeśli nie praktycznie niemożliwe...

Czy jest jakiś darmowy obfuskator, który daje pożądany efekt?

No tak... ale co to jest pożądany efekt? Z kodu natywnego (np. C i C++) również można przy odpowiednich umiejętnościach wyciągnąć wszystko co się chce. Znacznie prościej wyciągnąć wszystko z niezabezpieczonej aplikacji natywnej niż z zabezpieczonej obfuskatoren aplikacji .NET.

0
MSM napisał(a)

Czy jest jakiś darmowy obfuskator, który daje pożądany efekt?

No tak... ale co to jest pożądany efekt? Z kodu natywnego (np. C i C++) również można przy odpowiednich umiejętnościach wyciągnąć wszystko co się chce. Znacznie prościej wyciągnąć wszystko z niezabezpieczonej aplikacji natywnej niż z zabezpieczonej obfuskatoren aplikacji .NET.

Wiadomo, że nie ma sposobu, żeby uniemożliwić odtworzenie kodu źródłowego, można to najwyżej utrudnić.

Pożądany efekt jest taki, jak w obrazkach, które mają słowo "artisteer" w nazwie, widać, że program Artisteer jest bardzo dobrze zaciemniony. Oczywiście, dla najlepszego programisty nawet i to nie stanowi problemu.

Natomiast w pozostałych obrazkach jest słaby efekt uzyskiwany z obfuskatorów, które próbowałem.

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