Red de conocimiento informático - Conocimiento del nombre de dominio - ¿Cómo evitar que la búsqueda de Windows encuentre cosas en su computadora?

¿Cómo evitar que la búsqueda de Windows encuentre cosas en su computadora?

La forma más sencilla de descargar un software que cifra carpetas ocultas

Folder Hide Master

.com/soft/6172.html La conexión de Sky Software es muy Seguridad

Si te gusta la programación, déjame compartir el código fuente contigo

Después de configurar, selecciona Herramientas-Opciones de carpeta-Mostrar todos los archivos y carpetas no se pueden mostrar

p>

Solo si conoce la ruta específica de la carpeta e ingresa la ruta completa en el navegador, podrá ingresar. Otros métodos no pueden ingresar y ningún software puede encontrarla.

>Escriba un controlador para interceptar la API de NT para implementar el ocultamiento del directorio de archivos

Actualmente, hay muchas formas de ocultar archivos y directorios en NT. La más sencilla es agregar atributos del sistema y atributos ocultos a los archivos. y carpetas, por lo que el sistema operativo ya no los mostrará y la búsqueda no puede encontrarlos, ¡pero este método no es nada exhaustivo y no tiene utilidad! Introduzcamos el uso del controlador NT para interceptar NTAPI y ocultar completamente archivos y directorios. Hay un archivo NTDLL.DLL en NT y la mayoría de los NTAPI están encapsulados en esta biblioteca. La interfaz API para buscar archivos y directorios es ZwQueryDirectoryFile, por lo que siempre que interceptemos esta API, los archivos y directorios se pueden ocultar por completo. El siguiente paso no es implementar (trabajo de preparación: busque un modelo de controlador WDM en NTDDK, que es el controlador más simple):

1. Defina la estructura número 3 de FILE_INFORMATION_CLASS: _FILE_BOTH_DIR_INFORMATION, esta estructura es una parámetro requerido de ZwQueryDirectoryFile.

typedef struct _FILE_BOTH_DIR_INFORMATION {

ULONG NextEntryOffset

ULONG FileIndex

LARGE_INTEGER CreationTime

LARGE_INTEGER LastAccessTime;

LARGE_INTEGER LastWriteTime

LARGE_INTEGER ChangeTime

LARGE_INTEGER EndOfFile

LARGE_INTEGER AllocationSize;

ULONG FileNameLength

ULONG EaSize

CCHAR ShortNameLength

WCHAR ShortName[12]; > WCHAR FileName[1];

} FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;

2 Primero declare ZwQueryDirectoryFile y luego defina el prototipo de ZwQueryDirectoryFile:

NTSYSAPI externo. NTSTATUS NTAPI ZwQueryDirectoryFile(

EN HANDLE hFile,

EN HANDLE hEvent OPCIONAL,

EN PIO_APC_ROUTINE IoApcRoutine OPCIONAL,

EN PVOID IoApcContext OPCIONAL ,

SALIDA PIO_STATUS_BLOCK pIoStatusBlock,

SALIDA PVOID FileInformationBuffer,

EN ULONG FileInformationBufferLength,

EN FILE_INFORMATION_CLASS FileInfoClass,

EN BOOLEAN bReturnOnlyOneEntry,

EN PUNICODE_STRING PathMask OPCIONAL,

EN BOOLEAN bRestartQuery);

//Definir el prototipo de ZwQueryDirectoryFile

