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

QQ IP显示的关键代码

[复制链接]
发表于 2007-10-12 14:06:56 | 显示全部楼层 |阅读模式
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.' Z7 p# J" R* y: ]: R
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.( |. h! G) I: ?
; c0 e6 [& y% u
static const DWORD UnknownSig=0x1E3A86BA;3 ~4 C3 g* K& J% d" u* \' `
static const LPSTR  szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";
9 K2 q5 ~: Q1 m( v4 r- etypedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);7 x- e% H2 x3 w% I% g
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
+ x0 G4 V4 X! F6 C) y! P. Y: Q{" C- W2 t+ f- ]! \+ r  Y' ?: \
    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);
5 `4 ^. n8 q8 `- e2 k9 F1 C    PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);
- ^) H- ~% v( k" `3 U: v( l}! k# w0 h7 p) g$ O" |
/ x5 @: S( r. o% j! k! F
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)
. j4 Z6 Z2 _/ @; |4 t) ]1 O3 {6 W{5 t$ L& Q' m5 n* ]8 O" x
    DWORD dwRet=0;/ k5 z8 c, L. J. K
    __asm6 a  n7 K( @/ f' _2 J5 w
    {' J, ]5 E4 ~8 d
        lea eax,dwRet2 Q8 ?) v7 p1 z. e
        push eax2 K$ \1 ~3 Z/ e" N4 h2 ~
        push szCmd
! k2 Y) l$ j5 P        mov eax, DynamicData; u% x' P3 U* Q1 a# T
        push eax
% ^- I* E+ d; B' x7 S" `        mov ecx,[eax]
, d. J; g8 b: o  c# o        mov eax,ecx
, a, Y4 E; i0 O- S+ v        add eax,iOffset
( |$ f  s5 g) l1 @        call [eax]
. u5 {  D% z- ^" T    }% t7 u# u. j4 u& e, J2 d
    return dwRet;- A2 [8 n8 z0 A
}
! T7 H8 |6 j( M: e/ ?6 a
% n( T6 ~, y% D. D. Estatic const LPSTR  szdwRecentIP="dwRecentIP";
- _2 x7 \+ P+ u# S, }- ^. N7 Kstatic const LPSTR  szdwIP="dwIP";5 c+ f7 R% }1 ~# |1 d* b: [
static const LPSTR  szdwC2CIP="dwC2CIP";& }8 \5 w) f) w7 E" A( Y) ?/ ?
DWORD GetIP(DWORD Uin)
9 w  F; o2 x6 p) c* W: q) Z{; `9 M) e. ]% r
    DWORD dwRet=0;
& V2 Q( j; ?/ Z. t6 m5 y4 n    LPVOID IQQData=NULL;+ I8 w+ t9 O' E
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
' Z  [  e* ~1 b    LPVOID DynamicData=NULL;
0 A2 ]& j5 F7 p( _" d+ Z! h    PrepareData(IQQData,&DynamicData);7 c4 D0 w9 X2 X6 n& v5 ?
    if (NULL==DynamicData) return dwRet;$ O# Y& B% E5 a* [$ l
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
4 A5 o! b4 b% @7 W0 P% H; w    if (dwRet) return dwRet;
2 r' G( }; t: K$ M9 Q    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
; m9 _* |& o5 @/ K: I5 N7 i    if (dwRet) return dwRet;
8 ]7 N* J8 E' |' `! _/ ], _    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);2 k' ]  D' g; q3 |$ I4 B
    return dwRet;$ y' T: p6 }: _' ~
}
; U6 @9 h0 D- Z* \  o6 f# A1 u/ b/ m% X. U, S7 Y+ d. x
static const LPSTR  szwRecentPort="wRecentPort";
& ^3 _% |& o4 x8 ^0 ^6 `static const LPSTR  szwPort= "wPort";0 i# I" H1 Z7 p3 b( Z
static const LPSTR  szwC2CPort= "wC2CPort";/ [# O) m; }5 H6 h4 @  a; ?
DWORD GetPort(DWORD Uin)+ O2 R% _" b# y+ ^
{- P( y/ G6 C+ d, s4 T0 T
    DWORD dwRet=0;. [! ?0 \) k! Q+ ]5 ^) ]3 C
    LPVOID IQQData=NULL;
+ P% R7 v* g; i3 ?    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;# B8 B: `' @: i3 B! }
    LPVOID DynamicData=NULL;
4 A3 j6 {9 j' N/ v: C4 T* Z3 ]9 |    PrepareData(IQQData,&DynamicData);
+ B9 y  u  j7 T* b    if (NULL==DynamicData) return dwRet;
- N5 r& W( k! J8 o: H    dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14
( m  J8 }2 h3 B    if (dwRet) return dwRet;
% p* Q- ?' v7 `/ {/ b7 X    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);  O. e8 `+ ]0 X& H  q9 Z
    if (dwRet) return dwRet;6 n, d& J$ S5 L- B
    dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);5 s( ]2 j0 Z5 I. x7 O" Q+ L/ A/ `
    return dwRet;
: I) Y5 N& A% M" q* R& U4 ]. q}" J) y9 S2 r% e/ u3 Y; P1 W

8 s) y2 @( _. I# \6 Fstatic const LPSTR  szwProcotol = "wProcotol";
$ j& k9 u* `( N! Y' M/ BDWORD GetVer(DWORD Uin)1 N- |4 l9 q) q% H& s
{
2 L, _4 Q4 ^; r6 T; r) G    DWORD dwRet=0;$ B0 m# i" r2 _6 \/ t
    LPVOID IQQData=NULL;
0 n% q* r+ d$ D$ T    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
1 }1 W6 z( n5 F" F9 `1 e    LPVOID DynamicData=NULL;
+ h* g8 j" L& t7 [6 {    PrepareData(IQQData,&DynamicData);/ N- J0 H' W! ]- r% F
    if (NULL==DynamicData) return dwRet;5 B, C1 z- `4 o! N1 T
    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);  T6 F1 Z6 B# _) C
    return dwRet;
6 v9 o" @' J) C! U7 e; p7 m' o}; x+ U% z+ I# d0 B9 _' r5 g0 w

6 A! Q  j5 F1 j6 F, X原文出处:http://www.ye-soft.net/article.asp?id=43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 07:10 , Processed in 0.019407 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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