2013-11-28 21 views
11

Lợi ích của việc sử dụng EncodePointer/DecodePointer trong Windows là gì?lợi ích của việc sử dụng EncodePointer/DecodePointer

MSDN nói:
Mã hóa con trỏ có sẵn trên toàn cầu giúp bảo vệ chúng không bị khai thác. Chức năng EncodePointer làm xáo trộn giá trị con trỏ bằng một bí mật sao cho nó không thể được dự đoán bởi tác nhân bên ngoài. Bí mật được sử dụng EncodePointer là khác nhau cho mỗi quá trình.

Bây giờ câu hỏi là: Nếu kẻ tấn công nằm ngoài chương trình của tôi, thì không gian địa chỉ của nó khác với không gian địa chỉ của tôi, vì vậy địa chỉ trong ứng dụng của tôi không thể sử dụng được. và nếu nó có thể thực thi mã trong không gian địa chỉ của tôi, nó có thể gọi DecodePointer và sử dụng địa chỉ đó để gọi con trỏ được mã hóa.

Vì vậy, việc sử dụng các chức năng này là gì và chúng giúp tôi tăng cường bảo mật như thế nào?

+0

Nếu kẻ tấn công * không * bên ngoài chương trình của bạn thì sao? Như, nói ... mọi kẻ tấn công trong lịch sử? –

+3

@KerrekSB Nếu nó nằm trong chương trình của tôi ?! Sau đó, nó chỉ đơn giản có thể gọi ** DecodePointer ** trên con trỏ hàm của tôi và sau đó thường gọi nó. Lợi ích của việc mã hóa một cái gì đó trong khi giải mã đơn giản như gọi một hàm mà không có bất kỳ khóa hoặc thứ gì đó như thế? và điều gì làm cho kẻ tấn công không thể gọi ** DecodePointer **? –

Trả lời

10

Bạn đang thiếu ý định, EncodePointer() bảo vệ chống lại mã độc dữ liệu. Trước khi mã độc hại có thể trở nên có hại, nó cần phải bắt đầu chạy trước tiên. Các cách cơ bản để thực hiện điều đó là bằng cách ghi đè địa chỉ trả về của một cuộc gọi hàm hoặc bằng cách ghi đè một con trỏ hàm. Bản thân chương trình bây giờ kích hoạt mã bằng cách tương ứng trở về từ hàm hoặc gọi thông qua con trỏ hàm. EncodePointer bảo vệ một con trỏ hàm, không có cách nào để kẻ tấn công đoán cách mã hóa dữ liệu mà anh ta viết để sau khi DecodePointer() của chương trình gọi nó vẫn trỏ tới mã của anh ấy.

Dữ liệu không thể gọi EncodePointer.

1

Những kẻ tấn công có đặc quyền cao có thể tạo chuỗi trong quá trình của bạn. Mã hạt nhân cũng có thể ánh xạ các phần của địa chỉ ảo của quá trình của bạn đến một quy trình người dùng khác và/hoặc quá trình hệ thống.

Sử dụng EncodePointer sẽ chỉ khiến mọi việc trở nên khó khăn hơn một chút đối với kẻ tấn công nhưng không bảo đảm bất cứ điều gì.

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