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

📄 call.asm

📁 用ASM实现Server及sql操作
💻 ASM
📖 第 1 页 / 共 2 页
字号:

CallGetUserName	proc lpName:DWORD,lpPass:DWORD
	LOCAL TmpBuff[600]:BYTE
	LOCAL PassBuff[20]:BYTE
	invoke lstrlen,lpName
	.if eax < 50
		invoke wsprintf,addr PassBuff,STEXT('%lu'),lpPass
		invoke wsprintf,addr TmpBuff,STEXT("EXEC by_CheckUser @User='%s',@Pass='%s',@type=0"),lpName,addr PassBuff
		invoke ShellSqlQueryDword,addr TmpBuff
		.if eax != -1
			.if eax == 0
				invoke wsprintf,addr TmpBuff,STEXT("DELETE FROM T_Single WHERE (Name='%s')AND(Password='%s')"),lpName,addr PassBuff
				invoke ShellSqlExecCommand,addr TmpBuff
				or eax,-1
			.else
				xor eax,eax
			.endif
		.endif
	.else
		or eax,-1
	.endif
	ret
CallGetUserName	endp

CallGetNetName	proc lpName:DWORD,lpPass:DWORD,lpIp:DWORD,lpSupply:DWORD
	LOCAL TmpBuff[600]:BYTE
	LOCAL PassBuff[20]:BYTE
	LOCAL IpBuff[20]:BYTE
	invoke lstrlen,lpName
	.if eax < 50
		invoke inet_ntoa,lpPass
		invoke wsprintf,addr TmpBuff,STEXT("EXEC by_CheckUser @User='%s',@LocalIp='%s',@type=1"),lpName,eax
		invoke ShellSqlQueryUserSource,addr TmpBuff,lpSupply,addr IpBuff
		.if eax != -1
			mov dl,byte ptr lpIp+3
			.if dl >= al && dl <= ah
				invoke inet_addr,addr IpBuff
				and eax,0ffffffh
				and lpIp,0ffffffh
				.if eax == lpIp
					invoke wsprintf,addr TmpBuff,STEXT("SELECT AgentName FROM T_Agent WHERE (AgentId='%s')"),lpSupply
					invoke ShellSqlFindUser,addr TmpBuff,lpSupply
					xor eax,eax
				.else
					or eax,-1
				.endif
			.else
				or eax,-1
			.endif
		.elseif eax == 0
			invoke inet_addr,addr IpBuff
			.if eax == lpIp
				invoke wsprintf,addr TmpBuff,STEXT("SELECT AgentName FROM T_Agent WHERE (AgentId='%s')"),lpSupply
				invoke ShellSqlFindUser,addr TmpBuff,lpSupply
				xor eax,eax
			.else
				or eax,-1
			.endif
		.endif
	.else
		or eax,-1
	.endif
	ret
CallGetNetName	endp

CallGetUserInfo	proc lpName:DWORD,lpPass:DWORD
	LOCAL TmpBuff[MAX_PATH]:BYTE
	LOCAL PassBuff[20]:BYTE
	invoke lstrlen,lpName
	.if eax < 50
		invoke wsprintf,addr PassBuff,STEXT('%lu'),lpPass
		invoke wsprintf,addr TmpBuff,STEXT("SELECT Number FROM T_Single WHERE (Name='%s')AND(Password='%s')"),lpName,addr PassBuff
		invoke ShellSqlQueryUser,addr TmpBuff
	.else
		or eax,-1
	.endif
	ret
CallGetUserInfo	endp

CallGetNetInfo	proc lpName:DWORD,lpPass:DWORD
	LOCAL TmpBuff[MAX_PATH]:BYTE
	LOCAL PassBuff[20]:BYTE
	invoke lstrlen,lpName
	.if eax < 50
		invoke wsprintf,addr PassBuff,STEXT('%lu'),lpPass
		invoke wsprintf,addr TmpBuff,STEXT("SELECT Number FROM T_Net WHERE (Name='%s')AND(Password='%s')"),lpName,addr PassBuff
		invoke ShellSqlQueryUser,addr TmpBuff
	.else
		or eax,-1
	.endif
	ret
CallGetNetInfo	endp

