|
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧. t3 c" x7 m$ I" R5 D% f+ @/ |
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.( ~' R& O1 m/ E3 e& F
* q4 w7 @9 q; I' M2 _static const DWORD UnknownSig=0x1E3A86BA;
. g- f6 H- F1 H! u; ustatic const LPSTR szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";
7 v9 H( r$ g7 K, D0 |7 A: btypedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);
9 E6 h. i$ Q2 JVOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)9 r( J5 d: H9 k6 U9 I
{ E4 b9 o5 _' F# \7 `! ]
pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);) \, g% |1 O8 O7 t2 a/ u
PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);
- a% c+ _1 p1 c n7 f* k% T- ]; p: @}# n: z$ z- N7 v. z- z0 |
$ L& H. t6 V: x% H3 @# SDWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)
' e! [5 _5 o/ V2 C# J7 {{9 G3 |. d# K& r8 g1 C/ Q# F
DWORD dwRet=0;9 h9 [- n8 a1 z1 D, A& R
__asm
: d7 D, n! ^. Z, o( m$ E3 c! n {
# o6 F& ]- _3 l7 ]" J- T lea eax,dwRet O" @/ z; ]; _# L- z
push eax5 Q8 Y; P) }, x" j% r$ N
push szCmd: |- a/ G8 k e) B* E, z
mov eax, DynamicData+ U7 y: O$ a z. {$ s" ?! z3 I
push eax
# J, Y+ g" P; @" i7 A: R. W6 K0 a mov ecx,[eax]! y% B2 v+ f( S% p, J3 u
mov eax,ecx
$ n4 X3 g% ]0 T9 {5 U) m/ H# ?: Q- P add eax,iOffset ?" U, u- a5 m, [
call [eax]
8 O3 K8 l1 L1 g k* Z }. d R/ Q' V! G+ I8 Z- a
return dwRet;
$ S% O+ q; g) ?- A3 n6 k}
2 I; P" D' I$ {% `; w. G
; _+ \! w4 c% fstatic const LPSTR szdwRecentIP="dwRecentIP";* @3 ?2 ~7 u. G; {# z, K. {- c" Y4 p
static const LPSTR szdwIP="dwIP";
* U* F* P, d6 ]0 G- {static const LPSTR szdwC2CIP="dwC2CIP"; P- ]& k9 _% E/ c
DWORD GetIP(DWORD Uin)
0 d0 y; d) }5 B3 U' S6 s3 G1 H1 j: I2 X{
7 K9 o9 o i" U: n DWORD dwRet=0;
! X- c; |; B6 ? LPVOID IQQData=NULL;/ G) \ o& D! W7 I! v- U
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;1 y+ x, T) t1 M8 t) B: S- n
LPVOID DynamicData=NULL;! F2 Z" I6 G- _4 P! [: X
PrepareData(IQQData,&DynamicData);
- K6 Y H9 r: a; H2 | if (NULL==DynamicData) return dwRet;. {" X% }- j Z$ d9 g0 D
dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
' i0 ], `( l' y4 F- q if (dwRet) return dwRet;
! [6 I$ \: q: T) z! p# e$ R dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
2 v ~, X/ t9 F4 k4 E5 A8 } if (dwRet) return dwRet;
3 b y& l' X. s! Q$ T dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);
( R4 o1 z) p: j4 W3 Q return dwRet;* |. z+ ^8 u* s7 N! R0 `
}
+ {' N+ P* i6 l. v5 C6 z8 m
5 R( B' Z: u& y7 \% k, d( n5 n, Tstatic const LPSTR szwRecentPort="wRecentPort";
+ \- B* J' V* l+ F; Vstatic const LPSTR szwPort= "wPort";4 z. D& A! h/ A T! |: I& e o( k
static const LPSTR szwC2CPort= "wC2CPort";
4 [ R1 n6 R; L2 X1 QDWORD GetPort(DWORD Uin)
2 o: V* _: g1 e+ R6 T{3 H5 g* ~1 S5 L5 ^1 V
DWORD dwRet=0;: X: j1 n" k4 G6 u- L8 ]
LPVOID IQQData=NULL; S" ~1 M2 L6 r
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
" [; t( ~& {, \, r. t LPVOID DynamicData=NULL;
' c- I+ D# M3 k PrepareData(IQQData,&DynamicData);
4 y+ T( ?7 H8 V2 l# W if (NULL==DynamicData) return dwRet;0 X, y$ k) `- i2 _5 [8 ?& [* o
dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14 S0 N, p. Q q
if (dwRet) return dwRet;
O& J1 K! t+ U+ Z8 l8 A dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);, r2 u _# `- D3 ?! Z# M; v
if (dwRet) return dwRet;% r7 N6 l* H8 k$ P
dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);
6 D8 d! x; C/ N: w# p return dwRet;4 Y" c D+ b& V$ _0 Z. Q! t5 h8 x+ M
}
: {: z Y! X; d/ L C8 Q3 \- d' E& A/ ^
static const LPSTR szwProcotol = "wProcotol";$ `2 |5 O- T6 I9 U# [ [4 C! u
DWORD GetVer(DWORD Uin) S' _# Z& l. {
{0 T, v% g; m7 X; u' {7 _
DWORD dwRet=0;
. Q h& W1 H+ E: }; Q6 S6 o. ~4 ~0 | LPVOID IQQData=NULL;
6 T# |: Z( ~0 e& B9 u% Y# m if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;: [4 o+ @% W/ ^7 q5 s8 c
LPVOID DynamicData=NULL;
$ r) i, T5 T" j6 A: M, C5 \: K PrepareData(IQQData,&DynamicData);
. B% K$ X) K! j5 m2 P if (NULL==DynamicData) return dwRet;: e; z3 r' v, g' M
dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);4 _# O% |0 a: w# n* n. J
return dwRet;4 ]' @7 W+ _( U7 Q9 ]' ?
}8 Z+ j+ z8 S- \4 k6 @: m7 q* w
7 ^ i/ k- p& Z) D+ K: x
原文出处:http://www.ye-soft.net/article.asp?id=43 |
|