【发布时间】: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