|
|
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧., }% {% x9 H" e1 j4 f6 ? ~& e" M
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.
`, v; i$ F7 ]- l ~
9 Z9 w$ l T3 Q/ Xstatic const DWORD UnknownSig=0x1E3A86BA;
* F. r3 @ z( w1 i. {static const LPSTR szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";
2 `* }7 P' }. f4 S( Q8 Mtypedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);
- T7 B; t ?/ U/ ]* wVOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData), N& ]0 c1 a& [! d
{( A1 o' P3 J4 x( g: Q H
pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);7 D! Z' P+ C7 E# e5 \; m! h
PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);1 f) N+ [+ b& @
}
e8 I: E, V% g) ^& H7 d+ B% i* h
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)- l4 @5 S9 j7 u: ~8 k7 C" }+ l# |
{
( N7 I9 d2 h& B7 ]8 a DWORD dwRet=0;
% }$ T2 h0 O1 b __asm
- V1 ?8 P2 e- `1 Y% U: a {& y: X' \) b. G
lea eax,dwRet- B: I9 p4 A, r" o8 Y, Z
push eax
. v* C* q* b2 U3 s5 ? push szCmd
8 |( U8 I; {0 b7 n7 f5 u9 K! S mov eax, DynamicData8 e: j# P" M- L4 e3 d4 i, c; T8 x o: v
push eax; P: V/ L4 H- O5 A0 V
mov ecx,[eax]
% |) F7 q$ \: M8 j$ @6 ]; A mov eax,ecx
# ^$ ^$ M4 Z5 A4 B2 ?. P add eax,iOffset
' e8 n% J& ^: n( l$ U' k call [eax]# I' z1 O$ G; n; \
}- K O- }( o4 q/ u
return dwRet;
! A7 M- {9 ^$ _}; j V) `+ S2 u$ y
3 [6 p9 a3 G1 o; \5 e
static const LPSTR szdwRecentIP="dwRecentIP";
) @6 C: k% f( F. Kstatic const LPSTR szdwIP="dwIP";
+ O0 k( x0 O# r& ~5 c0 \- V- Sstatic const LPSTR szdwC2CIP="dwC2CIP";
4 V) P) i5 ?- x6 @+ m! wDWORD GetIP(DWORD Uin): Q' A& Y% F6 }9 c, M; h
{
" t: l- u) ]# B$ z' y DWORD dwRet=0;
, O6 }4 G; j& O LPVOID IQQData=NULL;
d( v5 P: W6 R7 q, t& F/ P" r if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;. b0 l: p! V$ W8 o3 K& z5 H" P! ?
LPVOID DynamicData=NULL;
( G* Y2 h* D: A) F! h+ \9 b/ u PrepareData(IQQData,&DynamicData);
, x i3 r- K5 |! v# u, K; Q if (NULL==DynamicData) return dwRet;7 u' B9 m0 S% H2 ]9 W8 y$ ^1 _ F
dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
1 n1 h; p3 s7 a7 r; m3 j8 m if (dwRet) return dwRet;" ?1 V2 m7 k" _( ~
dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
b3 b( U2 N/ u* [1 I1 p" e if (dwRet) return dwRet;
# D( g0 \; g/ ^0 K! Z dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);
1 G5 n% M5 L2 k, g3 y return dwRet;
0 m! e3 x" Q/ h$ A}
8 D' F3 B( T. p2 ^4 z
) t$ g V1 i K9 Mstatic const LPSTR szwRecentPort="wRecentPort";
/ ^7 {" b$ M7 p3 P& \static const LPSTR szwPort= "wPort";/ W1 |/ E3 I; u# G, V4 k
static const LPSTR szwC2CPort= "wC2CPort";! Q' [! M' a }4 R% v
DWORD GetPort(DWORD Uin)
4 n/ T$ l! G2 U3 R# K7 C+ Y{
( g X Z4 X: g DWORD dwRet=0;1 j& C& V8 I5 p' T9 R. G- y
LPVOID IQQData=NULL;$ p6 i8 L" n3 [1 a5 U* R1 S
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;% Q7 Q7 v! Z0 N, P, `
LPVOID DynamicData=NULL;
3 C g; F- H5 g2 k; P8 M4 `! d PrepareData(IQQData,&DynamicData);
9 V0 u* G. i% W" E$ d! M' ~6 l if (NULL==DynamicData) return dwRet;4 V% R0 t# D% H2 R
dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14$ E8 j3 {, g6 ^* Z+ A1 n0 G
if (dwRet) return dwRet;
4 z0 t1 x0 r" ]. g dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);/ j: I5 K, l L0 U- x' d! R
if (dwRet) return dwRet;2 A- @! H7 Q" j! G3 d, u
dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);" K* E4 G% Z( G0 R
return dwRet;
0 w ]) P- n, K- Y}
8 P1 ]5 T( Y( Q+ F/ b$ N+ t% l) X, o$ m7 n s' l
static const LPSTR szwProcotol = "wProcotol";' v8 \2 S; X+ j7 t6 k9 a% o, Q
DWORD GetVer(DWORD Uin)/ j/ v0 O& r' i
{
* |' O: t1 A+ B: { o DWORD dwRet=0; T t- w% }4 D( {" n5 l
LPVOID IQQData=NULL;
6 @! V* b) | Y# A$ k6 G$ j if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
: U0 p4 x* S: ]+ Z# t0 O' o. G/ K3 k" I LPVOID DynamicData=NULL;
1 d% M% s5 C+ j0 k PrepareData(IQQData,&DynamicData);
1 X6 [. D& ~- ?7 s H$ e if (NULL==DynamicData) return dwRet;
1 U' j2 Z3 W' z4 W8 S5 y1 u dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
_- C3 k, @+ C' N# L return dwRet;7 H5 Z. o2 d+ t7 B1 C6 P1 h, z
}* I$ Z8 `+ A1 d# J4 `
8 a' n8 P$ G( z; _5 M
原文出处:http://www.ye-soft.net/article.asp?id=43 |
|