罗萨 发表于 2022-4-17 19:05

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]
查看完整版本: Hook CreateFile 改写文件