2010-12-10 22 views
5

¿Cómo se establece MOTW (Marca de la Web) en un archivo ejecutable que se descarga de Internet?¿Cómo se establece MOTW en un archivo ejecutable

+2

Primero debe calentar la plancha. –

+0

Deseo configurar manualmente el indicador MOTW en los archivos. – yoshi99

+3

Te refieres a la sección Seguridad "Este archivo vino de otra computadora ..." en la página de propiedades del archivo? Se almacena en una secuencia de archivos alternativa http://superuser.com/questions/38476/this-file-came-from-another-computer-how-can-i-unblock-all-the-files-in-a/38494 # 38494 No estoy seguro de qué es la API para acceder a eso, pero hay documentación http://msdn.microsoft.com/en-us/library/aa364404%28VS.85%29.aspx – Rup

Respuesta

0

No se menciona explícitamente en RFC 3514, pero hoy, debido a mayores requisitos de seguridad, las implementaciones realmente deberían retener la información de la presencia o ausencia del bit RFC3514 en una transmisión de red, cuando escriben archivos en un disco, y viceversa para leer desde el disco.

+0

La pregunta no es sobre ese bit específicamente, y se trata de cómo escribirlo realmente en una secuencia NTFS junto con un .exe. – Rup

+0

¿Estás hablando de http://www.faqs.org/rfcs/rfc3514.html? ¿Notaste que fue escrito el 1 de abril? –

+0

¿Notó que cada vez que alguien hacía referencia a un RFC de abril para usted, era plenamente consciente de no ser serio? : D - Después de todo, MOTW suena exactamente como Evil Bit. – user502515

8

Estos datos se almacenan en un NTFS alternative file stream junto con un ejecutable. La secuencia se llama Zone.Identifier:

Windows® Internet Explorer® utiliza el nombre de la secuencia Zone.Identifier para el almacenamiento de zonas de seguridad de URL.
La forma totalmente calificado es sample.txt:Zone.Identifier:$DATA
La corriente es una corriente de texto simple de la forma:

[ZoneTransfer] 
    ZoneId=3 

MSDN-SECZONES da una explicación de las zonas de seguridad.

(N. B. El original tiene un espacio entre los dos puntos y "Zona", pero creo que esto es erróneo.)

Puede encontrar las ZoneIds en UrlMon.h en el SDK; hay una enumeración que equivale a

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

(El original utiliza valor anterior + 1 en lugar de valores absolutos.)

Como dice Hans en los comentarios, estos pueden ser escritas con la API de archivos de Win32 estándar CreateFile y WriteFile. Firefox siempre escribe zona de Internet, zona 3 - Firefox code here (MPL/LGPL/GPL tri-licencia):

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

Alternativamente hay una API COM IE CLSID_PersistentZoneIdentifier puede utilizar para abstraer todo esto para usted.

+2

+1, agradable. Use \ r \ n para Windows. –

+1

También solo para agregar, [aquí hay un método alternativo] (https://blogs.msdn.microsoft.com/oldnewthing/20131104-00/?p=2753) para hacer lo mismo con COM. – c00000fd

Cuestiones relacionadas