¿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> 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 p>
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);