2012-06-19 26 views
5

Tôi tò mò liệu có thể xác định xem Hội đồng có tham chiếu đến một lớp cụ thể hay không. Tôi hiện đang sử dụng Reflection để tải Assemblies và sau đó tôi xác định những gì Assemblies đang được tham chiếu từ bên trong lắp ráp Tôi tải:Xác định xem một lớp học có được tham chiếu C#

foreach (var vReferencedAssembly in vSomeAssembly.GetReferencedAssemblies()) 

Bây giờ tôi biết những gì Assemblies được tham chiếu, tôi muốn thâm nhập vào những vReferencedAssembly và xác định xem điều gì đó như thế này có xảy ra không:

File.Create(vSomeFile); 

Trong tiếng Anh đơn giản, tôi không muốn tải một Hội từ danh sách được cung cấp cho tôi có thể chứa những gì tôi cho là mối đe dọa. Vì vậy, tôi có thể muốn chặn những thứ có thể thao tác các tệp và v.v.

+0

Đây có phải là một yêu cầu mà động lực không? Nếu nó là tĩnh, bạn có thể chỉ cần sử dụng disassembler để xem các hội đồng tham chiếu và những gì nó có thể gọi. – Josh

+0

Tôi nghĩ rằng tôi muốn nó được năng động nếu có thể. Cách thay thế tốt nhất có thể là sử dụng Disassembler. – Tada

Trả lời

2

Tôi tin rằng những gì bạn đang tìm kiếm là tải các cụm chỉ vào ngữ cảnh phản chiếu. Điều này cho phép bạn tải chúng vào một khu vực an toàn, nơi không có mã nào được thực thi cho đến khi bạn kiểm tra chúng.

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

Cập nhật: Bạn có thể dùng phản ánh để nhìn vào những thứ như, các biến, thuộc tính, thông số, trở lại các loại nhưng điều đó vẫn sẽ không giúp bạn phát hiện mã độc hại đó là hoàn toàn chứa bên trong một phương pháp . Đó là sự hiểu biết của tôi rằng phân biệt giữa mã an toàn và không an toàn là tốt nhất còn lại cho người quản trị hệ thống. Các ứng dụng này có mối quan hệ tin tưởng ngầm định đến một (các) vị trí được bảo mật trên PC. IE: bộ nhớ cache lắp ráp toàn cầu, thư mục làm việc hiện tại hoặc một số đường dẫn cố định được xác định bởi ứng dụng của bạn. PC sau đó chỉ cấp cho quản trị viên khả năng quản lý các hội đồng ở vị trí này.

Cập nhật 2: Bạn cũng có thể xem xét việc chạy mã có khả năng không an toàn này trong miền ứng dụng riêng của nó. Ở đây bạn có thể thiết lập những gì được cho phép và những gì không được phép. Xem http://msdn.microsoft.com/en-us/library/bb763046.aspx.

Cập nhật 3: Mặc dù tôi vẫn duy trì tải mã không đáng tin cậy trong miền ứng dụng riêng với quyền phù hợp là cách tiếp cận rõ ràng nhất, có thể xác định phương thức tham chiếu nội bộ trong thời gian chạy như được yêu cầu bởi question này. Ý chính của nó là sử dụng sự phản chiếu để thu được các byte IL thô của phương thức (MethodBody.GetILAsByteArray) và phân tích nó với sự lựa chọn của bạn về trình phân tích cú pháp IL.

+0

Tôi không thể biết đây có phải là điều tôi đang tìm kiếm hay không. Làm thế nào tôi sẽ kiểm tra Hội để xác định xem một lớp học cụ thể được tham chiếu hay được gọi là? Ví dụ: Tôi biết mscorlib (mscorlib.dll) chứa File.Create, nhưng điều đó không có nghĩa là Assembly tôi vừa nạp thực sự tham khảo File.Create. Làm thế nào tôi có thể xác định điều đó? Nếu ở tất cả .. – Tada

+0

Có vẻ như phản ánh có thể xác định các Lớp được sử dụng trong các tham số phương thức hoặc trả về nhưng nếu được tham chiếu bên trong phần nội dung thực của một phương pháp, tôi sẽ không thể tìm thấy nó ... – Tada

Các vấn đề liên quan