CallModifyUserPass	proc lpName:DWORD,lpPass:DWORD,nPass:DWORD
	LOCAL TmpBuff[MAX_PATH]:BYTE
	LOCAL PassBuff[20]:BYTE
	LOCAL nPassBuff[20]:BYTE
	invoke lstrlen,lpName
	.if eax < 50
		invoke wsprintf,addr PassBuff,STEXT('%lu'),lpPass
		invoke wsprintf,addr nPassBuff,STEXT('%lu'),nPass
		invoke wsprintf,addr TmpBuff,STEXT("UPDATE T_Single SET Password='%s' WHERE (UserName='%s')AND(Password='%s')"),addr nPassBuff,lpName,addr PassBuff
		invoke ShellSqlExecCommand,addr TmpBuff
	.else
		or eax,-1
	.endif
	ret
CallModifyUserPass	endp

CallModifyNetPass	proc lpName:DWORD,lpPass:DWORD,nPass:DWORD
	LOCAL TmpBuff[MAX_PATH]:BYTE
	LOCAL PassBuff[20]:BYTE
	LOCAL nPassBuff[20]:BYTE
	invoke lstrlen,lpName
	.if eax < 50
		invoke wsprintf,addr PassBuff,STEXT('%lu'),lpPass
		invoke wsprintf,addr nPassBuff,STEXT('%lu'),nPass
		invoke wsprintf,addr TmpBuff,STEXT("UPDATE T_Net SET Password='%s' WHERE (UserName='%s')AND(Password='%s')"),addr nPassBuff,lpName,addr PassBuff
		invoke ShellSqlExecCommand,addr TmpBuff
	.else
		or eax,-1
	.endif
	ret
CallModifyNetPass	endp

CallSetUserValidate	proc lpName:DWORD,lpPass:DWORD,lpIp:DWORD,lpValidate:DWORD
	LOCAL TmpBuff[MAX_PATH]:BYTE
	LOCAL PassBuff[20]:BYTE
	invoke lstrlen,lpName
	.if eax < 50
		invoke wsprintf,addr PassBuff,STEXT('%lu'),lpPass
		invoke inet_ntoa,lpIp
		mov edx,eax
		.if lpValidate != 0
			invoke wsprintf,addr TmpBuff,STEXT("UPDATE T_Net SET Validate=1,LocalIp='%s' WHERE (Name='%s')AND(Password='%s')"),edx,lpName,addr PassBuff
		.else
			invoke wsprintf,addr TmpBuff,STEXT("UPDATE T_Net SET Validate=0,LocalIp=NULL WHERE (Name='%s')AND(Password='%s')"),lpName,addr PassBuff
		.endif
		invoke ShellSqlExecCommand,addr TmpBuff
	.else
		or eax,-1
	.endif
	ret
CallSetUserValidate	endp

CallSetUserSingle	proc lpName:DWORD,lpPass:DWORD,lpSingle:DWORD
	LOCAL TmpBuff[MAX_PATH]:BYTE
	LOCAL PassBuff[20]:BYTE
	invoke lstrlen,lpName
	.if eax < 50
		invoke wsprintf,addr PassBuff,STEXT('%lu'),lpPass
		.if lpSingle != 0
			invoke wsprintf,addr TmpBuff,STEXT("UPDATE T_Net SET Single=1 WHERE (Name='%s')AND(Password='%s')"),lpName,addr PassBuff
		.else
			invoke wsprintf,addr TmpBuff,STEXT("UPDATE T_Net SET Single=0 WHERE (Name='%s')AND(Password='%s')"),lpName,addr PassBuff
		.endif
		invoke ShellSqlExecCommand,addr TmpBuff
	.else
		or eax,-1
	.endif
	ret
CallSetUserSingle	endp

CallModifyUserIp	proc uses ebx,lpName:DWORD,lpPass:DWORD,lpIp:DWORD,lpArea:DWORD
	LOCAL TmpBuff[MAX_PATH]:BYTE
	LOCAL PassBuff[20]:BYTE
	LOCAL IpBuff[20]:BYTE
	LOCAL hIpBegin[10]:BYTE
	LOCAL hIpEnd[10]:BYTE
	invoke lstrlen,lpName
	.if eax < 50
		invoke inet_ntoa,lpIp
		mov ebx,eax
		invoke wsprintf,addr PassBuff,STEXT('%lu'),lpPass
		movzx ecx,byte ptr lpArea
		movzx edx,byte ptr lpArea+2
		invoke wsprintf,addr TmpBuff,STEXT("UPDATE T_Net SET IpAddr='%s',IpSecBegin=%lu,IpSecEnd=%lu WHERE (Name='%s')AND(Password='%s')"),ebx,ecx,edx,lpName,addr PassBuff
		invoke ShellSqlExecCommand,addr TmpBuff
	.else
		or eax,-1
	.endif
	ret
