2010-12-10 32 views
5

Làm thế nào để bạn đặt MOTW (Đánh dấu trang Web) trên một tệp thực thi được tải xuống từ internet?Làm thế nào để bạn đặt MOTW trên thực thi

+2

Bạn phải hâm nóng bàn ủi trước. –

+0

Tôi muốn đặt cờ MOTW theo cách thủ công trên các tệp. – yoshi99

+3

Bạn có nghĩa là phần Bảo mật "Tệp này đến từ một máy tính khác ..." trên trang thuộc tính tệp? Nó được lưu trữ trong một luồng tệp thay thế http://superuser.com/questions/38476/this-file-came-from-another-computer-how-can-i-unblock-all-the-files-in-a/38494 # 38494 Tôi không chắc API là gì để truy cập vào đó nhưng có một số tài liệu http://msdn.microsoft.com/en-us/library/aa364404%28VS.85%29.aspx – Rup

Trả lời

0

Nó không được nêu rõ trong RFC 3514, nhưng ngày nay, do yêu cầu bảo mật tăng lên, việc triển khai thực sự nên giữ lại thông tin về sự hiện diện hoặc vắng mặt của bit RFC3514 trong truyền mạng, khi ghi tệp ra đĩa, và ngược lại để đọc từ đĩa.

+0

Câu hỏi không phải là về một chút cụ thể, và đó là về cách thực sự viết nó vào một dòng NTFS cùng với một .exe. – Rup

+0

Bạn đang nói về http://www.faqs.org/rfcs/rfc3514.html? Bạn có nhận thấy nó được viết vào ngày 1 tháng Tư không? –

+0

Bạn có nhận thấy rằng bất cứ khi nào có ai đó tham chiếu RFC tháng Tư cho bạn, họ hoàn toàn nhận thức được sự không an toàn? : D - Sau khi tất cả, MOTW âm thanh giống như Evil Bit. – user502515

8

Dữ liệu này được lưu trữ trong NTFS alternative file stream cùng với tệp thực thi. Luồng được gọi là Zone.Identifier:

Windows® Internet Explorer® sử dụng tên luồng Zone.Identifier để lưu trữ vùng bảo mật URL.
Hình thức đầy đủ là sample.txt:Zone.Identifier:$DATA
Các dòng là một dòng văn bản đơn giản có dạng:

[ZoneTransfer] 
    ZoneId=3 

MSDN-SECZONES đưa ra một giải thích về khu an ninh.

(N.B. Bản gốc có một khoảng trống giữa ruột và "Zone" nhưng tôi nghĩ rằng đây là sai lầm.)

Bạn có thể tìm ZoneIds trong UrlMon.h trong SDK; có một enum mà tương đương với

enum URLZONE { 
    URLZONE_LOCAL_MACHINE = 0, 
    URLZONE_INTRANET  = 1, 
    URLZONE_TRUSTED  = 2, 
    URLZONE_INTERNET  = 3, 
    URLZONE_RESTRICTED  = 4 
}; 

(Bản gốc sử dụng giá trị trước đó + 1 chứ không phải là giá trị tuyệt đối.)

Như Hans nói trong các ý kiến, chúng có thể được viết với tiêu chuẩn Win32 tập tin API CreateFileWriteFile. Firefox luôn viết Internet Zone, khu 3-Firefox code here (MPL/LGPL/GPL tri-li-xăng):

bool SetInternetZoneIdentifier(const FilePath& full_path) { 
    const DWORD kShare = FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE; 
    std::wstring path = full_path.value() + L":Zone.Identifier"; 
    HANDLE file = CreateFile(path.c_str(), GENERIC_WRITE, kShare, NULL, 
          OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); 
    if (INVALID_HANDLE_VALUE == file) 
    return false; 

    const char kIdentifier[] = "[ZoneTransfer]\nZoneId=3"; 
    DWORD written = 0; 
    BOOL result = WriteFile(file, kIdentifier, arraysize(kIdentifier), &written, 
          NULL); 
    CloseHandle(file); 

    if (!result || written != arraysize(kIdentifier)) { 
    DCHECK(FALSE); 
    return false; 
    } 

    return true; 
} 

Ngoài ra có một trình duyệt IE COM API CLSID_PersistentZoneIdentifier bạn có thể sử dụng để trừu tượng này tất cả cho bạn.

+2

+1, đẹp. Sử dụng \ r \ n cho Windows. –

+1

Ngoài ra chỉ cần thêm, [đây là một phương pháp thay thế] (https://blogs.msdn.microsoft.com/oldnewthing/20131104-00/?p=2753) để thực hiện tương tự bằng cách sử dụng COM. – c00000fd

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