2011-10-26 26 views
7

Tôi có một số bảo mật được tích hợp vào chương trình phía máy khách tải xuống DLL từ web và gọi hàm bên trong DLL đó. DLL được đặt tên mạnh và hàm trong DLL sử dụng Assembly.GetCallingAssembly() để xác định hội đồng gọi để tôi có thể nhận được đường dẫn chính xác đến chương trình đã gọi nó. Từ đó chúng tôi thực hiện kiểm tra băm của assembly và kiểm tra xem nó có đúng không.Cách để xác định hội đồng gọi điện thực

Chúng tôi có những người đã tự gắn mình ở chế độ tin cậy đầy đủ và có thể giả mạo cuộc gọi GetCallingAssembly để trỏ đến thực thi thực sự, trong khi họ chạy phiên bản đã sửa đổi của nó. Có cái gì khác khác sau đó GetCallingAssembly mà tôi có thể sử dụng để có được người gọi thực sự? Một số callstack hoặc cái gì đó có thể cung cấp thực thi thực tế kể từ GetCallingAssembly dường như dễ bị giả mạo.

+0

Hãy thử các phương pháp 'GetEntryAssembly' thay – hazzik

+0

Hãy nhớ rằng, nếu bạn cho phép sự tin tưởng hoàn toàn, họ cũng có thể vá GetEntryAssembly. Nếu bạn cho phép tin tưởng đầy đủ, họ cũng có thể vá DLL đã tải xuống của bạn và tắt kiểm tra băm. –

Trả lời

3

Bạn không thể thực hiện việc này khi đang chạy ở chế độ tin cậy đầy đủ. Tin tưởng hoàn toàn nghĩa là mọi người có thể làm những việc như giả mạo. Đây là một discusison tương tự: reflection is possible on obfuscation

0

Tôi không chắc chắn như thế nào an toàn là nó, nhưng tôi đã sử dụng này trong quá khứ để có được những con đường khởi động:

string startup_path = 
    Path.GetDirectoryName(typeof(SomeClassInDll).Assembly.Location); 
+0

Tôi nghĩ người này đang sử dụng một loại công cụ nào đó đang thay đổi CallingAssembly, Nếu họ vô hiệu hóa băm chúng tôi phát hiện, nó sẽ tự động chuyển sang máy chủ có băm được tạo từ bên trong dll, dll sẽ thay đổi một số khóa bí mật bên trong sẽ thay đổi phản hồi, nó băm khóa bí mật đó, cộng với mã băm của assembly để xác định xem nó có bị sửa đổi hay không và chúng đang sử dụng assembly băm thích hợp. Im cố gắng tìm một số phương pháp mà tôi có thể xem xét điều đó có thể khó hơn một chút để giả mạo. Giống như các cuộc gọi stack có thể? – willthiswork89

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