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

📄 zmsg.c

📁 利用免费网关发送短信
💻 C
📖 第 1 页 / 共 5 页
字号:
		{
			// 中止发送线程
			TerminateThread(g_hSend, 0);
			CloseHandle(g_hSend);
			g_hSend = NULL;
			SendDlgItemMessage(g_hWnd, IDC_STATUS, SB_SETTEXT, 0, (LPARAM) "短信发送被取消。");
			SendDlgItemMessage(g_hWnd, IDC_STATUS,
				SB_SETTEXT, 1, (LPARAM) ((g_szSession[0] == '\0') ? "未登录" : "已登录"));
			SendDlgItemMessage(g_hWnd, IDC_BUTTON_SEND, WM_SETTEXT, 0, (LPARAM) "发送(&S)");
		}
		break;

		// 设置
	case IDC_BUTTON_SETTING:
		if (DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_SETTING), g_hWnd, (DLGPROC) SettingDlgProc) == IDCANCEL)
			break;

	case IDC_BUTTON_LOGIN:
		// 停止发送
		if (g_hSend)
		{
			// 如果正在登录,先结束登录线程
			TerminateThread(g_hSend, 0);
			CloseHandle(g_hSend);
			g_hSend = NULL;
			SendDlgItemMessage(g_hWnd, IDC_STATUS, SB_SETTEXT, 0, (LPARAM) "短信发送被取消。");
			SendDlgItemMessage(g_hWnd, IDC_STATUS,
				SB_SETTEXT, 1, (LPARAM) ((g_szSession[0] == '\0') ? "未登录" : "已登录"));
			SendDlgItemMessage(g_hWnd, IDC_BUTTON_SEND, WM_SETTEXT, 0, (LPARAM) "发送(&S)");
		}
		// 设置更改,重新登录
		if (g_hLogin)
		{
			// 如果正在登录,先结束登录线程
			TerminateThread(g_hLogin, 0);
			CloseHandle(g_hLogin);
		}
		// 创建登录线程
		g_hLogin = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) ZmccLogin, NULL, 0, &i);
		break;

	//case IDC_BUTTON_GETRANDOM:
	//	DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_GETRANDOM), g_hWnd, GetRandomDlgProc);
	//	break;

		// 关于
	case IDC_BUTTON_ABOUT:
		DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_ABOUT), g_hWnd, (DLGPROC) AboutDlgProc);
		break;

		// 退出
	case IDC_BUTTON_EXIT:
		OnSaveSetting();

		// 关闭线程
		if (g_hLogin)
		{
			TerminateThread(g_hLogin, 0);
			CloseHandle(g_hLogin);
		}
		if (g_hSend)
		{
			TerminateThread(g_hSend, 0);
			CloseHandle(g_hSend);
		}
		EndDialog(g_hWnd, 0);
		break;

	default:
		break;
	}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 命令消息处理