typedef NTSTATUS (*REALZWQUERYDIRECTORYFILE)(IN HANDLE hFile,

IN HANDLE hEvent OPTIONAL,

EN PIO_APC_ROUTINE IoApcRoutine OPCIONAL,

EN PVOID IoApcContext OPCIONAL,

FUERA PIO_STATUS_BLOCK pIoStatusBlock,

FUERA PVOID FileInformationBuffer,

EN ULONG FileInformationBufferLength ,

EN FILE_INFORMATION_CLASS FileInfoClass,

EN BOOLEAN bReturnOnlyOneEntry,

EN PUNICODE_STRING PathMask OPCIONAL,

EN BOOLEAN bRestartQuery

//Definir un puntero de función original

REALZWQUERYSYSTEMINFORMATION RealZwQuerySystemInformation;

3 Defina el prototipo de la función API de reemplazo:

NTSTATUS HookZwQueryDirectoryFile( <. /p>

EN HANDLE hFile,

EN HANDLE hEvent OPCIONAL,

<

p> EN PIO_APC_ROUTINE IoApcRoutine OPCIONAL,

EN PVOID IoApcContext OPCIONAL,

FUERA PIO_STATUS_BLOCK pIoStatusBlock,

FUERA PVOID FileInformationBuffer,

EN ULONG FileInformationBufferLength,

EN FILE_INFORMATION_CLASS FileInfoClass,

EN BOOLEAN bReturnOnlyOneEntry,

EN PUNICODE_STRING PathMask OPCIONAL,

EN BOOLEAN bRestartQuery p>

4. Agregue la siguiente declaración a la función DriverEntry (entrada del controlador):

//Guarde la dirección real de la función ZwQueryDirectoryFile

RealZwQueryDirectoryFile=(REALZWQUERYDIRECTORYFILE)( SYSTEMSERVICE(ZwQueryDirectoryFile ));

// Apunta el puntero de función de reemplazo personalizado a la función ZwQueryDirectoryFile real

(REALZWQUERYDIRECTORYFILE)(SYSTEMSERVICE(ZwQueryDirectoryFile))=HookZwQueryDirectoryFile

<; p> 5. Agregue el código de recuperación a la función DriverUnload (función de descarga del controlador):

//Restaurar el puntero de función original

(REALZWQUERYDIRECTORYFILE)(SYSTEMSERVICE(ZwQueryDirectoryFile))=RealZwQueryDirectoryFile

p>

6. Ahora que los preparativos están hechos, los punteros de función se han configurado y redirigido, lo que queda es implementar nuestra función de reemplazo personalizada HookZwQueryDirectoryFile, el código es el siguiente:

NTSTATUS HookZwQueryDirectoryFile(

EN HANDLE hFile,

EN HANDLE hEvent OPCIONAL,

EN PIO_APC_ROUTINE IoApcRoutine OPCIONAL,

EN PVOID IoApcContext OPCIONAL,

FUERA PIO

_STATUS_BLOCK pIoStatusBlock,

OUT PVOID FileInformationBuffer,

IN ULONG FileInformationBufferLength,

IN FILE_INFORMATION_CLASS FileInfoClass,

IN BOOLEAN bReturnOnlyOneEntry,

EN PUNICODE_STRING PathMask OPCIONAL,

EN BOOLEAN bRestartQuery)

{

NTSTATUS rc

ULONG CR0VALUE

p>

p>

ANSI_STRING ansiFileName, ansiDirName, HideDirFile;

UNICODE_STRING uniFileName

// El nombre del archivo que se filtrará durante la inicialización es debug.exe

RtlInitAnsiString (amp; HideDirFile, "DBGVIEW.EXE");

// Ejecuta la función real ZwQueryDirectoryFile

rc = ((REALZWQUERYDIRECTORYFILE)(RealZwQueryDirectoryFile))(

hFile,

hEvent,

IoApcRoutine,

IoApcContext,

pIoStatusBlock,

FileInformationBuffer,

p>

FileInformationBufferLength,

FileInfoClass,

bReturnOnlyOneEntry,

PathMask,

bRestartQuery);

/*Si la ejecución es exitosa (y el valor de FILE_INFORMATION_CLASS es FileBothDirectoryInformation, procesaremos y filtraremos*/

if (NT_SUCCESS(rc)amp; amp (FileInfoClass == FileBothDirectoryInformation))

{

PFILE_BOTH_DIR_INFORMATION pFileInfo

PFILE_BOTH_DIR_INFORMATION pLastFileInfo

BOOL bLastOne

//Asigna el resultado de la ejecución a pFileInfo

pFileInfo = (PFILE_BOTH_DI

R_INFORMATION)FileInformationBuffer

pLastFileInfo = NULL;

//Verificación de bucle

hacer

{

bLastOne = !(pFileInfo-gt;NextEntryOffset);

RtlInitUnicodeString(amp;uniFileName,pFileInfo-gt;FileName);

RtlUnicodeStringToAnsiString(amp;ansiFileName,amp;uniFileName,TRUE);

RtlUnicodeStringToAnsiString(amp; ansiDirName, amp; uniFileName, TRUE);

RtlUpperString(amp; ansiFileName, amp; ansiDirName

//Imprimir resultados, Utilice debugview para ver los resultados de la impresión

DbgPrint("ansiFileName: s\n", ansiFileName.Buffer

DbgPrint("HideDirFile: s\n", HideDirFile.Buffer);

//Iniciar la comparación, si se encuentra, ocultar el archivo o directorio

if( RtlCompareMemory(ansiFileName.Buffer, HideDirFile.Buffer, HideDirFile.Length) == HideDirFile.Length )

{

DbgPrint("¡Este es HideDirFile!\n"

if(bLastOne)

{

);

if(pFileInfo == (PFILE_BOTH_DIR_INFORMATION)FileInformationBuffer )

{

rc = 0x80000006; //Ocultar archivos o directorios; > p>

else

{

pLastFileInfo-gt; NextEntryOffset = 0

}

descanso; >

}

else //Mover el puntero hacia atrás

{

int iPos = ((ULONG)pFileInfo) - (ULONG)FileInformationBuffer <; /p>

p

>

int iLeft = (DWORD)FileInformationBufferLength - iPos - pFileInfo-gt; NextEntryOffset;

RtlCopyMemory( (PVOID)pFileInfo, (PVOID)( (char *)pFileInfo pFileInfo-gt; NextEntryOffset), (DWORD)iLeft );

continuar

}

}

pLastFileInfo = pFileInfo

pFileInfo; = (PFILE_BOTH_DIR_INFORMATION)((char *)pFileInfo pFileInfo-gt; NextEntryOffset);

} while(!bLastOne

RtlFreeAnsiString(amp; ansiDirName

<); p> RtlFreeAnsiString(amp; ansiFileName);

}

return(rc);