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

QQ IP显示的关键代码

[复制链接]
发表于 2007-10-12 14:06:56 | 显示全部楼层 |阅读模式
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.8 l( z" S) I" R
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.
: z6 w8 f6 [: Z0 b- e& k0 {6 ~1 I6 v  |& d( _. ]" z' V4 m
static const DWORD UnknownSig=0x1E3A86BA;& d- [9 d1 q# a/ p* h8 w: E& c9 W/ O
static const LPSTR  szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";! Z- e( t, {# z& r' z
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);4 b" V! @2 m8 g  H2 f) b
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
  W$ x) V' W4 H7 l; i5 f{5 g) J  l5 q6 B" t1 A$ E
    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);" @% |( D) d' x; m  I0 F% ]
    PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);
/ A3 C6 |# M: W8 [}
, A: S& K5 f& Y- `  ~0 }
  \' K& Q% c. G# W* K' n. \DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)
' X. ]0 T6 }6 D+ Z5 `{
( p, ~2 ?  b6 ?# K9 m4 T    DWORD dwRet=0;
! c& ~; Q! W/ j1 A9 |2 G    __asm( ^8 Q+ ^8 O4 k7 U
    {
9 L' W3 B7 f2 v        lea eax,dwRet( e. |, [* a3 p. J1 e. e, k9 \
        push eax* T* i/ T& A6 K" F8 }
        push szCmd" t/ @# x6 G4 x# n/ e+ A7 f
        mov eax, DynamicData
8 `- X# ?; {8 r) u% I        push eax
, K( _! M& P) }9 w        mov ecx,[eax]
2 H+ U3 v1 ^* t% l: i1 D7 f        mov eax,ecx
+ o0 t3 M# e/ s9 c& q- K( z  i        add eax,iOffset% u9 h& j$ n$ Q; Y1 r
        call [eax]
% h/ L7 Z7 j- A3 W( k- l: \) ~    }
2 {* ~4 b" S* o0 U: L7 b6 d8 H9 @    return dwRet;
' t- ]3 h$ z- c}4 i0 q) j4 m3 \" a' x

6 c6 f* q' D  a' b8 H$ J% hstatic const LPSTR  szdwRecentIP="dwRecentIP";7 H$ J7 ^# U; @: D" D( V
static const LPSTR  szdwIP="dwIP";1 j; o; D% U8 m. O' N
static const LPSTR  szdwC2CIP="dwC2CIP";
$ m) o9 W: X% f; b) ]# o  s! w% fDWORD GetIP(DWORD Uin)
# p5 r" W. s5 Y( ?{4 @* @/ [$ H9 m  l5 h0 e
    DWORD dwRet=0;1 t" t  C0 E# ]4 v0 ^! U
    LPVOID IQQData=NULL;; y8 ?1 g# a0 A! D: B$ a
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;; H, }. w- D6 h% ~
    LPVOID DynamicData=NULL;, B2 E' g4 L! _9 ~) _
    PrepareData(IQQData,&DynamicData);
* U9 F) c9 x* |1 G' @1 A6 T- j    if (NULL==DynamicData) return dwRet;4 P6 t# V% z" w4 U( I$ {% `
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18& Q! Z0 w' k- l0 G3 [
    if (dwRet) return dwRet;
" ?9 Z! x! W" X+ Z5 a2 l: a    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
+ o5 S) }' n  G  l6 W    if (dwRet) return dwRet;' g+ X4 ~1 g; n3 l; T2 \
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);
5 M3 O- ]" a. [/ A" X    return dwRet;5 W! O  W9 M, l! S
}* R+ Y1 u5 t+ ]- t& O( X+ M3 w. |
6 q! c% d6 e6 z4 Z
static const LPSTR  szwRecentPort="wRecentPort";
; H1 h6 m& \; Hstatic const LPSTR  szwPort= "wPort";( u4 `4 P& W; e  F  l
static const LPSTR  szwC2CPort= "wC2CPort";8 e7 y1 I5 q9 k# T0 {' i- ~
DWORD GetPort(DWORD Uin)! p" P8 t7 e5 B, v
{; [, Z9 A+ f, o0 |6 V
    DWORD dwRet=0;% |+ S1 }' t$ e. y7 p! q$ E
    LPVOID IQQData=NULL;
% K( M! y; e( I5 p    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;' i. z4 ]1 h+ |. n- H
    LPVOID DynamicData=NULL;
' v& ]1 `# v1 j. S    PrepareData(IQQData,&DynamicData);( o3 u; ^/ l( v9 _5 }/ Q
    if (NULL==DynamicData) return dwRet;
7 i/ ?7 \& A3 Q" z; W2 b% L    dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14- _" z( G6 T; S, K: Q
    if (dwRet) return dwRet;
5 }" O6 \% a+ l' ]    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);
, i# }5 r7 R. ~' v" C( C+ D$ a    if (dwRet) return dwRet;
" h( {8 a) [0 t& P5 K' O$ g    dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);
. S3 {. P$ b7 D    return dwRet;: o2 I% o% E9 B: m
}) E9 S; D8 J( @$ y+ `# }8 r- W0 |3 A
, \  T9 ^5 @9 i# Y4 z' V* C, V' V
static const LPSTR  szwProcotol = "wProcotol";
# {' k4 [2 ?( {8 i% ]; b% [% JDWORD GetVer(DWORD Uin)0 r& @! U% }' N
{3 a( V4 p  L8 `2 ?& ~
    DWORD dwRet=0;" ^' r3 x0 [4 h7 {  }
    LPVOID IQQData=NULL;
/ h: `/ W* V1 K    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;% @& V8 D$ G7 R: C
    LPVOID DynamicData=NULL;
3 E/ c5 X2 |+ _7 C# L( }    PrepareData(IQQData,&DynamicData);. O% u+ C/ z: e& T
    if (NULL==DynamicData) return dwRet;
# f  X3 i) k# _" \' Z4 w5 b! H    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
' ]: p5 Z* z& ]4 N    return dwRet;
: v  r7 `* ~# h/ n/ {. _}# l2 S/ i+ [) W6 R8 n: J7 M
$ r' B# k( N4 [
原文出处:http://www.ye-soft.net/article.asp?id=43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-14 20:03 , Processed in 0.018471 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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