|
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.3 i5 a: ~( d# M* `: }
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.
* |4 c s" [: g
4 ~6 r5 F$ m6 [5 B8 v1 ], Dstatic const DWORD UnknownSig=0x1E3A86BA;7 G2 [: ?' M! O& r# A" r: i3 ]
static const LPSTR szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";5 v3 D+ n e5 O6 p& t: k' R
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData); G- q$ Y8 v) }7 E
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
& z6 n! b( g/ m+ _6 r{
2 y. Z1 U* H) H) X# ?4 L* H, _ pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);2 G# W7 Z7 X; M D$ h1 z
PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);. _" {' P1 {0 L. }' d- ]
}
' ]0 C) w3 d* E2 L/ Q+ v
/ z) A+ G" u B% h0 k; {& p i6 ?DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)- ^9 n$ O& ?/ J R( S
{& j9 F+ v6 @# w& k( {
DWORD dwRet=0;: M5 D1 I4 m- i0 G7 \ {, |/ P
__asm- f4 i: S3 v3 @- }0 ^7 l- J
{
. I6 q3 C" i* z1 }8 `* R, g# a lea eax,dwRet8 n9 r+ f) c1 r7 M0 Z0 ^
push eax, ]+ o9 z" z3 l! }
push szCmd
% W$ M& e, i- v# k9 D mov eax, DynamicData4 m) |- ~; a) W' w
push eax: a$ H9 o- E! ?$ r; ^4 @
mov ecx,[eax]% c) R* Y2 H1 D6 U9 o4 q6 @, R
mov eax,ecx
1 }8 c+ T! r7 g" ~. U \% E add eax,iOffset
: j4 h0 X3 V: F2 E$ s; ~* h call [eax], T! V% t. A D9 U# b2 f; C5 n
}$ }" f. K# V9 m: n+ | M v
return dwRet; H4 n V5 D0 L( g" N
}
' B, A3 J2 p, T- E# W1 v1 W0 e9 ]" `
0 g2 ]& l' \- T! istatic const LPSTR szdwRecentIP="dwRecentIP";( P7 y/ O' q' k8 a) z, \- c" s
static const LPSTR szdwIP="dwIP";0 _* _ {' X! d$ K, X+ I# l
static const LPSTR szdwC2CIP="dwC2CIP";+ g2 A! } X6 y5 X
DWORD GetIP(DWORD Uin)
. I! l9 z* m+ `{
4 Z6 T# }. p% ~9 E DWORD dwRet=0;6 b+ G1 H) ~3 @* ^/ ^$ B
LPVOID IQQData=NULL;* ^- V, o3 p6 |
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;3 N/ B7 b% X* @5 O: I
LPVOID DynamicData=NULL;
# Q& q% w* R L' A$ f PrepareData(IQQData,&DynamicData);/ N; \: j) u. U& K
if (NULL==DynamicData) return dwRet;
, {* Q$ L5 F5 I6 f( O dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+189 z. E# k3 q" W9 V! `: ~( L
if (dwRet) return dwRet;, }- b% f2 }" W( F
dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);" b+ T& D( A$ R/ A% {3 B
if (dwRet) return dwRet;
# d0 z* s! l. T: z dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);( A# a4 l2 \8 O- ~
return dwRet;
( V" Q: k v% o$ y# v! v: X& w}
+ O! g; J% R" T% G1 y( @1 e
: E4 H' I$ g1 v5 P0 X" Zstatic const LPSTR szwRecentPort="wRecentPort";" T: Z7 B4 b3 S' L* T) ]5 v
static const LPSTR szwPort= "wPort";+ {; J+ \- e6 g9 r5 r Z: `
static const LPSTR szwC2CPort= "wC2CPort";- ]% f; \1 s; }# X! t+ |* \
DWORD GetPort(DWORD Uin)
# {& O, `3 D: u# q% Q7 G ~$ S& ]{! _( B5 @. R% N( o2 j
DWORD dwRet=0;1 W T. U( j0 D! t+ F
LPVOID IQQData=NULL;
3 D' q4 {5 ~# F8 M. r- B if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
8 q5 t5 i+ Z! k8 L6 h; v LPVOID DynamicData=NULL;
; P" [, U' i5 ] PrepareData(IQQData,&DynamicData);
4 c6 [8 F1 _, U& e' S if (NULL==DynamicData) return dwRet;7 l+ |+ o* O6 Z. c! Q9 q
dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14, V- R1 d- V4 S6 K# P0 I. G# z% c
if (dwRet) return dwRet;
7 j# x% K9 a% |, I7 @4 z8 g/ Y dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);* J8 Z6 `/ J' G
if (dwRet) return dwRet;( P% a3 h @) K+ `) `$ \
dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);
' ]$ F$ |2 e9 I2 L0 M! x7 J2 d return dwRet;
% z+ t8 I4 k% B0 d. |}% T! I8 C* Q" K, Y% ? c* f
2 s9 x+ a0 V# Z4 l1 G
static const LPSTR szwProcotol = "wProcotol";) K, n$ t' J [3 @6 t+ @0 i
DWORD GetVer(DWORD Uin)
' I, ~: Y$ [1 z$ D7 x{
3 y% L( z; O; f) Y. i _; |# U DWORD dwRet=0;
+ m1 n! Y3 Q* v7 j8 e" \ LPVOID IQQData=NULL;' v. H6 h# e# q |
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
+ S) }3 D% @2 f, s LPVOID DynamicData=NULL;& ?+ x- p9 @( w. j1 [
PrepareData(IQQData,&DynamicData);8 v" n& {1 w1 ^
if (NULL==DynamicData) return dwRet;% p9 n- ?% z. n7 m9 B
dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
% ^: J# `& a3 r' c) m) ? return dwRet;
$ R9 D+ P& t; o; B}
: w, \. K5 g0 O8 d: H7 q
3 ~* b$ s$ h* v原文出处:http://www.ye-soft.net/article.asp?id=43 |
|