C2C

środa, października 31, 2007

Reverse engineering w toku...

Aktualnie (poza wieloma innymi rzeczami) zajmuje się reverse engineeringiem, co w moim przypadku oznacza przywracanie do życia pewnej aplikacji .NET-owej, której to kod źródłowy poszedł w niepamięć wraz z poważnym uszkodzeniem dysku twardego.

Na początku robiłem jedynie drobne poprawki - a tu string, a tu właściwość. Jak to wygląda? W sukurs przychodzą nam dwa narzędzia, wchodzące w skład Visual Studio lub .NET Framework SDK - ILDasm oraz ILasm. Pierwsze narzędzie (ILDasm) służy do przekształcenia kodu binarnego na kod w CIL. W kodzie CIL bezporblemowo możemy "z palca" wpisać nasze własne stringi, bez konieczności wchodzenia w arkany kodu. Całość składamy z powrotem przy pomocy drugiego narzędzia (ILasm).

Przykładowe wywołanie ILDasm :

ildasm /out=program.il program.exe

Przykładowe wywołanie ILasm :

ilasm /exe /optimize /output=program_nowy.exe program.il

Obydwie aplikacje wołamy z Visual Studio Command Prompt. Dodatkowo ILDasm jest dostępny jako aplikacja okienkowa, z której to możemy popodglądać kilka ciekawych rzeczy dostępnych w naszym kodzie. Warto przeczytać ten post na codeguru.pl, obydwie aplikacje są opisane w nieco szerszy sposób.


Co dalej?

A co zrobić, gdyby grzebanie w CIL-u nam nie wystarczyło (czyli mój przypadek?). Używamy świetnego narzędzia, które to zwie się Reflector! Wybieramy plik wykonywalny naszej aplikacji, Reflector automatycznie zaimportuje odpowiednie przestrzenie nazw, następnie opcja Extract i gotowe! Nasz kod źródłowy dostępny jest na dysku! Pytanie tylko jak... różnie. Nikiedy będzie się nadawał bezpośrednio do edycji, z reguły jednak Reflectorowy eksport to początek naszej drogi. Później manualna edycja kodu, tak żeby wszystko miało ręce i nogi. Tym właśnie zajmuje się obecnie...

Nota prawna i przeciwdziałanie szkodnikom

Dość enigmatycznie to nazwałem. Post ten ma oczywiście charakter tylko i wyłącznie edukacyjny. Możemy zadać pytanie - w jaki sposób przeciwdziałać tego typu zachowaniom? W jaki sposób mogę zabezpieczyć moją aplikację, aby nie dostała się ona w niepowołane ręce? Zaciemnianie kodu - oto recepta. Michał Grzegorzewski na swoim starszym blogu, umieszczonym w portalu developers.pl, zorganizował mini kursik zaciemniania kodu dla C#-owców, w połączeniu z zastosowaniem mechanizmu refleksji, bardzo przydatne informacje! Nowe wypociny Michała znajdziecie pod tym adresem.

Brak komentarzy: