|
|
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.
5 _7 z. V! s: F1 h) b4 j7 ~0 Prunjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.6 \: x. D/ R3 N& ~
% L, u/ ^- u1 M' v% h% y0 astatic const DWORD UnknownSig=0x1E3A86BA;# k1 U7 L+ r- h5 Y5 K7 v
static const LPSTR szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";; w1 ]" v5 X- ?
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);
5 ]9 L1 F) t+ g/ U2 RVOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
; D0 k6 p( F5 c% R{
: {" _9 A8 t& M. y$ } pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);
7 r7 V! L& t; @7 N3 a) D% [ PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);
$ G( n2 N- @7 z. s! `}2 |# i+ r& n8 ] M0 K* p4 H3 ]
6 I5 J# @# a, fDWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)
3 Y7 Z$ I" w. G- |' X{
# ~7 i4 y {+ t: J: `: o DWORD dwRet=0;
$ a* t& v' U5 X __asm" Z5 B' Y! R7 W: [
{5 b/ t8 p' g [# C' o4 J
lea eax,dwRet6 E5 ~# G1 P+ a1 ?( E" j- T9 U
push eax
5 C @4 }& G- N7 l9 j push szCmd1 g# n) ]+ ?3 E* u% G9 ]1 D; b0 c
mov eax, DynamicData6 w' _1 s: u0 N' w" n) R% ]" R5 L0 F
push eax9 R( H: c [9 h
mov ecx,[eax]# z$ x. T7 O( R
mov eax,ecx
; q: _$ H- {4 @2 \7 P add eax,iOffset
V9 ?8 z8 x5 P; Y+ M# G call [eax]% M+ O% |( K6 k+ L; k; M: i
}
9 @1 N- e1 M7 G2 I' M4 N. z( `+ v0 f return dwRet;
! N) E6 @: F1 U. c' h' t& V7 E}% u1 w5 \+ P z- @9 T
/ r- I9 O7 u. a4 Ystatic const LPSTR szdwRecentIP="dwRecentIP";
: v" Q: {+ f- z; p- z8 @static const LPSTR szdwIP="dwIP";- x# Y& c7 X1 T2 U* d+ U
static const LPSTR szdwC2CIP="dwC2CIP";
8 _, I$ d# w: ?# T- ]$ b2 eDWORD GetIP(DWORD Uin)
$ X* O0 ?+ I1 q{9 `4 s& ~7 F! _9 a( P, {: ?
DWORD dwRet=0;
" P! b& G! z' |! \7 K LPVOID IQQData=NULL;
3 _( L p' }, R if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;# N* a4 m0 f2 B" I* w" d& t
LPVOID DynamicData=NULL;
8 `# H7 P- }* [" @! ]4 j8 P PrepareData(IQQData,&DynamicData);
1 @2 c! @( Y+ ~$ _7 R if (NULL==DynamicData) return dwRet;
) z7 t9 G4 u5 ~7 D' Q& \) K dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
% u# D, n4 r `# c if (dwRet) return dwRet;
x0 k: S0 A3 w; ?2 X$ f2 L& P dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);- @2 K; p2 |2 F0 t+ J* v: S! b
if (dwRet) return dwRet;* S7 ~) Y. [# o9 c7 F6 n
dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);" k3 T& t- P* a
return dwRet;
7 E" J9 b/ a" S$ R! r' _( o/ x2 k}4 `: G+ ]& T& M8 i# X) r+ W
/ S$ J* Y! ]1 C. a. n8 W8 H: fstatic const LPSTR szwRecentPort="wRecentPort";
$ p( j0 n9 k7 \' astatic const LPSTR szwPort= "wPort";
/ s1 b% i+ f8 k5 W/ X" Kstatic const LPSTR szwC2CPort= "wC2CPort";# p w/ S2 B! N& Z' q
DWORD GetPort(DWORD Uin)
/ j0 f2 Z$ i4 g{
+ R `9 V: D$ _$ k8 ?/ O& a# S DWORD dwRet=0;4 x3 j3 C- _+ Y8 r T- j
LPVOID IQQData=NULL;
3 R; V& k+ p* b+ t8 g& D if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
0 j5 w! c0 U# a3 D9 Q& Q LPVOID DynamicData=NULL;' t( Y- A V, t, V o7 P( Q3 h
PrepareData(IQQData,&DynamicData);
: f" b+ B3 h+ @0 k if (NULL==DynamicData) return dwRet;
) ]+ R* F' J, @, \2 D dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14+ T2 Y3 b9 H7 G1 e! V3 H
if (dwRet) return dwRet;$ \& i! g& }. s( `! m& j6 J- H
dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);, e+ _8 _+ g- R
if (dwRet) return dwRet;# k+ F; S5 G2 e2 w5 M9 A
dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);
, z2 K9 F, h5 Q" |1 ]; K% ^ return dwRet;0 W" Q4 A' P7 F( |) u
}2 f' _& o) L& C% c7 p* F/ K2 T
g7 y- h _5 ^4 |6 V
static const LPSTR szwProcotol = "wProcotol";
- e, C$ Y! _" t0 t) l0 BDWORD GetVer(DWORD Uin)+ k1 j8 P4 [" _1 C) y, {
{- [4 |3 O. {+ x% w @
DWORD dwRet=0;# f+ @7 P7 A7 G' a! q6 j
LPVOID IQQData=NULL;
7 A2 N3 r1 W4 H& F- T- y8 s1 j/ T. K0 i if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;! b5 }: j) y/ L% s0 p% j0 P, c
LPVOID DynamicData=NULL;: c4 O3 E& @1 E: J
PrepareData(IQQData,&DynamicData);, n" `: S1 `2 q& Q9 E& G
if (NULL==DynamicData) return dwRet;* V" Y2 k" _# p# S1 D
dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
, Y* [, g' j0 V" q9 Q5 ?' z return dwRet;; v$ x: P! s# d# [' t2 n: ]0 `
}* e9 |& [+ G; J# f$ A9 K( L1 w
7 @& @. l' Q1 n- E8 v' K6 p! D
原文出处:http://www.ye-soft.net/article.asp?id=43 |
|