繁体   English   中英

在 Excel 中挂钩 ReadFile function

[英]Hook ReadFile function in Excel

我使用 XOR 每个字节与“A”来生成加密文件。 然后再次执行解密文件-> Excel 正常打开解密文件。

现在我想通过 Excel 打开一个加密文件。

我挂钩 ReadFile API 以在返回缓冲区之前对其进行解密。

但是 Excel 显示

Excel 无法打开文件“filename.xlsx”,因为文件格式或文件扩展名无效

读取前 8 个字节后。

解密后的 8 个字节为50 4B 03 04 14 00 06 00 ,这是正确的 Open Office XML 签名,与原始文件相同。

这是myReadFile function:

BOOL WINAPI MyReadFile(
_In_ HANDLE hFile,
_Out_writes_bytes_to_opt_(nNumberOfBytesToRead, *lpNumberOfBytesRead) __out_data_source(FILE) LPVOID lpBuffer,
_In_ DWORD nNumberOfBytesToRead,
_Out_opt_ LPDWORD lpNumberOfBytesRead,
_Inout_opt_ LPOVERLAPPED lpOverlapped){

BOOL result = ReadFile(hFile, lpBuffer, nNumberOfBytesToRead, lpNumberOfBytesRead, lpOverlapped);
if (!result) {
    return result;
}

if (*lpNumberOfBytesRead == 0) {
    return result;
}
char* Buf = (char*)lpBuffer;
for (long i = 0; i < (*lpNumberOfBytesRead); i++)
{
    Buf[i] = Buf[i] ^ 'A';
}
return result;}

是否需要 hook 其他 API 才能完美打开加密文件。

是否需要 hook 其他 API 才能完美打开加密文件。

可能。 在您观察到的ReadFile读取后,文件可能会以其他方式读取。

ReadFileExReadFileScatter ,虽然第一个很少被调用,但第二个更罕见。 应用程序可能会直接调用NtReadFile ,但可能性不大。

更有可能的是,使用CreateFileMapping或等效项创建文件映射,然后使用MapViewOfFile或等效项。 在这种情况下,我看不到通过钩子实现它的干净方法。

也有可能从其他进程中读取。

我的建议是获取procmon工具,过滤对目标文件路径的访问,并查看所有文件操作。 您可以查看每个操作的调用堆栈,并查看您需要挂钩的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM