|
|
这是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 |
|