|
|
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.) ^' @8 j( O6 X0 F6 F
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.
5 ~* [8 | m0 o4 F& G
6 c$ ^0 [( j( `5 @. }static const DWORD UnknownSig=0x1E3A86BA;
4 E" t3 L5 E+ l! [2 }7 ^ {* U( Jstatic const LPSTR szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";; `7 a; f/ D; H
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);
- B3 x5 u- h, \2 d1 F. T; QVOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
; N# r% u5 Y+ z) |# M{
7 |+ m* u; I, H1 a& B* _" Y pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);& `' y G3 b8 a4 ^2 r9 F
PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);3 s3 j/ s4 ?9 ]5 V4 o+ y( }
}
; }( b$ z; ?" S ~4 R
9 U% K# R& N$ `: C" q- o7 o7 r4 eDWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)
4 n& U4 t9 G! G7 z; w# o# Q{
8 o- N+ Q+ C$ |) V$ @: \/ s DWORD dwRet=0;
0 q: I- H: }1 S# u __asm' T6 E' d( {0 V# z. @
{
& q$ u8 w) Y/ T+ U' d$ X) K lea eax,dwRet
' [: ?/ B ]* r6 O/ _% X push eax I+ N5 n9 i9 G9 {& I! t
push szCmd' F$ e! K- r7 _
mov eax, DynamicData
1 e1 K/ Q( t- {2 F; b push eax2 v! [" [3 s5 A$ B( f5 x
mov ecx,[eax]$ O* _, i% P( X! @- L# L' `
mov eax,ecx1 ^. d5 _5 l( {, K% _) ^! U2 Y: n
add eax,iOffset
7 m) k7 ^5 `+ e; q; Q! Q( J8 r call [eax]& f2 k+ U: A7 P8 B# W
}
7 C6 c! N4 \ K @ return dwRet;7 ?9 V$ _& K0 {: {4 B
}
. F) P4 w. e: I8 @4 g* f$ }; I l3 p! i& B- i' P( X
static const LPSTR szdwRecentIP="dwRecentIP";8 y9 a# c) O% t3 ~/ l
static const LPSTR szdwIP="dwIP";4 ?* G% L I: z- N- ]2 e6 ~* d
static const LPSTR szdwC2CIP="dwC2CIP";
: b+ C& j4 U$ r: v6 h5 EDWORD GetIP(DWORD Uin)
& P$ k3 u- e/ ?! Q4 V; \{9 q8 Z& D* b2 z1 ^ m: n) r
DWORD dwRet=0;1 X- z6 [' K9 G8 P5 D/ p8 G% `
LPVOID IQQData=NULL;5 c: \9 G4 a% L; x" |
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;3 x/ D2 y1 Q4 q: ]6 v# V
LPVOID DynamicData=NULL;; {2 q7 v" U3 l3 x6 i7 {
PrepareData(IQQData,&DynamicData);
7 X! G [9 P- [& {( I' T! f; ?0 t5 | if (NULL==DynamicData) return dwRet;
3 s$ i8 I% b9 f5 R6 x( M8 y% u dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18- d- R) b: \! }
if (dwRet) return dwRet;
( d& Q1 Q1 g3 r6 a$ ?9 i8 P8 o dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
* z: W/ Q+ y$ F% ? if (dwRet) return dwRet;- A+ K$ p% i( h+ P
dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);2 [2 i& g5 \( ^) u- P. e1 ]$ L
return dwRet;6 ?; u E! b, ]- u% C; {0 {/ M
}6 T0 [% v5 [5 Q9 ]) B$ k* Z# R. U
9 o1 A& v# e/ ~! k& \4 l: B7 X2 Z0 v
static const LPSTR szwRecentPort="wRecentPort";2 O# }6 N4 @) }1 Z
static const LPSTR szwPort= "wPort";! f' _( ~. f. M& U( U" }
static const LPSTR szwC2CPort= "wC2CPort";
6 Y4 a6 f! h% b" d$ L* [. K" mDWORD GetPort(DWORD Uin)& F- M5 X2 O+ T- \
{
1 i+ s& {, x5 L& k DWORD dwRet=0;
5 q0 V+ F# u9 Y7 r- J2 D LPVOID IQQData=NULL;
5 F, F4 Q, n9 ?- l# E8 m+ o if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;, m: \; }) b/ @
LPVOID DynamicData=NULL;+ B. q# z8 [* \+ `4 r( c+ ~
PrepareData(IQQData,&DynamicData);: f) @; K+ T) N6 n
if (NULL==DynamicData) return dwRet;7 @8 n" A4 A& T& _# ^4 q
dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14" v% T' m/ r& @7 B- k" W7 D. f0 ?
if (dwRet) return dwRet;3 p: Z; T- i) Z9 Z
dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);
- I% Z/ }. R8 P/ W( ~+ \ if (dwRet) return dwRet;
+ v% d9 \# ?4 w4 Q dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);
8 g3 S f& N7 E$ ~# Q1 Z: w return dwRet;
# ]4 R* s) w1 t9 e% \- |}+ M7 P/ Q. j+ b* p# Z0 G
+ ? m: a) k7 Q* Xstatic const LPSTR szwProcotol = "wProcotol";
! a- Z' o. k4 R, O% e- wDWORD GetVer(DWORD Uin)) N1 G* O7 `. z/ m
{1 C; F" `3 i# u% {; t& d
DWORD dwRet=0;7 u' }& @, m# e% X
LPVOID IQQData=NULL;
# r4 O6 @4 x+ S$ X+ E3 f( a# V% j if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
- w0 o) D& q. L. u6 z" E! N7 v LPVOID DynamicData=NULL;
1 s# z2 p' [, U/ q" {% }& G PrepareData(IQQData,&DynamicData);' N4 U% y" k s4 w
if (NULL==DynamicData) return dwRet;* v4 k& K; ^$ \
dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
u& _& X' |6 |6 ~& i; ^ return dwRet;
* @9 K8 V' U# J+ s7 J6 G}3 W% m" G2 y1 _/ j7 _- a
/ g1 U/ F" e& z# _
原文出处:http://www.ye-soft.net/article.asp?id=43 |
|