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