2010-12-10 19 views
5

如何在從互聯網下載的可執行文件上設置MOTW(網絡標記)?如何在可執行文件上設置MOTW

+2

你必須先加熱熨斗。 – 2010-12-10 19:47:23

+0

我想手動設置文件上的MOTW標誌。 – yoshi99 2010-12-10 19:47:54

+3

您的意思是文件屬性頁面上的安全部分「此文件來自另一臺計算機......」?它存儲在另一個文件流中http://superuser.com/questions/38476/this-file-came-from-another-computer-how-can-i-unblock-all-the-files-in-a/38494 #38494我不確定什麼API訪問,但有一些文檔http://msdn.microsoft.com/en-us/library/aa364404%28VS.85%29.aspx – Rup 2010-12-10 19:49:51

回答

0

它在RFC 3514中沒有明確規定,但今天由於安全性要求的提高,實現應該在網絡傳輸中確實保留RFC3514位的存在或不存在的信息,當他們將文件寫入磁盤時,反之亦然,從磁盤讀取。

+0

這個問題並不是專門針對這一點,而是關於如何將其實際寫入NTFS流和.exe。 – Rup 2010-12-10 20:52:30

+0

你在說什麼http://www.faqs.org/rfcs/rfc3514.html?你有沒有注意到它是在4月1日寫的? – 2011-02-17 09:32:11

+0

你有沒有注意到,當有人引用4月RFC給你時,他們完全意識到這是不重要的? :D - 畢竟,MOTW聽起來就像惡魔一樣。 – user502515 2011-02-23 21:35:48

8

該數據與可執行文件一起存儲在NTFS alternative file stream中。該流稱爲Zone.Identifier

Windows®InternetExplorer®使用流名稱Zone.Identifier來存儲URL安全區域。
完全限定形式是sample.txt:Zone.Identifier:$DATA
流的形式是一個簡單的文本流:

[ZoneTransfer] 
    ZoneId=3 

MSDN-SECZONES給出了安全區域的說明。

(注:原具有結腸和「區」之間的空間,但我認爲這是錯誤的。)

您可以在UrlMon.h的ZoneIds在SDK;有這相當於

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

枚舉(原來使用前值+ 1,而不是絕對值。)

正如漢斯說,在評論中,這些可以使用標準的Win32文件API的CreateFile和寫入WriteFile。 火狐始終寫入上網區,3區 ​​- Firefox code here(MPL/LGPL/GPL三證):

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; 
} 

或者有一個IE的COM API CLSID_PersistentZoneIdentifier你可以用它來抽象所有這一切爲您服務。

+2

+1,很好。對於Windows使用\ r \ n。 – 2010-12-12 13:04:59

+1

也只是要添加,[這裏是一種替代方法](https://blogs.msdn.microsoft.com/oldnewthing/20131104-00/?p=2753)使用COM來做同樣的事情。 – c00000fd 2016-07-06 06:45:07

相關問題