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

QQ IP显示的关键代码

[复制链接]
发表于 2007-10-12 14:06:56 | 显示全部楼层 |阅读模式
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.. @1 ]& S: I, J0 x( h+ p
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了." _, Y1 h+ c8 r* v( h. ^

0 F3 [4 F7 b4 `; }7 Wstatic const DWORD UnknownSig=0x1E3A86BA;5 j; m8 ]* _# J; l4 I5 o
static const LPSTR  szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";$ X1 ?0 V8 ^1 X
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);! J* y8 Y0 L. ]. ?0 |
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
" s/ f  q1 T  S4 E* x) y{
( _7 u; w. W1 W" e    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);4 ~4 r- t- A) Q2 g$ s+ L" V: |- Y
    PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);% F7 j1 H& G7 l1 |' i; N: w
}$ {  v9 f7 n2 q: e
3 W0 {: x) l7 q" k
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)0 l6 S+ ]' X4 x6 M2 [8 F
{/ U$ G- T: q) w* B& W
    DWORD dwRet=0;
, A2 |4 n& E7 H% G2 n    __asm
1 q) s! i* F: d) ^  z    {; v! D* k+ v& J
        lea eax,dwRet
; k, p8 i, B" v        push eax: j1 s! M) V, J( C1 i3 T1 p
        push szCmd0 Y; d3 J, R* A/ k& n+ i
        mov eax, DynamicData
- {' \: w) H9 v: C6 P& p        push eax
3 f  t7 W3 I8 H- A! k7 ^3 q5 y# I        mov ecx,[eax]- a# L- a8 L& d. }
        mov eax,ecx! J5 U! k, F" D1 ?. v
        add eax,iOffset  s& F/ k( X% o& Z9 b% Y' m
        call [eax]5 `0 w; i. j8 E
    }
& X' {2 [' i1 E" m    return dwRet;
+ @% J1 ?- _& E7 y+ W% u}
' G1 s1 F/ X3 G  e4 s/ B- d1 o& o2 g( F9 B8 _/ Y) a& l
static const LPSTR  szdwRecentIP="dwRecentIP";
, }0 b2 t' j6 o: G/ r7 Y/ Ustatic const LPSTR  szdwIP="dwIP";6 e. S; N: h4 v; L# H- V
static const LPSTR  szdwC2CIP="dwC2CIP";
5 p$ N$ X* i% G% }# V4 j1 BDWORD GetIP(DWORD Uin)
9 [3 n8 U. H& _) O{
% A, u* f' A; r6 R7 m    DWORD dwRet=0;4 w% r/ C9 G: n! {* q8 T. V
    LPVOID IQQData=NULL;6 a. @$ ^2 y9 I9 d0 [( b$ O3 O
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;: @9 I1 ]/ z+ u$ i! p
    LPVOID DynamicData=NULL;
/ G, W  b7 A9 k4 p& [! F    PrepareData(IQQData,&DynamicData);" g8 l% ~  z: i* H
    if (NULL==DynamicData) return dwRet;% v  z4 z* i/ N+ d$ s
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
) A  c7 Y& s1 U    if (dwRet) return dwRet;. K/ v% ?5 L3 T# X9 q" [) `+ d
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
( ]' c* E; M! \( M0 X, Q    if (dwRet) return dwRet;( O4 [, i3 J' }7 U8 L* J# S. i
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);
. g9 y6 }1 f; ?3 O7 u    return dwRet;
4 O. f2 C1 E/ |7 h# D0 Q+ D. g6 Z: D}
+ |% [3 m! H4 k9 y" \6 Q; p
4 {* r8 p! d; V- Y2 pstatic const LPSTR  szwRecentPort="wRecentPort";
) H- ^+ _) m/ R0 kstatic const LPSTR  szwPort= "wPort";, y2 f- ]; _3 Q+ _" b1 ^( G) F( e
static const LPSTR  szwC2CPort= "wC2CPort";+ f2 s. ?% B$ Q
DWORD GetPort(DWORD Uin)' d4 e- E# k: p' [( l  F
{
. ?  p; A* d7 p  y; H! X    DWORD dwRet=0;/ O/ N  Q3 B2 v3 a1 }7 S( s
    LPVOID IQQData=NULL;
# h. t" T+ V- T/ o2 [    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
, G* R1 n( ?4 j$ p    LPVOID DynamicData=NULL;: `' b  F" r! @' H/ T0 C9 |, m7 n$ `
    PrepareData(IQQData,&DynamicData);
. S# x* g. ^+ o! W& D& u! d/ [1 [    if (NULL==DynamicData) return dwRet;
3 E" `7 Y2 R) S" N    dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14; R' [6 p$ I( A2 ?
    if (dwRet) return dwRet;4 s; \; X0 j0 N2 n
    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);$ P/ N) G8 r7 F5 g. j
    if (dwRet) return dwRet;
" D0 x6 j# f  Q) G4 H- N    dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);) h6 F0 Y# u. T: O( O7 i& ?
    return dwRet;
4 e1 y/ p- {0 A6 l7 D/ x4 i! j}, }  W  t3 X4 ]
. E9 ]4 ]0 h( L8 Y
static const LPSTR  szwProcotol = "wProcotol";
, S1 E' n: A! pDWORD GetVer(DWORD Uin)
+ t1 j5 P$ d4 S' t{
( ^; Z4 V7 ~* v* N; B: d    DWORD dwRet=0;
% x4 a% p( k7 @    LPVOID IQQData=NULL;
; W, {" i0 A% O! R% X    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
4 G9 k- x3 S) w" I    LPVOID DynamicData=NULL;: o* R- w( T: W$ M* j5 [! ?
    PrepareData(IQQData,&DynamicData);
9 h3 X* W& C3 c6 r- ]9 k( }    if (NULL==DynamicData) return dwRet;
6 Z/ K& f. j; T+ S2 _    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
9 Z( f$ G' p( g! y# a# G    return dwRet;
) @5 n0 c$ w! l" \1 R3 b/ d2 p" b: Q}' R; t0 ^. A. E" U0 }" S
) {. G$ h4 B; _8 a/ F7 O9 |- E5 N
原文出处:http://www.ye-soft.net/article.asp?id=43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-8 20:20 , Processed in 0.033568 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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