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

类别:VC语言 点击:0 评论:0 推荐:
 

 

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

 

Chapter

 

 

4

 

将要插入的DLL的制造过程(1)

 

 

现在我们制作所需的InjectProcess.DLL。

记得你的DLL一定要短小精悍,不要太大了!

最好不要用Wizard生成,你自己亲手写吧,这样可免除许多不必要代码。

 

第一个应用自然是给用户进程前面加一个启动封面,这个又好看又实用,而且代码也很简单喔。

首先我们写出ATL DLL的代码,当然你可以用ATL COM Wizard来生成,记住一定要写

   DllCanUnloadNow

   DllGetClassObject

   DllRegisterServer  

   DllUnregisterServer

的实现,否则后面的ATL窗口就不显示了,偶也不知道为什么,喂,那个小孩,砖头是凶器,不要乱扔喔!

 

然后用ATL Object Wizard加入一个Dialog object,就叫Splasher吧:

记得把那些无用的花花草草都删掉,如OnOK,OnCancel,两个按钮等等。并设置对话框为没有TITLEBAR和SYSTEMMENU!

 

加几个成员变量:

// Special members:

public:

   // Variable that tells us if we want to auto-delete ourselves.

   BYTE m_bAutoDelete;

 

   static BOOL m_c_bShowSplasher;

   static CSplasher* m_c_pSplasher;

 

它的构造和析构要这样作:

   // Set m_bAutoDelete to TRUE to automatically delete ourselves.

   CSplasher(): m_bAutoDelete (TRUE)

   {

   }

 

   ~CSplasher()

   {

          // Clear the static window pointer.

          if( m_c_pSplasher )

          {

                 delete m_c_pSplasher;

                 m_c_pSplasher = NULL;

          }

   }

 

启动封面自然应该位于正中间嘛,当然你要是乐意的话,可以用MoveWindow来边移动边显示,移动的原理大致如此吧:我们设置定时器间隔为100毫秒,并给出TimerProc函数的实现,这样当TimerProc接到了WM_TIMER消息时,就把当前对话框Move一点点,并重画,于是封面就动了起来。我知道有很多人在这方面很有天赋,我就点到为止吧。

下面我们也设置Timer,不过这是为了让封面只显示一段时间就自毁。

在OnInitDialog中,我们来让窗口位于屏幕中间,并设置Timer:

          // 让Splash Screen处于屏幕的中间:

          CenterWindow();

          // 或者MoveWindow(200,200,0,0,TRUE);

 

          SetTimer(SPLASHER_TIMER, SPLASHER_TIME_CHECK);

                      //  SPLASHER_TIME_CHECK不要定义得太长,我觉得750挺好的

 

给Csplasher的Message Map中加上:

MESSAGE_HANDLER(WM_TIMER, OnTimer)

指定由OnTimer来接收。

 

OnTimer的实现很简单,只是把对话框关了,并Kill Timer:

   // The MESSAGE_HANDLER() entry in the message map essentially tells the ATL windowing

   // classes to call the OnTimer() method when a WM_TIMER message arrives.

   LRESULT OnTimer(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)

   {

          // 关闭Splash Screen:

          EndDialog(0);

          UpdateWindow();  

 

          KillTimer(SPLASHER_TIMER);

          bHandled = TRUE;

          return 0;

   }

 

加入两个方法来启动对话框:

// Operations

public:

   static void EnableSplashScreen(BOOL bEnable = TRUE);

   static void ShowSplashScreen();

 

其实现为:

void CSplasher::EnableSplashScreen(BOOL bEnable /*= TRUE*/)

{

   m_c_bShowSplasher = bEnable;

}

 

void CSplasher::ShowSplashScreen()

{

   if (!m_c_bShowSplasher || m_c_pSplasher != NULL)

   {

          return;

   }

 

   // Allocate a new splash screen, and create the window.

   m_c_pSplasher = new CSplasher;

  

      // 启动对话框,很老土的一种显示方法,大家自由发挥吧:

   if ( !m_c_pSplasher->DoModal() )

   {

          delete m_c_pSplasher;

   }

   else

   {

          m_c_pSplasher->UpdateWindow();

   }

}

 

基本上这样就差不多了。

但是如果用户说我不想看你的破封面,说你是在强奸民意,我们也应该给他们一条生路:

用户点击封面窗口或者按键都可以立即杀死该窗口。

具体怎么做呢,请看下回分解。

                               -----to be continued------

本文地址:http://com.8s8s.com/it/it3167.htm