深入探讨Target Eye的文件隐藏机制

Target Eye是一款在2000年开发,直至2010年停止更新的系统。本文将详细介绍Target Eye的文件隐藏机制,以及如何通过特定的函数来隐藏或显示文件。

Target Eye的文件隐藏功能

Target Eye的文件隐藏功能主要依赖于TEHideFile()函数。该函数能够根据用户的需求,隐藏或显示文件,并且能够改变文件的大小,使其难以被检测。

TEHideFile()函数通过设置文件属性来实现隐藏或显示文件。它接受三个参数:文件的完整路径和名称、是否隐藏文件、以及是否改变文件的大小。

BOOL TEHideFile(CString FileName, BOOL Hide, BOOL RandomSize);

如果设置为隐藏,函数会创建一个具有系统和隐藏属性的新文件;如果设置为显示,则创建一个普通文件。此外,如果随机大小参数为真,函数会在文件末尾添加随机数据,改变文件的大小。

Target Eye采用了一种相对古老的方法来隐藏文件,它创建了一个类似于系统文件的隐藏文件。这种方法在Windows XP时代非常有效,但在Windows 7和8中,即使用户勾选了"显示隐藏的文件、文件夹和驱动器"选项,Target Eye隐藏的文件也不会显示。

要显示这些隐藏的系统文件,用户需要打开文件夹选项对话框。在Windows 8中,用户需要在搜索框中输入"显示隐藏的文件夹"并按下回车键。然后,用户需要取消勾选"隐藏受保护的操作系统文件"选项,并在弹出的警告对话框中点击"是"。

TEHideFile()函数的源代码如下:

BOOL TEHideFile(CString FileName, BOOL Hide, BOOL RandomSize) { HANDLE g_hCapFile; DWORD dwBytes; ULONG FileLen; FileLen = GetFileLen(FileName); if (FileLen == 0) return (FALSE); g_hCapFile = CreateFile((char*)FileName.GetBuffer(0), GENERIC_READ, NULL, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM, NULL, NULL); if (g_hCapFile == INVALID_HANDLE_VALUE) { return (FALSE); } char *buffer = (char*)malloc(FileLen); memset(buffer, '\0', FileLen); ReadFile(g_hCapFile, buffer, FileLen, &dwBytes, NULL); CloseHandle(g_hCapFile); DeleteFile(FileName); if (Hide) g_hCapFile = CreateFile((char*)FileName.GetBuffer(0), GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM, NULL); else g_hCapFile = CreateFile((char*)FileName.GetBuffer(0), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (g_hCapFile == INVALID_HANDLE_VALUE) { return (FALSE); } if (!(WriteFile(g_hCapFile, buffer, FileLen, &dwBytes, NULL))) { free(buffer); CloseHandle(g_hCapFile); return (FALSE); } if (RandomSize) { int x; char *temp; x = (int)((double)rand() / (double)RAND_MAX * 8630.0) + 3201; temp = (char*)malloc(x); if (temp) { int i; for (i = 0; i < x; i++) *(temp+i) = (int)((double)rand() / (double)RAND_MAX * ((int)'z' - (int)'a' + 1)) + (int)'a'; if (!(WriteFile(g_hCapFile, temp, FileLen, &dwBytes, NULL))) { free(temp); free(buffer); CloseHandle(g_hCapFile); return (FALSE); } free(temp); } } free(buffer); CloseHandle(g_hCapFile); return (TRUE); }

GetFileLen()函数用于获取文件的长度,以便在隐藏文件时能够正确地读取文件内容。

ULONG GetFileLen(CString FileName) { DWORD dwBytes; HANDLE g_hCapFile; if (FileName == "") return (0); g_hCapFile = CreateFile((char*)FileName.GetBuffer(0), GENERIC_READ, NULL, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM, NULL); if (g_hCapFile == INVALID_HANDLE_VALUE) return (0); dwBytes = SetFilePointer(g_hCapFile, 0, NULL, FILE_END); CloseHandle(g_hCapFile); return (dwBytes); }

要了解全局API钩子,可以阅读ApriorIT的文章《Easy way to set up global API hooks》。如果对内核级隐藏感兴趣,可以通过驱动程序实现,例如SSDT/IDT表操作。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485