2011-12-30 24 views
8

Tôi đang cố gắng kiểm tra xem ứng dụng có cố gắng thao tác một quy trình cụ thể không (ví dụ: móc chính nó vào nó). Tôi không thể tìm thấy một cách tiếp cận thích hợp để thực hiện điều này. Là kiểm tra tính toán qua quá trình chạy có thể? Nếu đó không phải là cách tôi có thể phát hiện tình huống này?Phát hiện quyền truy cập bộ nhớ vào một quá trình

+0

Bạn biết ứng dụng vi phạm? Và bạn biết làm thế nào bạn phát hiện trong thao tác ứng dụng của bạn đã xảy ra? – rene

+0

Tôi xin lỗi vì tôi không nhận được câu hỏi của bạn. Tôi không biết cách phát hiện thao tác vì vậy tôi không có ý tưởng phát hiện sự xuất hiện thao tác. Đó là lý do tại sao tôi yêu cầu giúp đỡ. –

+0

Mục tiêu thực tế bạn đang cố đạt được là gì? Nếu bạn đang cố gắng để tránh/phát hiện giả mạo trong ứng dụng của riêng bạn, không có gì sẽ hoạt động 100%. –

Trả lời

4

Quy trình khác không thể tạo móc trong quy trình của bạn, có thể sửa đổi bộ nhớ nhưng để làm cho mã này phải nằm trong vùng địa chỉ của bạn, điều này có thể được thực hiện để tiêm DLL vào quá trình của bạn khi bắt đầu (lúc dll tiêm thời gian) một trong những khó khăn), bạn có thể dễ dàng kiểm tra điều này bằng cách liệt kê DLL trong quá trình của bạn và tìm kiếm một số ReadProcessMemory, WriteProcessMemory, OpenProcess, CallNextHookEx các cuộc gọi chức năng trong mã của chúng. Để làm điều đó có được địa chỉ (GetProcAddress) của hàm và giá trị tìm kiếm trong mã (bạn có thể thêm một số dự đoán asm call cho điều đó cho kết quả phạm vi chặt chẽ).

Bạn có thể kiểm tra xem có gì sai với tệp PE trong đĩa và trong bộ nhớ, khi quá trình chèn DLL lúc khởi động xảy ra thì tệp PE của bạn sau khi được sao chép vào bộ nhớ từ tệp sẽ bị hỏng, sau thư viện dll cuối cùng nên có ghi đè các biểu tượng gỡ lỗi với nhập dll bổ sung. Sửa đổi này có thể được thực hiện trên tập tin giống như trong bộ nhớ.

Phương pháp tốt nhất nhưng có thể sẽ không dễ dàng cho bạn khi bạn đang sử dụng ngôn ngữ C# là làm xáo trộn mã của bạn. Tôi nghĩ rằng đây là một phương pháp tốt bởi vì bạn không móc một cái gì đó mà bạn không biết làm thế nào làm việc, bởi vì bạn không biết những gì móc bạn phải làm và ở đâu. Nhưng đối với mã C# obfuscate tốt, bạn phải tìm phần mềm tốt cho điều đó và có thể trả giá không thấp.

+0

@gcx: ReadProcessMemory, WriteProcessMemory cũng sẽ bắt thời gian chạy tiêm, thời gian chạy tiêm là từ quá trình khác tiêm chức năng để đặt khi sẽ được thực hiện với mã thư viện tải (trong bộ nhớ mục tiêu không giống như móc trong mục tiêu bộ nhớ nhưng chức năng gọi nằm trong dll) – Svisstack

+0

Tôi thấy rằng bạn đã đề cập đến sự làm xáo trộn. Tôi nghĩ rằng, bạn nói rằng vì tôi "quá trình của tôi" tham khảo. Tôi đã giới thiệu một quy trình cụ thể bằng cách nói quá trình của tôi. Tôi đã chỉnh sửa bài đăng gốc. Xin lỗi vì sự nhầm lẫn. –

+1

Đây là obfuscator miễn phí tốt nhất tôi biết: [Eazfuscator.NET] (http://www.foss.kharkov.ua/g1/projects/eazfuscator/dotnet/Default.aspx) – ken2k

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