前一段時間在病毒源代碼的博客上看到了QQ尾巴病毒的原理,他的博客確實不錯,有很多這方面的東西。不過他是用VB或者Delphi寫的(區分不清,呵呵),而且感覺他寫得有點亂,可能我習慣看C格式的代碼吧。最近我用VC重寫了一下,增加了一點設置功能,一些地方又加了些注釋,會比較容易看懂。
首先新建一個WIN32 CONSOLE的工程,主文件代碼如下:
#include "stdafx.h"
#include <stdio.h>
#include <Windows.h>
void errOut (char *msg)
{
printf ("%s\n",msg);
}
int main(int argc, char* argv[])
{
HINSTANCE hDll=LoadLibrary ("..\\dll\\debug\\dll.dll");//設置DLL的路徑,假如你的DLL工程名和我一樣的話就不用改了
if (hDll==NULL)
{
errOut("failed to open dll file!");
return 1;
}
typedef void (WINAPI *MYFUN) ();
MYFUN mf=NULL;
mf=(MYFUN)GetProcAddress(hDll,"HookOn");
if (mf==NULL)
{
errOut("failed to find HookOn function!");
return 1;
}
printf ("input the string you want to insert:");
scanf ("%s",(char*)GetProcAddress(hDll,"msg")+2);//set inserted message,+2跳過兩個換行符
mf ();
printf ("press any key to unintall hook!\n");
system ("pause");
mf=(MYFUN)GetProcAddress(hDll,"HookOff");
if (mf==NULL)
{
errOut("failed to find HookOff function!");
return 1;
}
FreeLibrary(hDll);
return 0;
}
然後新建一個WIN32 DLL的工程插入到原有工作空間,我的工程名為dll。
DLL主文件源碼:
// dll.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
#pragma data_seg( ".Shared")
char msg[255]="\n\n"; //在原消息後隔