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

QQ IP显示的关键代码

[复制链接]
发表于 2007-10-12 14:06:56 | 显示全部楼层 |阅读模式
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.
- C) j5 H0 A2 l6 |runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.
' o+ d0 H& Q; [( ^; @, x; m
( K* c5 q! X0 Ostatic const DWORD UnknownSig=0x1E3A86BA;
5 k; y2 u! i0 U' rstatic const LPSTR  szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";
4 Q# t3 g( k. N8 ?' _( mtypedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);6 T0 C* R# b5 o' a
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
6 R/ [8 v: \4 a% K{& h; H/ I/ Z3 l8 _% B
    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);
: _% Y$ b2 ^. ?    PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);& ~3 M' k( t1 U% O
}
; [& n% y- F1 q8 r, _3 C3 d) n' F3 Q, H
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)- z9 ^; M2 F* K
{
% {3 F4 n: x- d# e    DWORD dwRet=0;+ x, o. g  z% X1 u- r* U6 B6 r0 s/ V3 U
    __asm
% M; M8 P4 `7 B, F* I* y    {& J) S# T# s0 o3 v$ Z; s
        lea eax,dwRet: ~9 V1 E8 m1 u5 C
        push eax
, e2 K1 o7 s! n8 p" ^5 a        push szCmd' ^0 G* v% }! E6 h5 R$ P
        mov eax, DynamicData
1 Z$ V# x5 f- K/ d& ^        push eax& L. G5 Z' N1 O) R' H) Z1 [, J; p8 c
        mov ecx,[eax]0 C) v: m% X0 Q  J2 K) k% l
        mov eax,ecx8 T1 n$ B' \. ^! f# n& a" o& Z% `
        add eax,iOffset& j8 k3 h7 W, z8 X% r) v" x
        call [eax]3 c: E$ E" e$ M4 @& x; u9 m
    }
/ G" U+ k1 K1 \( v! g' l& D    return dwRet;0 d- T" L) R7 S# p; C
}
1 H3 H3 g, g) ^+ d5 N$ J9 b3 I& X  |  k1 h8 l4 ^( `
static const LPSTR  szdwRecentIP="dwRecentIP";
3 b4 o& N% ^  S' X# A: Rstatic const LPSTR  szdwIP="dwIP";
7 L5 u7 A2 d1 S+ U" Y5 V( F! Ystatic const LPSTR  szdwC2CIP="dwC2CIP";8 }$ R- E! \! }" N
DWORD GetIP(DWORD Uin)
1 D' j; |% \8 B& V0 W{
: c/ ]/ t2 `0 e: T* b0 x    DWORD dwRet=0;
) d, C- @  e; }' h6 ~, m    LPVOID IQQData=NULL;
* O* D1 o9 h7 N) D) y    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;4 j  ^+ A( J) f+ C
    LPVOID DynamicData=NULL;
. h; o9 _% E! C' I' ^9 j    PrepareData(IQQData,&DynamicData);
9 M! |! Q6 A6 h% t0 N/ f    if (NULL==DynamicData) return dwRet;" s9 e& j- X4 D! k3 J& Z' W+ t2 E
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
: ?/ K8 e9 b) j2 d9 k$ U1 p    if (dwRet) return dwRet;) Z+ S2 A; I8 I# C4 I6 Y8 }
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);) l/ j! k$ y6 \7 n8 C6 j# S8 X! f0 h5 L
    if (dwRet) return dwRet;1 E* H# p8 o$ G( v
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);% j# t5 g) V" J$ A8 j
    return dwRet;
% b% V* t7 ~* h; t$ j, r' Z}4 m  ^! [0 ~  ]: ]" G' `
3 R( A+ B7 N* D1 J
static const LPSTR  szwRecentPort="wRecentPort";
+ j% |7 K% Z( n2 G. Ystatic const LPSTR  szwPort= "wPort";
( C* ~: x/ }2 {  r5 K. w- W6 z  pstatic const LPSTR  szwC2CPort= "wC2CPort";% v2 X9 q; {$ l
DWORD GetPort(DWORD Uin)4 P% i: T. u( |
{8 s# W) f2 O6 l# y+ v5 ]
    DWORD dwRet=0;
5 |; }0 r$ z- J7 t2 P3 w    LPVOID IQQData=NULL;
. b! {+ }, G0 \, o    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;* f3 P. h1 L: e
    LPVOID DynamicData=NULL;6 [8 M. \! @1 `, o, z  t) J
    PrepareData(IQQData,&DynamicData);
; A& h6 k$ F& Z7 a9 z4 U, I/ v    if (NULL==DynamicData) return dwRet;
& t- z( A# j8 M  P1 F% d+ I    dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14. v5 f9 b( }! \& S* q/ p) K& s
    if (dwRet) return dwRet;
. |0 w2 f* A  c. b& m: L; Z    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);
7 y* x- K  N9 ^    if (dwRet) return dwRet;
6 g* o. I. j2 a$ f9 H" a    dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);
% Z9 ]" i0 d/ O& y0 F, E    return dwRet;9 t, x9 M+ L2 H9 Q
}) T9 w% R8 V3 N+ T
) m7 s5 b$ y, N6 C
static const LPSTR  szwProcotol = "wProcotol";
5 |! A" R) z0 bDWORD GetVer(DWORD Uin)4 m$ p3 _' G) L) t4 _; ^+ x9 v
{; A" R5 k7 c" d- q1 A1 H
    DWORD dwRet=0;. K* ~9 q4 N5 R0 Y/ j- h& y" G0 Q9 t7 e
    LPVOID IQQData=NULL;/ F- h9 ~+ T! {( j' v/ s
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
! X5 S; W! [" Q    LPVOID DynamicData=NULL;  \  S* P3 E; x* Z6 h; T
    PrepareData(IQQData,&DynamicData);/ _  I) C8 ^% Z8 O8 ?
    if (NULL==DynamicData) return dwRet;
- {% F2 z& D) _% }6 V0 k1 @- R    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);. g, [  W0 j6 x' n# e
    return dwRet;0 M/ ~; ]# l5 Q+ h: k6 Z) w
}9 a; T) \7 [( P, V) X

& _" i7 z: s/ n& q$ y( y原文出处:http://www.ye-soft.net/article.asp?id=43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-12-13 10:10 , Processed in 0.016758 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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