BOOL CprjVPackV4BatchToolsDlg::FSendDropFile(CString strFilePath)
{
int
nResult
=
FALSE;
HWND hMain
=
NULL;
char
szFile[MAX_PATH]
=
{
0
};
DWORD dwBufSize
=
0
;
//
sizeof(DROPFILES) + sizeof(szFile) + 1;
BYTE
*
pBuf
=
NULL;
DWORD dwProcessId
=
0
;
HANDLE hProcess
=
0
;
LPSTR pszRemote
=
NULL;
wcstombs(szFile,strFilePath.GetBuffer(
0
),_MAX_PATH);
dwBufSize
=
sizeof
(DROPFILES)
+
strlen(szFile)
+
1
;
hMain
=
::FindWindow(NULL,_T(
"
免杀压缩壳
"
));
if
( hMain
==
NULL)
{
MessageBox(_T(
"
不能找到加壳主程
序!
"
));
goto
Exit0;
}
pBuf
=
new
BYTE[dwBufSize];
if
(pBuf
==
NULL)
goto
Exit0;
memset(pBuf,
0
,dwBufSize);
DROPFILES
*
pDrop
=
(DROPFILES
*
)pBuf;
pDrop
->
pFiles
=
sizeof
(DROPFILES);
strcpy((
char
*
)(pBuf
+
sizeof
(DROPFILES)), szFile);
GetWindowThreadProcessId(hMain,
&
dwProcessId);
if
(
0
==
dwProcessId)
{
goto
Exit0;
}
hProcess
=
OpenProcess(PROCESS_VM_OPERATION
|
PROCESS_VM_WRITE, FALSE, dwProcessId);
if
(hProcess
==
0
)
{
goto
Exit0;
}
pszRemote
=
(LPSTR)VirtualAllocEx(hProcess, NULL, dwBufSize, MEM_COMMIT, PAGE_READWRITE);
if
(NULL
==
pszRemote)
{
goto
Exit0;
}
if
(WriteProcessMemory(hProcess, pszRemote, pBuf, dwBufSize,
0
))
{
::SendMessage(hMain, WM_DROPFILES, (WPARAM)pszRemote, NULL);
}
else
{
goto
Exit0;
}
nResult
=
TRUE;
Exit0:
if
(pBuf)
{
delete [] pBuf;
pBuf
=
NULL;
}
return
nResult;
}
VC 直接发送WM_DROPFILES拖拽消息,模拟拖拽动作代码
最新推荐文章于 2025-03-09 20:37:53 发布