找回密码
 注册
搜索
查看: 6607|回复: 0

QQ IP显示的关键代码

[复制链接]
发表于 2007-10-12 14:06:56 | 显示全部楼层 |阅读模式
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.
( O/ S8 z; d2 q* zrunjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.0 L: S# t- h2 R! V% ^) L0 w
6 t! H4 h9 y) @6 c0 S
static const DWORD UnknownSig=0x1E3A86BA;
. q2 W9 m# ^' S$ u- ?$ I2 \static const LPSTR  szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";  Y: ^. r8 k0 D
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);+ _( f9 ^1 z  D( A: G
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
* d& v4 y3 v$ Q{
$ n) _+ k" A! N0 [5 ]; J  {1 u& E; g    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);' P  J* u+ x( L! g: ^
    PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);8 T2 V# S' u2 k: ]" }
}
" F8 h7 n4 V7 r0 `7 y' n/ K+ i
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd), U) y  G9 V' C/ w
{) t* I( d' g: \' F. ^5 J- V& L
    DWORD dwRet=0;5 ~+ Z( r& s9 s- ~, p  |
    __asm/ @$ j# `8 s- t0 `- k- a) \$ P! U
    {( c1 X1 a. T/ H/ s; d( u
        lea eax,dwRet7 [, n) u4 ~8 X& A' q! Y
        push eax; q5 ]* ]; ~! z. E, u# Z+ [7 H2 j
        push szCmd
8 Z$ i; V& D5 S3 U7 T        mov eax, DynamicData
/ m& t- `, }( ^1 G        push eax
# }1 C* Z8 I5 S9 b* X  J        mov ecx,[eax]
6 M) ^3 |5 |* b) o& W* ]        mov eax,ecx8 e3 @& B; I# L+ e7 t
        add eax,iOffset
  b8 p" n) c2 m        call [eax]
! e+ l( ~7 x7 u    }
6 r6 W1 I+ }& |: P6 _% u' r) ^    return dwRet;
7 w% `7 J( l4 _6 P" G$ `! @}5 K9 K# h8 C7 p: ]2 _
: c5 n) D: w/ [0 s
static const LPSTR  szdwRecentIP="dwRecentIP";8 m. ^: p0 J  b, _6 F
static const LPSTR  szdwIP="dwIP";; b: f0 U$ T& X5 |
static const LPSTR  szdwC2CIP="dwC2CIP";
6 e$ r3 J9 K/ X9 K3 G- _; c- eDWORD GetIP(DWORD Uin)4 J) F/ _9 ^8 m
{- s5 E' u, X+ g
    DWORD dwRet=0;' C# B" c: `1 O3 ]. j: }7 ~8 S; k3 j+ x
    LPVOID IQQData=NULL;  j+ A& ]8 d$ Z2 `' M8 U
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;3 H$ n0 \0 v) U, I
    LPVOID DynamicData=NULL;
3 l- ]1 u' o9 B8 b; h! G+ S8 L) F0 v    PrepareData(IQQData,&DynamicData);
7 l5 ?3 F. q: P1 R$ h. e9 ^    if (NULL==DynamicData) return dwRet;# S- Y% @: `" Q( W4 r
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+182 M! u- p( B& r' s1 ^' ^: |( L; S
    if (dwRet) return dwRet;
2 a- D) Z: h2 C% I2 O# B    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
7 p% @0 k0 A( Q    if (dwRet) return dwRet;3 U* z5 N; J, a/ I3 T
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);
' E* g# G% E$ w: d    return dwRet;& W; Y; }  @9 h; v
}
8 [% g# w2 R, g/ x
, p! J5 ~$ z* a1 k7 m, e8 T+ w6 c1 Jstatic const LPSTR  szwRecentPort="wRecentPort";; I) s. Q+ ?/ t' M  R
static const LPSTR  szwPort= "wPort";
( ?, _5 T2 W8 y8 e' Hstatic const LPSTR  szwC2CPort= "wC2CPort";% k/ p! [" r% x6 m7 i
DWORD GetPort(DWORD Uin)
# q6 ?$ J+ w: n{/ r$ _" e0 T1 |- H: M; I* |8 y
    DWORD dwRet=0;
4 N6 }1 H2 W9 d    LPVOID IQQData=NULL;
1 F5 g  K6 z5 n: u, r2 r: d    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
, }: v, \; b7 [% S% c  h  ^    LPVOID DynamicData=NULL;
+ b' m/ w) I5 i$ I0 K8 `6 ^    PrepareData(IQQData,&DynamicData);- J1 D5 b1 t# ~9 f: V3 s; E
    if (NULL==DynamicData) return dwRet;
8 A' v2 W, @- L# w+ b5 I# n/ y% ]3 t    dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14
2 w6 V! ?6 W  I* g% p7 z    if (dwRet) return dwRet;
6 M7 ^5 |& d1 |# \/ C+ x. ?8 P( S    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);
, L% s; @2 h" Z    if (dwRet) return dwRet;
$ l3 W( s; f9 s4 \4 F' t    dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);
, W. F5 Y0 ]5 U. X+ t    return dwRet;
3 `) t$ R% r& ^, e( H}9 {/ a- x7 U' e' T) k/ m6 @
$ N% ^/ K$ K% ]  Q
static const LPSTR  szwProcotol = "wProcotol";
  P; Z  P$ y& P$ l. d* bDWORD GetVer(DWORD Uin)/ Q6 D5 k6 j5 P" p+ E$ U
{6 B: \: {" E5 C; h  x* `4 d4 m
    DWORD dwRet=0;/ M* q( o' @" e
    LPVOID IQQData=NULL;
, k( P7 B$ V! O  z- X    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;% t! O; w* s8 d2 r7 w
    LPVOID DynamicData=NULL;
" F( E' b; Z& x& n    PrepareData(IQQData,&DynamicData);
$ w- }! e; p6 P6 [7 `    if (NULL==DynamicData) return dwRet;+ ?" g" B. {& O$ T* W* x
    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
& w  P# B: ]7 j# M8 n1 j  s    return dwRet;, s8 S- N9 g6 Q9 T
}
: O! i& y: T7 G. y% p7 K0 \, }* N3 u" M
原文出处:http://www.ye-soft.net/article.asp?id=43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-5-2 11:47 , Processed in 0.019539 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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