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

QQ IP显示的关键代码

[复制链接]
发表于 2007-10-12 14:06:56 | 显示全部楼层 |阅读模式
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.0 u/ |) c5 r0 c: `5 ~' I! C" i
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.% M; s4 X8 G4 s
' r) Y" D( |6 E
static const DWORD UnknownSig=0x1E3A86BA;7 N; g6 `8 ~  K$ [1 k
static const LPSTR  szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";6 J; z4 O) @: B3 d6 C
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);+ q5 M! T7 e0 b8 B; {* x% Y
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
: a8 s7 t3 w' U% u5 C9 T4 r{( ]) C, ]( L5 y+ r
    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);
8 Y' t* V6 O! W, ~" |5 \    PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);
& Q4 O$ C# d) L) V: F8 W3 s' t}
: B& b( _8 M+ p2 W! `& @# @1 \0 A$ g$ i6 e! w
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)' V/ w9 B$ ~2 x+ x3 p
{% I3 {3 L: N( o5 i& r' Y' G
    DWORD dwRet=0;& |# S: E3 i6 C; G  B9 m% @
    __asm
1 t" L- {7 Y, F; G    {1 {  W1 [; R: W6 I) M
        lea eax,dwRet; |3 ^3 C, x7 `7 p
        push eax7 @5 P- U% P) l2 D) F
        push szCmd/ Y; x/ N! P7 I& M: c+ \8 q: A$ s
        mov eax, DynamicData: N5 n7 ^' W( f! ~
        push eax: D( k, N% ~" R/ W5 o$ D) I" K( V
        mov ecx,[eax]
% p7 G" Z+ K' r" x" U        mov eax,ecx
$ ]0 d4 \; m# [2 T1 N/ U        add eax,iOffset
& |* B/ }, f. N5 z  L1 _        call [eax]
( _: i; z. Q# j5 }, M    }: Q. _: T3 Z+ |$ `/ m* k# k5 l
    return dwRet;' Z5 ]+ V9 X( {' u( q
}
9 T  B6 W  d+ z& b0 K6 [  a/ b6 E
8 G0 A, i9 Q  v: }, q2 [+ g# i% e" kstatic const LPSTR  szdwRecentIP="dwRecentIP";# s9 D( A6 \6 ^: F1 Y) z
static const LPSTR  szdwIP="dwIP";- S6 s" Y; @6 b# |' D. t1 Y
static const LPSTR  szdwC2CIP="dwC2CIP";: q" R" i! _6 t/ Z
DWORD GetIP(DWORD Uin)
5 r0 X& E# [8 U0 a2 p{% F' S! @1 w# l! H
    DWORD dwRet=0;
1 }5 b& @0 e: }    LPVOID IQQData=NULL;# I, F7 k* [2 S+ Z# J
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
- ?6 L4 M& ?2 B1 ]) ~    LPVOID DynamicData=NULL;4 `2 s6 J. O% X5 @; B. g: e3 s
    PrepareData(IQQData,&DynamicData);6 a: [# e6 R/ L3 z
    if (NULL==DynamicData) return dwRet;4 B. ]* E9 E0 m
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
; d4 D2 f" V2 U0 K( ?    if (dwRet) return dwRet;$ C0 q/ P4 M1 P- w7 j! D, i
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);% j6 f2 u2 V& }2 j* S
    if (dwRet) return dwRet;; L8 y7 d" L' B: c% F* b: u
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);: v4 V: |7 ], ]6 o
    return dwRet;9 ^$ N) ~& I# E1 D' U
}
6 |- }( }5 i1 m5 g6 e1 g# B1 r7 j0 ]1 R# g- D3 T; N/ Q: h
static const LPSTR  szwRecentPort="wRecentPort";5 Q6 Z# Y' @) \6 L' h: l' D' ^% {
static const LPSTR  szwPort= "wPort";
  J  @, z/ j3 B9 @- Cstatic const LPSTR  szwC2CPort= "wC2CPort";& N3 a6 U7 D) t: }  b% k
DWORD GetPort(DWORD Uin)+ @) W6 _9 h; @0 {9 q) z, B1 Q' |6 C
{
8 z; m6 b) u( I$ ]2 R+ P$ u2 y    DWORD dwRet=0;7 K4 i; A) |* D6 K
    LPVOID IQQData=NULL;
& k) A3 O- g9 M1 O! a  w2 Y! j* ~    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;2 {6 I0 w8 t& t; n/ d& {$ [  Q
    LPVOID DynamicData=NULL;
1 J# i( \' d: M" W. w5 o    PrepareData(IQQData,&DynamicData);8 g& @$ f  }0 ~- v9 x( |; B
    if (NULL==DynamicData) return dwRet;5 b" W: `7 o8 l# L. _- i3 j
    dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14
* c% k9 f' i: e/ ^7 w    if (dwRet) return dwRet;( {% M0 H+ e6 t$ [$ y4 R9 p2 u! _/ N
    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);
7 s5 [" v$ u# [' U6 \    if (dwRet) return dwRet;
( j& x- R! d* W    dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);
8 @/ \6 d% {2 v% i. c! O    return dwRet;7 M/ U7 Q9 E8 ]$ V
}
3 k, T+ e  t# e6 {1 e5 x
1 u* t* w$ k0 lstatic const LPSTR  szwProcotol = "wProcotol";, s* U. l; _8 ]# E  B/ L
DWORD GetVer(DWORD Uin); s. v) U8 E! F% A0 B* n6 R
{) r6 R: E  O4 _3 l) W2 i9 H: O
    DWORD dwRet=0;3 _- n: Z! b+ s$ h0 K) Z% y) u
    LPVOID IQQData=NULL;' W' L' i( U  }9 Y: V
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;+ `. }% W) ?, m' Y; G% O: `
    LPVOID DynamicData=NULL;2 B. V& D. H/ I' g3 u( s8 O
    PrepareData(IQQData,&DynamicData);
! S& h, J7 ~. u; F( W; {' M  r1 q    if (NULL==DynamicData) return dwRet;
5 L4 o8 o8 k/ B9 d3 t, e' q    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
  f) p5 P$ q0 w9 G    return dwRet;
# x& ~: m+ d! ]/ y, S}
" l+ m7 |* P, L$ J. p& _5 |5 h- f! Z3 L( H$ u7 @( ^4 C) I. n
原文出处:http://www.ye-soft.net/article.asp?id=43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-15 01:51 , Processed in 0.018038 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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