2012-06-19 17 views
5

Jestem ciekawy, czy można ustalić, czy Zgromadzenie odwołuje się do określonej klasy, czy też nie. Obecnie używam Reflection załadować zwoje, a następnie ustalić, co konfekcjonowane są odniesione od wewnątrz zespołu wczytuję:Określanie, czy odwołanie do klasy C#

foreach (var vReferencedAssembly in vSomeAssembly.GetReferencedAssemblies()) 

Teraz wiem, co konfekcjonowane są wymienione, chcę kopać w tych vReferencedAssembly i określić, czy występuje coś takiego:

File.Create(vSomeFile); 

prostym językiem, nie chcę, aby załadować zestawu z listy dostarczonej mi się, że może zawierać co uważam za zagrożenie. Więc mogę chcieć zablokować rzeczy, które mogą manipulować plikami i tak dalej.

+0

Czy wymaga tego dynamika? Jeśli był statyczny, można po prostu użyć dezasemblera, aby wyświetlić referencje złożeń i ich wywoływanie. – Josh

+0

Myślę, że wolałbym być dynamiczny, jeśli to możliwe. Najlepszym rozwiązaniem może być użycie dezasemblera. – Tada

Odpowiedz

2

Wierzę, że to, czego szukasz, to ładowanie złożeń w kontekście tylko do odbicia. To pozwala na załadowanie ich do bezpiecznego obszaru, w którym żaden kod nie zostanie wykonany, dopóki nie zostaniesz sprawdzony.

Patrz: http://msdn.microsoft.com/en-us/library/ms172331.aspx

Aktualizacja: Można użyć refleksji patrzeć na takie rzeczy, zmiennych, właściwości, parametrów, powrót rodzajów ale to nadal nie pomoże wykryć złośliwy kod, który jest całkowicie zawarty wewnątrz metody . Rozumiem, że odróżnienie bezpiecznego i niebezpiecznego kodu najlepiej pozostawić administratorowi systemu. Te aplikacje mają ukrytą relację zaufania do zabezpieczonej lokalizacji na komputerze. IE: globalna pamięć podręczna zespołu, aktualny katalog roboczy lub pewna stała ścieżka określona przez aplikację. Komputer zapewnia następnie administratorom możliwość zarządzania zestawami w tej lokalizacji.

Aktualizacja 2: Możesz również rozważyć uruchomienie potencjalnie niebezpiecznego kodu w swojej własnej domenie aplikacji. Tutaj możesz ustawić, co jest dozwolone, a co nie. Zobacz http://msdn.microsoft.com/en-us/library/bb763046.aspx.

Aktualizacja 3: Podczas gdy nadal uważam, że ładowanie niezaufanego kodu w jego własnej domenie aplikacji z odpowiednimi uprawnieniami jest najczystszym podejściem, możliwe jest określenie, co metoda wewnętrznie odwołuje w czasie wykonywania, co zostało zadane przez to question. Istotą tego jest użycie odbicia w celu uzyskania surowych bajtów IL metody (MethodBody.GetILAsByteArray) i przeanalizowania go za pomocą twojego wyboru parsera IL.

+0

Nie mogę stwierdzić, czy tego właśnie mogę szukać. W jaki sposób mogę sprawdzić Zgromadzenie, aby ustalić, czy dana klasa jest przywoływana lub wywoływana? Na przykład: Wiem, że mscorlib (mscorlib.dll) zawiera plik File.Create, ale to nie znaczy, że Zgromadzenie, które właśnie wczytałem, faktycznie odwołuje się do pliku File.Create. Jak mogę to ustalić? Jeśli w ogóle ... – Tada

+0

Wygląda na to, że odbicie może zidentyfikować klasy używane w parametrach metod lub powrotach, ale jeśli są one przywoływane wewnątrz rzeczywistej treści metody, nie będę w stanie jej znaleźć ... – Tada

Powiązane problemy