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

QQ IP显示的关键代码

[复制链接]
发表于 2007-10-12 14:06:56 | 显示全部楼层 |阅读模式
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.: S& T4 N* |% p$ e
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.- U, ?/ L: K" ?( [. V/ j" x" y
! g1 D/ l1 d* [1 p, e: v( v  v
static const DWORD UnknownSig=0x1E3A86BA;' ~5 s6 g# Y) [& T4 H: t
static const LPSTR  szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";
  ?% E8 \$ `7 e% k, [- C0 X1 M* g$ h0 h* ytypedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);8 p7 S( z0 T) X+ W. l
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)# o, O" h* y+ _& I( K
{: S* A7 N( |! v
    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);/ I6 e5 n6 c$ F
    PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);' u2 x$ J8 ]4 _# J, R7 `4 R
}7 s' u$ x( ~, y5 X# ^
; C1 T) c6 c! X& {7 E3 A
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd); I$ Q7 d1 l" x5 Z. p
{9 ~) F4 r, n: x3 [
    DWORD dwRet=0;5 J0 j; e* c! Q
    __asm. F. `4 ~" v4 H9 j  b! v) e
    {
: p2 A1 d% \6 X, w& c7 o        lea eax,dwRet' b0 R7 B2 P! N" M$ c
        push eax! D7 r7 K) g" y/ n0 P1 e: `. v( @% r, S0 E
        push szCmd
' N! o2 F( n# R# q8 ]        mov eax, DynamicData
. a. N7 M3 d3 B/ B        push eax8 Y# q* j+ j& T% _9 m+ V0 _
        mov ecx,[eax]
4 Z$ h" o* j' U        mov eax,ecx
. Q. K% P/ Y& O3 v( C9 H% B5 n        add eax,iOffset, `  b$ [  k: c# Y& ?; Z2 O; t% x
        call [eax]
; X3 x: r4 ^7 L    }7 E3 _" A5 m+ J9 g3 o
    return dwRet;
3 p" p& f; m7 y}
1 Q4 v; W: c6 E+ f1 r7 U/ l% G0 f+ }  Y) O$ f7 F' R+ l
static const LPSTR  szdwRecentIP="dwRecentIP";
7 n+ j2 j& N) Z, Tstatic const LPSTR  szdwIP="dwIP";
: [& L/ |- ^& U# pstatic const LPSTR  szdwC2CIP="dwC2CIP";& z0 B, }. A  p0 X9 v: [8 e1 @
DWORD GetIP(DWORD Uin)( H. n3 ]/ y( S2 j+ W8 V$ s
{
2 p! d4 k) y( ~- j: X$ C9 a2 c% A; B    DWORD dwRet=0;
1 n+ g/ O3 s: [9 f! C3 Z    LPVOID IQQData=NULL;$ Y/ j2 R/ }( w
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;3 `( I, r# R  H
    LPVOID DynamicData=NULL;4 I) U. B) n8 n- B* i9 N" c
    PrepareData(IQQData,&DynamicData);
; v/ b1 H& L  _5 w% @    if (NULL==DynamicData) return dwRet;% D: g( w& B0 g% d8 `% _- ]
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18, q; G# @% V# d( g% R, ?
    if (dwRet) return dwRet;" ^" x9 s5 h+ e* g8 V
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
. e5 j0 l3 d+ D# S8 z    if (dwRet) return dwRet;
, w1 _0 D3 v0 r, A    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);. U- @. H( \7 J0 k/ Q
    return dwRet;
' b, }9 b9 B" H+ W3 r. V}6 X, w: O; t8 H. D
, L. N2 H7 @6 A  W* j, l8 L# Q
static const LPSTR  szwRecentPort="wRecentPort";
, G& v8 D* K5 R: _' f% |static const LPSTR  szwPort= "wPort";
3 H( v  Z+ Q# L6 c9 Mstatic const LPSTR  szwC2CPort= "wC2CPort";5 L2 P4 P7 b, I* {
DWORD GetPort(DWORD Uin)
: O! \1 G8 d* U" [8 v; l0 I{
" ?$ b$ J+ J! z* C( T0 j# y    DWORD dwRet=0;
1 O+ g. p, s& l; U    LPVOID IQQData=NULL;5 o( B% m* j# V
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
% j9 V9 }; X, I# s% ]1 O( F  c/ s4 f    LPVOID DynamicData=NULL;/ j3 [* \1 `# m
    PrepareData(IQQData,&DynamicData);
8 d6 E' E9 S7 E: j# p8 Y( C    if (NULL==DynamicData) return dwRet;: p+ P, ~8 U0 w6 e4 D4 D9 c( ?
    dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14
9 N6 I% y1 m3 T* g, L    if (dwRet) return dwRet;1 _* j, a0 W# E, I1 a
    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);0 n- n3 h8 h6 c& s: a
    if (dwRet) return dwRet;& f( d# c1 Q% J; x
    dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);: C- [7 g, \& Y6 y9 Q& `5 C
    return dwRet;! |0 N9 p9 ?3 ?6 [3 ^$ p
}
  M7 _, @2 p- s4 ]1 Z
% C1 B( H) v- S. I: [static const LPSTR  szwProcotol = "wProcotol";& M8 `" I  i$ Z4 q
DWORD GetVer(DWORD Uin)
- q, y  u$ j; l2 R& |/ R2 f{; j1 `& d* w- V3 l0 X
    DWORD dwRet=0;
0 w& I( _* y, g& X" }. m1 g    LPVOID IQQData=NULL;# u, n0 e- ]3 ^: T
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;) j0 Y+ {# ]; X/ A3 A- `
    LPVOID DynamicData=NULL;, I; e3 D9 K: A- }" Z6 W: ]
    PrepareData(IQQData,&DynamicData);
9 }5 S# y" h$ T6 m8 L6 Q7 W    if (NULL==DynamicData) return dwRet;
8 h8 r% V/ m, B3 f  p; B    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
' P% o* {8 }6 h% n3 s( ~: n    return dwRet;4 D0 _8 T: |& }
}4 i4 `) O! t1 ]1 {# K6 z
+ b. Q  v# N7 D5 n3 O, g4 E1 M" t
原文出处:http://www.ye-soft.net/article.asp?id=43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-1 22:52 , Processed in 0.015179 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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