CallModifyUserIp	endp

CallUpdateUserNum	proc lpName:DWORD,lpPass:DWORD
	LOCAL TmpBuff[400]:BYTE
	LOCAL PassBuff[20]:BYTE
	invoke lstrlen,lpName
	.if eax < 50
		invoke wsprintf,addr PassBuff,STEXT('%lu'),lpPass
		invoke wsprintf,addr TmpBuff,STEXT("UPDATE T_Single SET Number=Number-1 WHERE (Name='%s')AND(Password='%s')AND(Number<>0)AND(State=0 OR State IS NULL)"),lpName,addr PassBuff
		invoke ShellSqlExecCommand,addr TmpBuff
	.else
		or eax,-1
	.endif
	ret
CallUpdateUserNum	endp

CallUpdateNetNum	proc lpName:DWORD,lpIp:DWORD
	LOCAL TmpBuff[400]:BYTE
	invoke lstrlen,lpName
	.if eax < 50
		invoke inet_ntoa,lpIp
		invoke wsprintf,addr TmpBuff,STEXT("UPDATE T_Net SET Number=Number-1 WHERE (Name='%s')AND(Number<>0)AND(State=0 OR State IS NULL)AND((Validate<>1)OR(LocalIp='%s'))"),lpName,eax
		invoke ShellSqlExecCommand,addr TmpBuff
	.else
		or eax,-1
	.endif
	ret
CallUpdateNetNum	endp

CallSupplySingle	proc uses ebx,lpName:DWORD,lpPass:DWORD,lpCrdName:DWORD,lpCrdPass:DWORD,lpType:DWORD
	LOCAL TmpBuff[400]:BYTE
	LOCAL PassBuff[20]:BYTE
	LOCAL CrdBuff[20]:BYTE
	LOCAL CarBuff[50]:BYTE
	LOCAL TimeBuff[20]:BYTE
	LOCAL hTime:SYSTEMTIME
	LOCAL hNum:DWORD
	or ebx,-1
	invoke lstrlen,lpName
	.if eax < 50
		invoke wsprintf,addr CrdBuff,STEXT('%lu'),lpCrdPass
		invoke wsprintf,addr TmpBuff,STEXT("SELECT COUNT(*) FROM T_Car WHERE (CarID='%s')AND(CarPassword='%s')AND(CarState IS NULL)"),lpCrdName,addr CrdBuff
		invoke ShellSqlQueryUser,addr TmpBuff
		.if eax == 1								; 判断卡号是否存在
			invoke wsprintf,addr TmpBuff,STEXT("SELECT Source FROM T_Single WHERE (Name='%s')"),lpName
			invoke ShellSqlFindUser,addr TmpBuff,addr CarBuff		; 判断用户名是否存在
			.if lpType == 1						; 新建用户
				.if eax == -1
					invoke wsprintf,addr PassBuff,STEXT('%lu'),lpPass
					invoke GetLocalTime,addr hTime
					invoke TimeToStr,addr hTime,addr TimeBuff
					invoke wsprintf,addr TmpBuff,STEXT("INSERT INTO T_Single (Name,Password,Number,SupplyTime,Source,CreateTime) VALUES ('%s','%s',200,'%s','%s','%s')"),lpName,addr PassBuff,addr TimeBuff,lpCrdName,addr TimeBuff
					invoke ShellSqlExecCommand,addr TmpBuff
					.if eax == 0
						invoke wsprintf,addr TmpBuff,STEXT("DELETE FROM T_Car WHERE (CarID='%s')"),lpCrdName
						invoke ShellSqlExecCommand,addr TmpBuff
						mov ebx,200
					.endif
				.else
					mov ebx,-2
				.endif
			.else
				.if eax == 0					; 已存在的用户
					invoke CallIsValidateCrd,addr CarBuff,lpCrdName
					.if eax == 0
						invoke wsprintf,addr PassBuff,STEXT('%lu'),lpPass
						invoke GetLocalTime,addr hTime
						invoke TimeToStr,addr hTime,addr TimeBuff
						invoke wsprintf,addr TmpBuff,STEXT("UPDATE T_Single SET Number=Number+200,SupplyTime='%s',Source='%s' WHERE ((Name='%s')AND(Password=%s)AND(State=0 OR State IS NULL))"),addr TimeBuff,lpCrdName,lpName,addr PassBuff
						invoke ShellSqlExecCommand,addr TmpBuff
						.if eax == 0
							invoke wsprintf,addr TmpBuff,STEXT("DELETE FROM T_Car WHERE (CarID='%s')"),lpCrdName
							invoke ShellSqlExecCommand,addr TmpBuff
							invoke wsprintf,addr TmpBuff,STEXT("SELECT Number FROM T_Single WHERE(Name='%s')"),lpName
							invoke ShellSqlQueryDword,addr TmpBuff
							mov ebx,eax
						.endif
					.else
						mov ebx,-4
					.endif
				.else
					mov ebx,-3
				.endif
			.endif
		.endif
	.endif
	mov eax,ebx
	ret
