Hook CreateFile 改写文件
本帖最后由 罗萨 于 2022-4-17 19:21 编辑目标:通过对目标EXE注入dll,Hook CreateFile来将目标文件替换成我内存中一个解密后文件的句柄。
目前我使用了
CreateNamedPipe(mypath, PIPE_ACCESS_DUPLEX, 0, PIPE_UNLIMITED_INSTANCES, filesize, filesize, 0, 0);
后通过CreateFile Write写入文件到管道后。
HANDLE CreateMemFileA( char* filebuff,DWORD sizeo)
{
CString mypath ;
DWORD filesize = sizeo;
DWORD hWriteSize;
_LARGE_INTEGER offst;
offst.HighPart = 0;
offst.LowPart = 0;
mypath.Format ( _T("\\\\.\\Pipe\\Unde\\dat") );
HANDLE pipehandle = CreateNamedPipe(mypath, PIPE_ACCESS_DUPLEX, 0, PIPE_UNLIMITED_INSTANCES, filesize, filesize, 0, 0);
if (pipehandle == INVALID_HANDLE_VALUE)
{
return 0;
}
HANDLE mfhandle = CreateFile(mypath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ| FILE_SHARE_WRITE,0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,0);
if (mfhandle == INVALID_HANDLE_VALUE)
{
CloseHandle(pipehandle);
return 0;
}
else if (WriteFile(mfhandle, filebuff, filesize, &hWriteSize, 0) == FALSE)
{
CloseHandle(pipehandle);
CloseHandle(mfhandle);
return 0;
}
else if(SetFilePointerEx(mfhandle, offst, 0, FILE_BEGIN) == FALSE)
{
CloseHandle(pipehandle);
CloseHandle(mfhandle);
return 0;
}
CloseHandle(mfhandle);
return pipehandle;
}
我将管道句柄返回给EXE发现并不能读取文件,有朋友说我需要使用
DuplicateHandle(GetCurrentProcess(), pipefile, (HANDLE)hProcess, &hTargetHandle, 0, TRUE, DUPLICATE_SAME_ACCESS)
来将句柄返回给exe,经测试DuplicateHandle并不能执行成功且Error代码为6(句柄无效)
请问是哪里的问题?或者通过别的方式实现我的目标,整个过程我不希望我解密后的文件出现在硬盘中
以上,感谢前辈们指教
页:
[1]