|
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.+ R) [0 u2 w' Z' j+ R8 H
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.
$ P" L; @6 H3 {% \: C! ~3 W' T8 L- R+ q. b% V$ J
static const DWORD UnknownSig=0x1E3A86BA;
- W% @9 F9 G5 Estatic const LPSTR szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";: Z6 `) E# y% \3 g j/ [% v+ J
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);, o9 w! L# p6 B4 E2 q, R
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
2 l$ U, z" D/ `7 c+ ~{
8 |- s) U7 t5 j) }7 N g* e pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);
0 g R: W& B1 M! m( p- ? PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);
! T9 p3 s- X+ T2 M) m) ^& E' n9 H/ Q+ i}
7 T# |6 {$ r) D, g" g. d% b# P" w5 r+ S
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)
8 p- o* J. f) f{5 I/ K J5 A4 n
DWORD dwRet=0;4 @) U$ U$ Y. F
__asm
+ L0 O. L" N, t' a+ o' I* t {" ?. _5 l% L4 [5 q* p
lea eax,dwRet+ J) W4 m$ |# G, C' p% T
push eax# U8 \- W1 S- e, F; G' K( U7 Q
push szCmd
7 g# s2 @. a R, L mov eax, DynamicData
" I2 m8 c5 }- H, i& L2 L' Q push eax* L5 S0 M$ l7 H
mov ecx,[eax]" U. W3 a) i& L! G
mov eax,ecx3 Q% P7 q# q2 ]8 X3 r
add eax,iOffset3 o6 J. {. W' h3 c c4 N# }
call [eax]
; _4 O. _+ q* ?6 y" d }
( T5 q9 p. L& O1 ^0 j9 v# |+ f return dwRet;
7 T9 C" O |. k9 U& f3 j# F}
. K) _. {- b ~0 }5 U! w+ q+ A% ~( e! g& z2 ?* r" R
static const LPSTR szdwRecentIP="dwRecentIP";
/ x5 W0 J/ U5 x' W2 cstatic const LPSTR szdwIP="dwIP";" u. D4 i$ v- l6 I: b( O7 l
static const LPSTR szdwC2CIP="dwC2CIP";+ E6 a% w3 k% j1 b( m! P5 ?
DWORD GetIP(DWORD Uin)
3 H/ W/ p6 ~ _& m: u1 a{% |$ N& X5 f+ Z2 h1 I( n+ p3 d
DWORD dwRet=0;3 \! [2 q" `; S1 i$ Z$ x
LPVOID IQQData=NULL;
1 g G+ r9 ~3 j& p8 s5 u+ A if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
8 j3 [$ E2 f) N$ r; ~ LPVOID DynamicData=NULL;6 o! v$ D4 v" Q5 B6 [# ~' |+ J
PrepareData(IQQData,&DynamicData);( l" Q% w% y. t: M3 L- Z; ~
if (NULL==DynamicData) return dwRet;
7 ^5 y/ A) m/ l2 S ] dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18& k4 P' K# v" E+ ~* D9 O
if (dwRet) return dwRet;
1 q7 n! u1 w) W dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
, ]2 v! H# A: @* Y+ M5 d# k if (dwRet) return dwRet;
, Y0 w6 _, R7 v5 @ dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);
5 R" ?7 Q9 r* M" ?3 B return dwRet;) ~5 M6 a N& f7 m0 y6 D
}; H1 v8 @+ L5 U
3 E5 t9 B( j9 x; w& D0 X0 |: g/ }5 [- pstatic const LPSTR szwRecentPort="wRecentPort";: i4 Z/ g, N# {2 o2 i7 d
static const LPSTR szwPort= "wPort";
' S! g a7 F" ?& e9 gstatic const LPSTR szwC2CPort= "wC2CPort";
) |' x4 J! d' |' t! I uDWORD GetPort(DWORD Uin)2 n' c2 {" U( j; J
{
h9 n* y- f7 t7 P2 k DWORD dwRet=0;/ m5 p% @3 y% j9 p
LPVOID IQQData=NULL;
$ D! S- W* H2 ` if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
9 m1 ~' g7 o k4 N; Y LPVOID DynamicData=NULL;
: |" u; v$ A, f7 ^. A- d- R PrepareData(IQQData,&DynamicData);
& O6 d$ g) Y; x. k* b2 r if (NULL==DynamicData) return dwRet;- ]; `6 }: } }9 E
dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+141 t. {6 G4 @2 y% o
if (dwRet) return dwRet;* u: N7 b) n8 d1 `3 R
dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);
* f% A- i3 z& R if (dwRet) return dwRet;0 B; V2 N! E5 C# M& M6 {. m9 Z
dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);) t1 P7 L% V( K
return dwRet;
4 A6 z9 V% f$ @, ?3 j}
9 f, W" {+ L6 Q# A2 f( }7 R
?# H8 Q+ D# g2 Gstatic const LPSTR szwProcotol = "wProcotol";, m6 [6 v4 Y0 w2 e4 Z' S( R
DWORD GetVer(DWORD Uin)3 x+ `( n0 u" `
{3 D! ^7 d. J% ~: O4 I2 B. R; w
DWORD dwRet=0;
. Y" ^0 B a, [6 N3 d$ V2 p) H9 F LPVOID IQQData=NULL;
6 `1 u, ^! C/ X n' y$ R if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;: P+ K$ t, ^" m# L. r; }$ q
LPVOID DynamicData=NULL;8 _9 [3 ^$ ~- w8 M) A
PrepareData(IQQData,&DynamicData);
# G' ^8 j X3 P& i( b if (NULL==DynamicData) return dwRet;
/ G4 h, b1 w* h @ dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
# R7 ?+ v5 | a% b3 w- R return dwRet;
7 j1 | u+ z5 `$ x, c+ U% }7 k% h}2 L& A. ^! u0 \9 ]$ |
6 v1 t6 e0 m z9 [0 Y8 p
原文出处:http://www.ye-soft.net/article.asp?id=43 |
|