Poprzedni tekst zakończyłem zagadką: czy wykonując !SaveModule będziemy mieli kod dynamicznej metody DynamicClass.SecureGetKey(Test.Program, Int32) w pliku na dysku? Nikt nie odpowiedział, więc ja to zrobię: Nie, kod generowany w ramach DynamicMethod nie znajdzie się w zrzucie modułu na dysku. Zdziwieni? Ja trochę, a to jeszcze nie jest ostatnia niespodzianka, jaką serwuje nam SaveModule.Dziś zapoznamy się z następną, ale po kolei. Uwaga! Wszystkie dalsze rozważania dotyczą aplikacji x86, więc wszystki...
Kilka dni temu Sławek napisał tekst o ukrywaniu kodu i skorzystał z klasy DynamicMethod, dzięki której generował kod IL w trakcie wykonania programu. Był również na tyle uprzejmy, że podesłał mi przykładowy kod, dzięki któremu zaoszczędziłem trochę czasu i mogłem zająć się od razu konkretem. Mam nadzieję, ze nie będzie na mnie zły jak wrzucę całościowo część tego kodu, dostępnego również w jego notce... :) Dla przypomnienia zatem, Sławkowi zależało na ukryciu szczegółów metody GetValue, tak, aby po dezas...
Stanąłem ostatnio przed następującym problemem: ukryć algorytm (w tym wypadku zawartość metody) tak, żeby przynajmniej na pierwszy rzut oka nie dało się go przeczytać. Pogrzebałem troche w róźnych helpach i innych internetach i stwierdziłem, że idealnie do tego celu nada się klasa DynamicMethod. Jak się okazało łatwiej powierdzieć, trudniej zrobić. Jak zawsze zresztą...