2009-03-12 28 views
10

Khi câu hỏi cho biết, tôi muốn tải một DLL từ một vị trí trong bộ nhớ thay vì một tệp, tương tự như LoadLibrary (Ex). Tôi không có chuyên gia trong WinAPI, do đó, googled một chút và tìm thấy this article cùng với thư viện MemoryModule mà khá nhiều đáp ứng nhu cầu của tôi.Đang tải DLL từ một vị trí trong bộ nhớ

Mặt khác, thông tin ở đây khá cũ và thư viện chưa được cập nhật trong một thời gian. Vì vậy, tôi muốn biết nếu có những cách khác nhau, mới hơn và tốt hơn để làm điều đó. Ngoài ra nếu ai đó đã sử dụng thư viện được đề cập trong bài viết, họ có thể cung cấp thông tin chi tiết về những gì tôi có thể phải đối mặt khi sử dụng nó không?

Chỉ dành cho những người tò mò, tôi đang khám phá khái niệm mã hóa một số trình cắm thêm cho các ứng dụng mà không lưu trữ phiên bản đã giải mã trên đĩa.

+2

Đây là sẵn sàng để sử dụng mã nguồn để tải DLL từ bộ nhớ: https://github.com/fancycode/MemoryModule – user1528094

Trả lời

3

Vâng, bạn có thể tạo Ổ đĩa RAM theo these instructions, sau đó sao chép tệp DLL bạn có thể vào bộ nhớ vào tệp và sử dụng LoadLibrary().
Tất nhiên điều này không thực tế nếu bạn định triển khai như một loại sản phẩm vì mọi người sẽ chú ý đến trình điều khiển đang được cài đặt, khởi động lại sau khi cài đặt và một ký tự ổ đĩa mới trong My Computer. Ngoài ra, điều này không có gì để thực sự ẩn các DLL kể từ khi nó chỉ ngồi đó trong ổ đĩa RAM cho tất cả mọi người để xem.

Một điều tôi quan tâm là Tại sao bạn thực sự muốn làm điều này? Có lẽ kết quả cuối cùng của bạn có thể đạt được bằng một số phương tiện khác ngoài việc tải DLL từ bộ nhớ. Ví dụ khi sử dụng trình đóng gói nhị phân chẳng hạn như UPX, DLL mà bạn có trên đĩa khác với tệp DLL cuối cùng được thực thi. Ngay sau khi DLL được nạp bình thường với LoadLibrary, Trình giải nén khởi động và ghi lại bộ nhớ mà DLL được nạp vào với nhị phân không nén (tiêu đề DLL đảm bảo rằng có đủ không gian được phân bổ)

+0

Có, tôi có thể bắt chước hành vi của UPX và sử dụng trình giải nén/decryptor như là một điểm vào, mà có thể thương lượng khóa với ứng dụng chính sau đó. Tôi sẽ đánh dấu câu trả lời này là được chấp nhận, cảm ơn rất nhiều ý tưởng! –

5

Việc triển khai trình tải DLL của riêng bạn có thể thực sự rất nhanh. Đọc bài viết này thật dễ dàng để bỏ lỡ những loại trường hợp cạnh điên rồ mà bạn có thể tự mình tham gia. Tôi khuyên bạn nên chống lại nó.
Chỉ cần cho một hương vị - xem xét bạn không thể sử dụng bất kỳ công cụ gỡ lỗi thông thường cho mã trong DLL bạn đang tải vì mã bạn đang thực hiện không được liệt kê trong khu vực của bất kỳ DLL được biết đến bởi hệ điều hành.
Một vấn đề nghiêm trọng khác là xử lý DEP trong cửa sổ.

+0

Cảm ơn thông tin chi tiết. Tôi đồng ý rằng reimplementing loader DLL không phải là một ý tưởng tốt, vì vậy tôi đang tìm cách khác để làm điều đó - có lẽ nó có thể ăn gian LoadLibrary hoặc hệ thống tập tin bằng cách nào đó. –

+0

Sự cố kết quả được liệt kê chi tiết hơn tại đây: https://www.codeproject.com/Tips/430684/Loading-Win-DLLs-manually-without-LoadLibrary – Elmue

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