www.pudn.com > QQline.rar > QQOnlineLog.asm


.386 
.Model Flat,StdCall 
Option CaseMap:None 
 
Include \Masm32\Include\Windows.inc 
Include \Masm32\Include\Kernel32.inc 
Include \Masm32\Include\User32.inc 
Include \Masm32\Include\WSock32.inc 
 
IncludeLib \Masm32\Lib\Kernel32.Lib 
IncludeLib \Masm32\Lib\User32.Lib 
IncludeLib \Masm32\Lib\WSock32.Lib 
 
.Data 
szServer	db "wpa.qq.com",0 
szTarget	db "27770163",0 
SendBufFmt	db "GET /pa?p=1:%s:5 HTTP/1.1",13,10 
		db "Accept: */*",13,10 
		db "Connection: close",13,10 
		db "Cookie: pvid=305035858",13,10,13,10,0 
szFmt		db "%d年%02d月%02d日 %02d:%02d:%02d  %s",13,10,0 
szOnline	db "在线",0 
szOffline	db "不在线或隐身",0 
txtfile		db ".txt",0 
szCopyRight	db "=====================================",13,10 
		db "| QQ上线状态记录助手 日志文件版     |",13,10 
		db "|  版权所有 CopyRight 2005 By 小㊣  |",13,10 
		db "+===================================+",13,10 
		db "|  ◆目标号码: %s	    |",13,10 
		db "|  ◆日志文件: %s	    |",13,10 
		db "=====================================",13,10,0 
 
.Data? 
wsa		WSADATA <> 
sin		sockaddr_in <> 
szBuffer	db 4096 dup(?) 
szLogFile	db 16 dup(?) 
dwYear		dd ? 
dwMonth		dd ? 
dwDay		dd ? 
dwHour		dd ? 
dwMinute	dd ? 
dwSecond	dd ? 
hFile		dd ? 
dwWritten	dd ? 
 
.Code 
GetInfo		Proc 
	Local	hSocket:DWORD 
 
@@:	invoke	socket,AF_INET,SOCK_STREAM,0 
	mov	hSocket,eax 
	invoke	connect,hSocket,addr sin,sizeof sin 
	invoke	wsprintf,addr szBuffer,addr SendBufFmt,addr szTarget 
	invoke	lstrlen,addr szBuffer 
	invoke	send,hSocket,addr szBuffer,eax,0 
	invoke	RtlZeroMemory,addr szBuffer,4096 
	invoke	recv,hSocket,addr szBuffer,4096,0 
	invoke	closesocket,hSocket 
	invoke	lstrlen,addr szBuffer 
	cmp	eax,0 
	jz	@b 
	ret 
GetInfo		EndP 
 
IsOnline	Proc 
	Local	@dwReturn:DWORD 
 
	pushad 
	mov	@dwReturn,0 
	invoke	lstrlen,addr szBuffer 
	sub	eax,4 
	mov	ebx,eax 
	lea	esi,szBuffer 
	xor	ecx,ecx 
	.While	ecx != ebx 
		inc	ecx 
		mov	eax,[esi+ecx] 
		.if	eax == 'niln' 
			mov	@dwReturn,1 
		.endif 
	.EndW 
	popad 
	mov	eax,@dwReturn 
	ret 
IsOnline	EndP 
 
GetCurrentTime	Proc 
	Local	@stTime:SYSTEMTIME 
 
	invoke	RtlZeroMemory,addr @stTime,sizeof SYSTEMTIME 
	invoke	GetLocalTime,addr @stTime 
	xor	eax,eax 
	mov	ax,@stTime.wYear 
	mov	dwYear,eax 
	mov	ax,@stTime.wMonth 
	mov	dwMonth,eax 
	mov	ax,@stTime.wDay 
	mov	dwDay,eax 
	mov	ax,@stTime.wHour 
	mov	dwHour,eax 
	mov	ax,@stTime.wMinute 
	mov	dwMinute,eax 
	mov	ax,@stTime.wSecond 
	mov	dwSecond,eax 
	ret 
GetCurrentTime	EndP 
 
WriteOnline	Proc 
	invoke	GetCurrentTime 
	invoke	wsprintf,addr szBuffer,addr szFmt,dwYear,dwMonth,dwDay,\ 
		dwHour,dwMinute,dwSecond,addr szOnline 
	invoke	SetFilePointer,hFile,0,0,FILE_END 
	invoke	lstrlen,addr szBuffer 
	invoke	WriteFile,hFile,addr szBuffer,eax,addr dwWritten,0 
	ret 
WriteOnline	EndP 
 
WriteOffline	Proc 
	invoke	GetCurrentTime 
	invoke	wsprintf,addr szBuffer,addr szFmt,dwYear,dwMonth,dwDay,\ 
		dwHour,dwMinute,dwSecond,addr szOffline 
	invoke	SetFilePointer,hFile,0,0,FILE_END 
	invoke	lstrlen,addr szBuffer 
	invoke	WriteFile,hFile,addr szBuffer,eax,addr dwWritten,0 
	ret 
WriteOffline	EndP 
 
Start: 
	invoke	WSAStartup,0101h,addr wsa 
	mov	sin.sin_family,AF_INET 
	invoke	htons,80 
	mov	sin.sin_port,ax 
	invoke	gethostbyname,addr szServer 
	mov	eax,[eax+12] 
	mov	eax,[eax] 
	mov	eax,[eax] 
	mov	sin.sin_addr,eax 
 
	invoke	lstrcpy,addr szLogFile,addr szTarget 
	invoke	lstrcat,addr szLogFile,addr txtfile 
	invoke	wsprintf,addr szBuffer,addr szCopyRight,addr szTarget,addr szLogFile 
	invoke	CreateFile,addr szLogFile,GENERIC_WRITE or GENERIC_READ,\ 
		FILE_SHARE_WRITE or FILE_SHARE_READ,0,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,0 
	mov	hFile,eax 
	invoke	SetFilePointer,hFile,0,0,FILE_END 
	invoke	lstrlen,addr szBuffer 
	invoke	WriteFile,hFile,addr szBuffer,eax,addr dwWritten,0 
 
@@:	invoke	GetInfo 
	invoke	IsOnline 
	.if	eax == 1 
		invoke	WriteOnline 
	.else 
		invoke	WriteOffline 
	.endif 
	invoke	Sleep,59000 
	jmp	@b 
	invoke	CloseHandle,hFile 
	invoke	WSACleanup 
	invoke	ExitProcess,0 
End Start