void WINAPI OnZmsgUpdate(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
	PBYTE p;
	HANDLE hFile;
	DWORD dwOutSize;
	BYTE szTemp[1024];
	char szBatName[MAX_PATH];
	char szExeName[MAX_PATH];
	char szExePath[MAX_PATH];
	char szExeFullPath[MAX_PATH];

	wsprintf(szTemp,
		"你正在使用的 %s 版本是 %d.%d.%d%s,现在已经检测到更高的版本:\n\n"
		"    版本信息: %d.%d.%d%s\n\n"
		"    文件大小: %d 字节\n\n"
		"要关闭程序并进行升级更新吗?",
		STR_APPNAME,
		ZMSG_VERSION / 100,
		(ZMSG_VERSION % 100) / 10,
		ZMSG_VERSION % 10,
		(ZMSG_VERSION % 2) ? " (测试版)" : NULL,
		(DWORD) wParam / 100,
		((DWORD) wParam % 100) / 10,
		(DWORD) wParam % 10,
		((DWORD) wParam % 2) ? " (测试版)" : NULL,
		(DWORD)lParam);

	if (MessageBox(hWnd, szTemp, STR_APPNAME, MB_ICONQUESTION | MB_YESNO) == IDYES)
	{
		lstrcpy(szBatName, g_szIniFileName);
		p = StrRChr(szBatName, NULL, '.');
		if (p == NULL)
			p = szBatName + lstrlen(szBatName);
		lstrcpy(p, ".bat");
		hFile = CreateFile(szBatName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
		if (hFile == INVALID_HANDLE_VALUE)
		{
			MessageBox(hWnd, "程序更新失败,可能是目标路径不可写。", STR_APPNAME, MB_ICONSTOP);
		}
		else
		{
			lstrcpy(szExeFullPath, g_szIniFileName);
			p = StrRChr(szExeFullPath, NULL, '.');
			if (p)
			{
				*p = 0;
			}

			lstrcpy(szExePath, szExeFullPath);
			p = StrRChr(szExePath, NULL, '\\');
			if (p)
			{
				*(p++) = 0;
			}
			wsprintf(szExeName, "%s.exe", p ? p : STR_APPNAME);

			wsprintf(szTemp,
				":REPEAT\r\n"
				"DEL \"%s.exe\"\r\n"
				"IF EXIST \"%s.exe\" GOTO REPEAT\r\n"
				"MOVE \"%s.new\" \"%s.exe\"\r\n"
				"START /D \"%s\" %s\r\n"
				"DEL %%0\r\n",
				szExeFullPath, szExeFullPath, szExeFullPath, szExeFullPath, szExePath, szExeName);
			WriteFile(hFile, szTemp, lstrlen(szTemp), &dwOutSize, 0);
			CloseHandle(hFile);

			szBatName[lstrlen(szBatName) - 1] = 't';
			ShellExecute(NULL, NULL, szBatName, NULL, NULL, SW_HIDE);
			SendMessage(g_hWnd, WM_ZMSGNOTIFY, 0, WM_LBUTTONUP);
			SendMessage(hWnd, WM_CLOSE, 0, 0);
			SendMessage(g_hWnd, WM_CLOSE, 0, 0);
		}
	}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 登录函数
int WINAPI ZmccLogin()
{
	char * p;
	char * pEnd;
	int iResult;
	UINT uReceive;
	char szTemp[25100];

	// 如果没有用户名或者没有密码
	if ((g_szUserName[0] == '\0') || (g_szPassword[0] == '\0'))
	{
		SendMessage(g_hWnd, WM_COMMAND, MAKEWPARAM(IDC_BUTTON_SETTING, 0), 0);
		iResult = ZERROR_NOACCOUNT;
	}
	else
	{
		g_szSession[0] = 0;
		SendDlgItemMessage(g_hWnd, IDC_STATUS, SB_SETTEXT, 0, (LPARAM) "正在登录......");
		SendDlgItemMessage(g_hWnd, IDC_STATUS, SB_SETTEXT, 1, (LPARAM) "正在登录");

		// 构造 HTTP 请求
		if (g_uGateWay == GW_ZMSHOP)
		{
			wsprintf(szTemp,
				"action1=&chk_basketdetail_id=&traceshopcode=&tracegdsid=&shopcode=&cctshopcode=&cctgdsid=&ccttype=&cctodrid=&"
				"uid=%s&pwd=%s&Submit2=%%B5%%C7%%C2%%BC", g_szUserName, g_szPassword);
		}
		else
		{
			wsprintf(szTemp,
				(g_uGateWay == GW_NBUC) ? "ID=%s&Password=%s&BrowerVer=IE&B1=%%BD%%F8%%C8%%EB%%CF%%B5%%CD%%B3" : 
				"userName=%s&userPass=%s&refer=%%2FMsgSendChoose.jsp%%3FzmccCatalog%%3D0801",
				g_szUserName, g_szPassword);
		}
		
		if (g_uGateWay == GW_ZMSHOP)
		{
			uReceive = 640;
			iResult = HttpRequest(
				"www.zmshop.com",
				80, 
				"/order/mbrloginseek.asp",
				"www.zmshop.com", 
				"http://www.zmshop.com/order/mbrlogin.asp",
				NULL,
				szTemp,
				lstrlen(szTemp),
				szTemp,
				&uReceive,
				g_szProxyAddress,
				g_wProxyPort,
				FALSE,
				g_hWnd);
		}
		else if (g_uGateWay == GW_NBUC)
		{
			uReceive = 399;
			iResult = HttpRequest(
				"211.91.2.221",
				80, 
				"/sms165/pass.asp",
				"211.91.2.221", 
				NULL,
				NULL,
				szTemp,
				lstrlen(szTemp),
				szTemp,
				&uReceive,
				g_szProxyAddress,
				g_wProxyPort,
				FALSE,
				g_hWnd);
		}
		else
		{
			uReceive = 25000;
			iResult = HttpRequest(
				g_szZmccHost,
				80, 
				"/loginAction.do",
				"www.zmcc.com.cn", 
				"http://www.zmcc.com.cn/MsgSendChoose.jsp?zmccCatalog=0801",
				NULL,
				szTemp,
				lstrlen(szTemp),
				szTemp,
				&uReceive,
				g_szProxyAddress,
				g_wProxyPort,
				TRUE,
				g_hWnd);
		}
		if (iResult == ZERROR_SUCCESS)
		{
			szTemp[uReceive] = 0;
			_StrToDebug(szTemp);

			// 分析结果
			if (((g_uGateWay == GW_ZMSHOP) && (strstr(szTemp, "/index.asp") == NULL)) ||
				((g_uGateWay == GW_NBUC) && (strstr(szTemp, "main.asp") == NULL)) ||
				((g_uGateWay == GW_ZMCC) && (strstr(szTemp, "JSESSIONID") == NULL)) ||
				((g_uGateWay == GW_ZMCC) && (strstr(szTemp, "密码不正确") || strstr(szTemp, "用户名不存在"))))
			{
				iResult = ZERROR_LOGIN;
			}
			else
			{
				// 获取 Cookie
				for (p = strstr(szTemp, "Set-Cookie: "); p; p = strstr(pEnd + 1, "Set-Cookie: "))
				{
					pEnd = strchr(p, ';');
					if (pEnd == NULL) pEnd = strrchr(p, '\r');
					if (pEnd == NULL) pEnd = strrchr(p, '\n');
					if (pEnd)
					{
						*pEnd = 0;
						lstrcat(g_szSession, p + 12);
						lstrcat(g_szSession, "; ");
						*pEnd = ';';
					}
					else
					{
						break;
					}
				}

				if (g_szSession[0])
				{
					g_szSession[lstrlen(g_szSession) - 2] = 0;
				}

				if (g_uGateWay == GW_ZMCC)
				{
					// 获取 User ID
					p = strstr(pEnd + 1, "LOGINCOOKIE=");
					if (p == NULL)
					{
						p = strstr(szTemp, "LOGINCOOKIE=");
					}
					if (p)
					{
						for (pEnd = p; pEnd < szTemp + sizeof(szTemp) - 1; pEnd++)
						{
							if ((*pEnd == ';') || (*pEnd == '\r') || (*pEnd == '\n'))
								break;
						}
						*pEnd = '\0';
						lstrcpyn(g_szUserID, p + 12, sizeof(g_szUserID));
					}

					// 获取 User Mobile
					p = strstr(pEnd + 1, "mobileNo");
					if (p)
					{
						p = strstr(p, "value=");
						if (p)
						{
							p += 6;
							lstrcpyn(g_szUserMobile, p, 12);
						}
					}

					SendDlgItemMessage(g_hWnd, IDC_STATUS, SB_SETTEXT, 1, (LPARAM) "正在校验");
					iResult = ZmccGetRandom();
				}
			}
		}
	}

	// 显示信息
	if (iResult == ZERROR_SUCCESS)
	{
		SendDlgItemMessage(g_hWnd, IDC_STATUS, SB_SETTEXT, 1, (LPARAM) "已登录");
		SendDlgItemMessage(g_hWnd, IDC_STATUS, SB_SETTEXT, 0, (LPARAM) "登录成功,等待发送短信。");
	}
	else
	{
		g_szSession[0] = '\0';
		SendDlgItemMessage(g_hWnd, IDC_STATUS, SB_SETTEXT, 0, (LPARAM) c_szErrorMsg[iResult]);
		SendDlgItemMessage(g_hWnd, IDC_STATUS, SB_SETTEXT, 1, (LPARAM) "未登录");
	}

	// 关闭线程句柄
	if (g_hLogin)
	{
		CloseHandle(g_hLogin);
		g_hLogin = NULL;
	}
	return iResult;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int WINAPI ZmccGetRandom()
{
	PBYTE p;
	PBYTE pEnd;
	int iResult;
	UINT uReceive;
	char szUri[32];
	char szTemp[25100];

	uReceive = 25000;
	iResult = HttpRequest(
		g_szZmccHost, 
		80, 
		"/MsgSendChoose.jsp?zmccCatalog=080101",
		"www.zmcc.com.cn",
		"http://www.zmcc.com.cn/MsgSendChooseAction.do",
		g_szSession,
		NULL,
		0,
		szTemp,
		&uReceive, 
		g_szProxyAddress,
		g_wProxyPort,
		TRUE,
		g_hWnd);

	if (iResult == ZERROR_SUCCESS)
	{		
		wsprintf(szUri, "/image.jsp");
		uReceive = 2000;
		iResult = HttpRequest(
				g_szZmccHost, 
				80, 
				szUri,
				"www.zmcc.com.cn",
				"http://www.zmcc.com.cn/MsgSendChoose.jsp?zmccCatalog=0801",
				g_szSession,
				NULL,
				0,
				szTemp,
				&uReceive, 
				g_szProxyAddress,
				g_wProxyPort,
				TRUE,
				g_hWnd);
		if (iResult == ZERROR_SUCCESS)
		{
			szTemp[uReceive] = 0;
			p = strstr(szTemp, "\r\n\r\n");
			if (p == NULL)
			{
				return ZERROR_CHECKRANDOM;
			}
			p += 4;
			p = strstr(p, "\xff\xd8");
			pEnd = szTemp + uReceive;

			//g_szRandom = GetRandom(p, pEnd);

			{
				DWORD dwSize;
				HANDLE hFile;
				char szTempPath[MAX_PATH];
				char szFileName[MAX_PATH];

				GetTempPath(MAX_PATH, szTempPath);
				wsprintf(szFileName, "%sZMSGRandom.jpg", szTempPath);
				hFile = CreateFile(szFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
				if (hFile == INVALID_HANDLE_VALUE)
				{
					return ZERROR_CHECKRANDOM;
				}

				dwSize = uReceive - (p - szTemp);
				WriteFile(hFile, p, dwSize, &dwSize, NULL);

				CloseHandle(hFile);
			}
		}
	}

	if (iResult == ZERROR_SUCCESS)
	{
		SendMessage(g_hWnd, WM_COMMAND, IDC_BUTTON_GETRANDOM, 0);

⌨️ 快捷键说明

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