Sprawdzanie poprawności zespołów .NET Framework
Właśnie przeszedłem naszeniemieckie fora VB.NET i było coś interesującego, co przyprawia mnie o ból głowy.
W rzeczywistości jest to możliweedytować zespoły .NET Framework za pomocą ReflexIL lub innego edytora IL. Jedyną rzeczą, którą musisz ominąć, jest podpis Silna nazwa zespołu. Po zmianie zestawu IL musisz uruchomićsn.exe -Vr [assemblyname]
aby pominąć sprawdzanie poprawności nazwy. Następnie musisz wyczyścić buforowane obrazy macierzyste. Po prostu przejdź przezC:\Windows\assembly
katalog i usuń każdy obraz związany z Twoim zespołem. Następnie uruchom ponownie. Gdy jesteś zalogowany, uruchomngen install [assemblyname]
. TerazNowy generowane są obrazy rodzime.
To działa. Sprawdziłem tę procedurę w moim środowisku wirtualnym (Windows XP x86). Teraz najbardziej martwi mnie to, że możesz łatwo ominąć .NETVerifyHash
lubVerifyData
metodyRSACryptoServiceProvider
. To też działa. Mój przyjaciel i ja testowaliśmy ten problem (zobacz zdjęcia). To było dość łatwe.
Na przykład, gdybym utworzył system licencjonowania zbudowany na klasach kryptograficznych .NET Framework, mógłby zostać pominiętyw całym systemie dlakażdy Aplikacja .NET w systemie za pomocą frameworka. Wszyscy też mogąlog izmiana dane wejściowe funkcji, które nazywam po prostu podłączeniem do metod.
Teraz moje pytanie brzmi: skoro może to być ogromny problem, jak mogę coś z tym zrobić? Oczywiście złośliwy użytkownik może po prostu edytowaćmój aplikacji, ale nie byłoby tak źle, jak w przypadku całego systemu. Myślałem o sprawdzeniu poprawności sumy kontrolnej, ale ponieważ istnieje wiele różnych aktualizacji dla .NET Framework, wydaje się to niemożliwe.
Jakieś rozwiązania lub sugestie? Czy Microsoft zajmuje się tym problemem w jakiś sposób?