好友
阅读权限25
听众
最后登录1970-1-1
|
罗萨
发表于 2022-4-17 19:05
288吾爱币
本帖最后由 罗萨 于 2022-4-17 19:21 编辑
目标:通过对目标EXE注入dll,Hook CreateFile来将目标文件替换成我内存中一个解密后文件的句柄。
目前我使用了
CreateNamedPipe(mypath, PIPE_ACCESS_DUPLEX, 0, PIPE_UNLIMITED_INSTANCES, filesize, filesize, 0, 0);
后通过CreateFile Write写入文件到管道后。
[C++] 纯文本查看 复制代码 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(句柄无效)
请问是哪里的问题?或者通过别的方式实现我的目标,整个过程我不希望我解密后的文件出现在硬盘中
以上,感谢前辈们指教 |
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|