CallSupplySingle	endp

CallSupplyNetwork	proc uses ebx,lpName:DWORD,lpPass:DWORD,lpCrdName:DWORD,lpCrdPass:DWORD,lpType:DWORD,lpNum:DWORD
	LOCAL TmpBuff[400]:BYTE
	LOCAL PassBuff[20]:BYTE
	LOCAL CrdBuff[20]:BYTE
	LOCAL TimeBuff[20]:BYTE
	LOCAL CarBuff[50]:BYTE
	LOCAL hTime1:SYSTEMTIME
	LOCAL hTime2:SYSTEMTIME
	LOCAL hNum:DWORD
	or ebx,-1
	invoke lstrlen,lpName
	.if eax < 50
		invoke wsprintf,addr CrdBuff,STEXT('%lu'),lpCrdPass
		invoke wsprintf,addr TmpBuff,STEXT("SELECT COUNT(*) FROM T_Car WHERE (CarID='%s')AND(CarPassword='%s')AND(CarState IS NULL)"),lpCrdName,addr CrdBuff
		invoke ShellSqlQueryUser,addr TmpBuff
		.if eax == 1								; 判断卡号是否存在
			invoke wsprintf,addr TmpBuff,STEXT("SELECT LastTime,Cumulate,Source FROM T_Net WHERE (Name='%s')"),lpName
			invoke ShellSqlQueryTime,addr TmpBuff,addr hTime1,addr hNum,addr CarBuff
			.if eax != -1							; 判断用户名是否存在
				.if lpType == 1						; 新建用户
					.if eax == 1
						invoke wsprintf,addr PassBuff,STEXT('%lu'),lpPass
						invoke GetLocalTime,addr hTime2
						invoke TimeToStr,addr hTime2,addr TimeBuff
						.if lpNum == 1000
							invoke wsprintf,addr TmpBuff,STEXT("INSERT INTO T_Net (Name,Password,Number,IpAddr,LastTime,PrevTime,Source,Totalize) VALUES ('%s','%s',%d,'127.0.0.1','%s','%s','%s',%d)"),lpName,addr PassBuff,lpNum,addr TimeBuff,addr TimeBuff,lpCrdName,lpNum
						.else
							invoke wsprintf,addr TmpBuff,STEXT("INSERT INTO T_Net (Name,Password,Number,IpAddr,LastTime,PrevTime,Source,Cumulate,Totalize) VALUES ('%s','%s',%d,'127.0.0.1','%s','%s','%s',%d,%d)"),lpName,addr PassBuff,lpNum,addr TimeBuff,addr TimeBuff,lpCrdName,lpNum,lpNum
						.endif
						invoke ShellSqlExecCommand,addr TmpBuff
						.if eax == 0
							invoke wsprintf,addr TmpBuff,STEXT("DELETE FROM T_Car WHERE (CarID='%s')"),lpCrdName
							invoke ShellSqlExecCommand,addr TmpBuff
							mov ebx,lpNum
						.endif
					.else
						mov ebx,-2
					.endif
				.else								; 已存在的用户
					.if eax == 0
						invoke CallIsValidateCrd,addr CarBuff,lpCrdName
						.if eax == 0
							invoke wsprintf,addr PassBuff,STEXT('%lu'),lpPass
							invoke GetLocalTime,addr hTime2
							invoke TimeToStr,addr hTime2,addr TimeBuff
							invoke CallCmpTimeSize,addr hTime2,addr hTime1,3
							.if eax == 0
								.if hNum == 0
									.if lpNum == 1000
										invoke wsprintf,addr TmpBuff,STEXT("UPDATE T_Net SET Number=Number+%d,LastTime='%s',PrevTime=LastTime,Source='%s',Totalize=Totalize+%d,Cumulate=0 WHERE ((Name='%s')AND(Password='%s')AND(State=0 OR State IS NULL))"),lpNum,addr TimeBuff,lpCrdName,lpNum,lpName,addr PassBuff
									.else
										invoke wsprintf,addr TmpBuff,STEXT("UPDATE T_Net SET Number=Number+%d,LastTime='%s',PrevTime=LastTime,Source='%s',Totalize=Totalize+%d,Cumulate=%d WHERE ((Name='%s')AND(Password='%s')AND(State=0 OR State IS NULL))"),lpNum,addr TimeBuff,lpCrdName,lpNum,lpNum,lpName,addr PassBuff
									.endif
								.else
									.if lpNum == 1000
										invoke wsprintf,addr TmpBuff,STEXT("UPDATE T_Net SET Number=Number+%d,LastTime='%s',PrevTime=LastTime,Source='%s',Totalize=Totalize+%d,Cumulate=0 WHERE ((Name='%s')AND(Password='%s')AND(State=0 OR State IS NULL))"),lpNum,addr TimeBuff,lpCrdName,lpNum,lpName,addr PassBuff
									.else
										invoke StrCmpNI,addr CarBuff,lpCrdName,2
										.if eax == 0
											invoke wsprintf,addr TmpBuff,STEXT("UPDATE T_Net SET Number=Number+Cumulate+%d,LastTime='%s',PrevTime=LastTime,Source='%s',Totalize=Totalize+Cumulate+%d,Cumulate=0 WHERE ((Name='%s')AND(Password='%s')AND(State=0 OR State IS NULL))"),lpNum,addr TimeBuff,lpCrdName,lpNum,lpName,addr PassBuff
										.else
											invoke wsprintf,addr TmpBuff,STEXT("UPDATE T_Net SET Number=Number+2000+%d,LastTime='%s',PrevTime=LastTime,Source='%s',Totalize=Totalize+2000+%d,Cumulate=0 WHERE ((Name='%s')AND(Password='%s')AND(State=0 OR State IS NULL))"),lpNum,addr TimeBuff,lpCrdName,lpNum,lpName,addr PassBuff
										.endif
									.endif
								.endif
							.else
								.if lpNum == 1000
									invoke wsprintf,addr TmpBuff,STEXT("UPDATE T_Net SET Number=Number+%d,LastTime='%s',PrevTime=LastTime,Source='%s',Totalize=Totalize+%d,Cumulate=0 WHERE ((Name='%s')AND(Password='%s')AND(State=0 OR State IS NULL))"),lpNum,addr TimeBuff,lpCrdName,lpNum,lpName,addr PassBuff
								.else
									invoke wsprintf,addr TmpBuff,STEXT("UPDATE T_Net SET Number=Number+%d,LastTime='%s',PrevTime=LastTime,Source='%s',Totalize=Totalize+%d,Cumulate=%d WHERE ((Name='%s')AND(Password='%s')AND(State=0 OR State IS NULL))"),lpNum,addr TimeBuff,lpCrdName,lpNum,lpNum,lpName,addr PassBuff
								.endif
							.endif
							invoke ShellSqlExecCommand,addr TmpBuff
							.if eax == 0
								invoke wsprintf,addr TmpBuff,STEXT("DELETE FROM T_Car WHERE (CarID='%s')"),lpCrdName
								invoke ShellSqlExecCommand,addr TmpBuff
								invoke wsprintf,addr TmpBuff,STEXT("SELECT Number FROM T_Net WHERE(Name='%s')"),lpName
								invoke ShellSqlQueryDword,addr TmpBuff
								mov ebx,eax
							.endif
						.else
							mov ebx,-4
						.endif
					.else
						mov ebx,-3
					.endif
				.endif
			.endif
		.endif
	.endif
	mov eax,ebx
	ret
CallSupplyNetwork	endp

CallSupplyNetToSingle	proc uses ebx,lpNetName:DWORD,lpNetPass:DWORD,lpName:DWORD,lpNum:DWORD,lpType:DWORD
	LOCAL TmpBuff[400]:BYTE
	LOCAL PassBuff[20]:BYTE
	LOCAL NetBuff[20]:BYTE

⌨️ 快捷键说明

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