找回密码
 注册
查看: 6767|回复: 0

QQ IP显示的关键代码

[复制链接]
发表于 2007-10-12 14:06:56 | 显示全部楼层 |阅读模式
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.
7 i' n. W3 P2 `3 O( g( J5 srunjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.$ i4 p2 u( q& i! A" m( t

& {; X! E' y( d3 tstatic const DWORD UnknownSig=0x1E3A86BA;
7 P! U# m' C: i3 G/ s5 [1 Ustatic const LPSTR  szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";) l4 c& A5 G; R
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);
( j0 {. n: C4 M; R- e2 TVOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)2 d( d, F7 B, i
{0 A1 T) F# C  d4 k8 Z. x
    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);
0 v" G" k9 \) Q/ t  ~+ m( ~    PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);
0 y. a! U  D7 a3 q5 u2 M}! f1 C: f# E9 T

0 l9 ^% x, L. J: |5 Q2 K! v4 HDWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)/ w' X; o6 g* r- h2 y4 t0 x# e
{1 q! C' Z# c: L% G
    DWORD dwRet=0;; e  o& L  }$ p% L" p
    __asm, G: j6 _% P7 e
    {
1 o, V. a. j5 z2 C9 N7 r& V: C; S        lea eax,dwRet9 Q& K% b  X" \3 ^9 f
        push eax7 `# D. ~) q0 [8 Q; t) M% l$ }3 [
        push szCmd
$ u+ n9 J5 v! q& L, R/ I" W        mov eax, DynamicData
% q2 \( g' L" @        push eax
1 ~: S) n* e5 d$ I$ p        mov ecx,[eax]  _6 V! h/ k2 v# L! Y
        mov eax,ecx
' p* {1 p+ Z* e. b        add eax,iOffset
0 e- b  z% N4 j( O2 p! r        call [eax]3 U0 |- G* O+ s
    }
9 M# H( \6 [5 D/ F    return dwRet;
2 b0 t$ f$ U+ A% e6 k}
- r* X" t$ `# c5 w4 V5 N& `9 x: ]' A# k9 S
static const LPSTR  szdwRecentIP="dwRecentIP";
, j6 E6 @& {) [: bstatic const LPSTR  szdwIP="dwIP";
7 z% k' ]  a: d9 G3 j7 R  H, l# W5 ystatic const LPSTR  szdwC2CIP="dwC2CIP";
/ X6 ^, ?, R1 C# x; _; dDWORD GetIP(DWORD Uin); l9 Y6 j3 O. V. p% }# f( o
{
3 H/ t1 V$ {9 }: d    DWORD dwRet=0;
$ J0 Q( z" C: }' e, S8 I6 p4 ?    LPVOID IQQData=NULL;6 z2 i  `' A/ `9 V5 }
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
+ [* |" P  f( ?7 y) i9 n    LPVOID DynamicData=NULL;
' q0 M' `) M5 j9 \% e$ B    PrepareData(IQQData,&DynamicData);% F& L3 t3 @! m3 [
    if (NULL==DynamicData) return dwRet;. E2 V1 h- s3 N0 f
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
! M" c2 A/ L/ O* b% b! C    if (dwRet) return dwRet;' @9 l6 g/ f8 a( t. |4 e
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);( Z# {1 D$ T& \/ g
    if (dwRet) return dwRet;
8 }, ]' X7 z) R+ A    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);
- u: g2 f. {7 Y. i: L1 r    return dwRet;
0 c8 u; O8 R- u* j2 Q}
% V* O0 D  W) ]8 Y& b& x8 s0 Z# _- W4 \  H) l# q" w! B+ A* t$ I' c
static const LPSTR  szwRecentPort="wRecentPort";
  V  ]- P% g# M  D# y' estatic const LPSTR  szwPort= "wPort";
( v  a: |5 ~+ }static const LPSTR  szwC2CPort= "wC2CPort";# [" E1 V! R, q; }
DWORD GetPort(DWORD Uin)+ S! q$ L" x% d# l
{
/ a4 N# k- }6 ?4 B/ E* v4 p    DWORD dwRet=0;  C, o) J4 p2 Q- G
    LPVOID IQQData=NULL;
/ a1 j& E# H* v1 C( J/ V    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;0 h/ O8 @+ O8 @# b  A
    LPVOID DynamicData=NULL;
, [  ^4 m7 q& q" j! I' v( z* M. X7 }    PrepareData(IQQData,&DynamicData);4 J; Q5 H6 y3 I: _7 g; |/ V
    if (NULL==DynamicData) return dwRet;  C) x) g0 |- U7 g' f& Y) Q7 J
    dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14
- C% _6 l( q4 V0 n% j; Q! [3 R    if (dwRet) return dwRet;
" H/ u$ Y2 C! B* B    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);
! g  T3 ?9 n* ?4 J. W    if (dwRet) return dwRet;  B- w9 n% v* q5 d
    dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);; `3 ^! K, U" {" w
    return dwRet;
4 B3 Z" {  `) m1 a( N/ a0 \}4 x5 H- Q$ N* y
& ]" _! f7 T0 G8 e  m. R- U% k8 r
static const LPSTR  szwProcotol = "wProcotol";
. T5 Z4 R' W# C' [9 [$ I5 GDWORD GetVer(DWORD Uin)
4 I8 ^3 \/ S6 C' r9 }  U{3 o! H6 E* w, g7 v8 |$ ^4 O7 }
    DWORD dwRet=0;
5 d6 J4 x( v# Z2 K, S    LPVOID IQQData=NULL;/ {% U1 Z. R3 r: p; \
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
! E. R( [7 t3 b( m( T2 M8 s* J3 h    LPVOID DynamicData=NULL;
  r" r' a4 \5 T) s2 f8 J2 B    PrepareData(IQQData,&DynamicData);
  t4 j% M, t, c; T& A$ b7 ]0 K    if (NULL==DynamicData) return dwRet;
: V) O& r8 c# Q0 J& K    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
! C/ p9 n0 j5 d: y% ^( M    return dwRet;2 O6 p2 k1 p6 T2 ]3 I$ v. B
}
1 y2 y: P; v. J' N5 l$ r5 q3 h5 y8 T6 w  o" \
原文出处:http://www.ye-soft.net/article.asp?id=43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|宁德市腾云网络科技有限公司 ( 闽ICP备2022007940号-5|闽公网安备 35092202000206号 )

GMT+8, 2026-10-2 06:55 , Processed in 0.015921 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表