Wpis z mikrobloga

#csharp #programowanie

Mirki, da się jakoś zrobić aby .dll C# nie dało się odczytać na źródle? Bo zrobiłem .dll gdzie są wpisane sygnatury itd. generalnie prywatne rzeczy, wysyłam kierownikowi a on mi z tego odzyskał kod źródłowy jakimś narzędziem do inżynierii wstecznej. I to nie, że jakiś przybliżony kod - to jest #!$%@? jeden to jednego, linijka do linijki, enter do entera. Tylko komentarzy nie odzyskało. Serio CIL się da tak banalnie odkręcać? O.o Specjalnie robię .dll bo myślę sobie "jeb hasła i inne gówna w hardcode, żeby nie dało się odczytać", a tu taki #!$%@?...
  • 13
@PhoenixSoul: @ghostface: No to jak to przechowywać? W C++ bym to #!$%@?ł na chamca w kod i po kompilacji by potrzeba było niezłego hakera żeby to odzyskał ze skompilowanej sieczki. A tutaj w dwa kliknięcia źródło odzyskane, no jaja.
@Khaine: IL i w konsekwencji cały .NET ma to do siebie że łatwo go dekompilować do pierwotnej postaci. Nigdy nie dociekałem dlaczego. Nigdy nie próbowałem obfuskować kodu bo jest to zwyczajnie nieopłacalne. Zamiast tego udostępniaj funkcjonalność aplikacji w API.
@PhoenixSoul: Obfuscatorem kodowanie stałych chyba działa. Już się nie da odczytać. Ten string po prostu musi być w taki sposób, bo to jest string, który wchodzi do bazy jako SQL. A rzecz jest za mała, żeby dla niej specjalnie jakieś cuda wyczyniać, lepiej faktycznie obfuscować .dll i mieć w dupie.
@fizyk20: Tak, ale generalnie wiadomo że "oo z C++ to się nie odzyska", więc ktoś musiałby mieć na tyle zawzięcia aby w ogóle chciało mu się z tym bawić i próbować. A nie, że dwa kliki i już.
@Khaine: możesz próbować te stringi zapisywać z jakimś xorem, albo innym przesunięciem. Obok funkcja która to dekoduje live.
Jak kto jest cienki to mu się nie będzie chciało tego odkodowywać, ale generalnie wszystko co jest zapisane w kodzie jest do odzyskania.
@Khaine: IL to jednak wyższy poziom abstrakcji niż kod maszynowy, już to znacznie ułatwia sprawę a masz jeszcze metadane... Są narzędzia do które to utrudniają Przechowywanie połączeń SQL bezpośrednio w kodzie, to bardzo, ale to bardzo zły pomysł. Wystarczy użyć refleksji i "na pałę testować" każdy string i już twoja baza nie jest bezpieczna.
Druga sprawa zmienia się struktura bazy danych, hasło - cokolwiek co wymusi edycję "sql stringa" musisz edytować