【问题标题】:Hook ReadFile function in Excel在 Excel 中挂钩 ReadFile 函数
【发布时间】:2021-06-19 17:10:45
【问题描述】:

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

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

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

但 Excel 显示

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

读取前 8 个字节后。

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

这是myReadFile函数:

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 才能完美打开加密文件。

【问题讨论】:

  • 你确认你的钩子被调用了吗?
  • @JonathanPotter 是的,已经调用了钩子函数。
  • 修改xlsx文件不容易,建议你操作.csv文件,然后保存为.xlsx
  • 很确定你不会成功地完成这项工作。即使你这样做了,你的文件对于任何攻击者来说都是微不足道的解密。无论您要解决什么问题,这看起来都不是解决方案。

标签: c++ excel winapi hook readfile


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-11
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    相关资源
    最近更新 更多