我使用每个字节与"A"异或来生成加密文件。并再次执行该操作以解密文件->Excel正常打开解密文件。
现在我想用Excel打开一个加密文件。
在返回缓冲区之前,我挂接ReadFile API对其进行解密
但Excel显示
Excel无法打开文件filename.xlsx,因为文件格式或文件扩展名不是有效的
读取前8个字节后。
解密的8个字节是50 4B 03 04 14 00 06 00
,这是正确的Open Office XML签名,与原始文件相同。
这里是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;}
需要挂接其他API才能完美地打开加密文件。
需要挂接其他API才能完美打开加密文件。
可能是。在您观察到的ReadFile
读取后,文件可能会以其他方式读取。
有ReadFileEx
和ReadFileScatter
,虽然第一种很少被调用,但第二种更为罕见。应用程序可能会直接调用NtReadFile
,但可能性不大。
更有可能的是,使用CreateFileMapping
或等效工具创建文件映射,然后使用MapViewOfFile
或等效工具。在这种情况下,我看不出有一种干净的方法可以通过挂钩来完成。
也有可能是从其他进程中读取的。
我的建议是获取procmon工具,过滤对目标文件路径的访问,并查看所有文件操作。您可以查看每个操作的调用堆栈,并查看需要挂接的内容。