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拖拽消息,模拟拖拽动作代码
最新推荐文章于 2019-12-22 14:42:59 发布