|
|
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.8 l( z" S) I" R
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.
: z6 w8 f6 [: Z0 b- e& k0 {6 ~1 I6 v |& d( _. ]" z' V4 m
static const DWORD UnknownSig=0x1E3A86BA;& d- [9 d1 q# a/ p* h8 w: E& c9 W/ O
static const LPSTR szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";! Z- e( t, {# z& r' z
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);4 b" V! @2 m8 g H2 f) b
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
W$ x) V' W4 H7 l; i5 f{5 g) J l5 q6 B" t1 A$ E
pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);" @% |( D) d' x; m I0 F% ]
PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);
/ A3 C6 |# M: W8 [}
, A: S& K5 f& Y- ` ~0 }
\' K& Q% c. G# W* K' n. \DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)
' X. ]0 T6 }6 D+ Z5 `{
( p, ~2 ? b6 ?# K9 m4 T DWORD dwRet=0;
! c& ~; Q! W/ j1 A9 |2 G __asm( ^8 Q+ ^8 O4 k7 U
{
9 L' W3 B7 f2 v lea eax,dwRet( e. |, [* a3 p. J1 e. e, k9 \
push eax* T* i/ T& A6 K" F8 }
push szCmd" t/ @# x6 G4 x# n/ e+ A7 f
mov eax, DynamicData
8 `- X# ?; {8 r) u% I push eax
, K( _! M& P) }9 w mov ecx,[eax]
2 H+ U3 v1 ^* t% l: i1 D7 f mov eax,ecx
+ o0 t3 M# e/ s9 c& q- K( z i add eax,iOffset% u9 h& j$ n$ Q; Y1 r
call [eax]
% h/ L7 Z7 j- A3 W( k- l: \) ~ }
2 {* ~4 b" S* o0 U: L7 b6 d8 H9 @ return dwRet;
' t- ]3 h$ z- c}4 i0 q) j4 m3 \" a' x
6 c6 f* q' D a' b8 H$ J% hstatic const LPSTR szdwRecentIP="dwRecentIP";7 H$ J7 ^# U; @: D" D( V
static const LPSTR szdwIP="dwIP";1 j; o; D% U8 m. O' N
static const LPSTR szdwC2CIP="dwC2CIP";
$ m) o9 W: X% f; b) ]# o s! w% fDWORD GetIP(DWORD Uin)
# p5 r" W. s5 Y( ?{4 @* @/ [$ H9 m l5 h0 e
DWORD dwRet=0;1 t" t C0 E# ]4 v0 ^! U
LPVOID IQQData=NULL;; y8 ?1 g# a0 A! D: B$ a
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;; H, }. w- D6 h% ~
LPVOID DynamicData=NULL;, B2 E' g4 L! _9 ~) _
PrepareData(IQQData,&DynamicData);
* U9 F) c9 x* |1 G' @1 A6 T- j if (NULL==DynamicData) return dwRet;4 P6 t# V% z" w4 U( I$ {% `
dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18& Q! Z0 w' k- l0 G3 [
if (dwRet) return dwRet;
" ?9 Z! x! W" X+ Z5 a2 l: a dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
+ o5 S) }' n G l6 W if (dwRet) return dwRet;' g+ X4 ~1 g; n3 l; T2 \
dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);
5 M3 O- ]" a. [/ A" X return dwRet;5 W! O W9 M, l! S
}* R+ Y1 u5 t+ ]- t& O( X+ M3 w. |
6 q! c% d6 e6 z4 Z
static const LPSTR szwRecentPort="wRecentPort";
; H1 h6 m& \; Hstatic const LPSTR szwPort= "wPort";( u4 `4 P& W; e F l
static const LPSTR szwC2CPort= "wC2CPort";8 e7 y1 I5 q9 k# T0 {' i- ~
DWORD GetPort(DWORD Uin)! p" P8 t7 e5 B, v
{; [, Z9 A+ f, o0 |6 V
DWORD dwRet=0;% |+ S1 }' t$ e. y7 p! q$ E
LPVOID IQQData=NULL;
% K( M! y; e( I5 p if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;' i. z4 ]1 h+ |. n- H
LPVOID DynamicData=NULL;
' v& ]1 `# v1 j. S PrepareData(IQQData,&DynamicData);( o3 u; ^/ l( v9 _5 }/ Q
if (NULL==DynamicData) return dwRet;
7 i/ ?7 \& A3 Q" z; W2 b% L dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14- _" z( G6 T; S, K: Q
if (dwRet) return dwRet;
5 }" O6 \% a+ l' ] dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);
, i# }5 r7 R. ~' v" C( C+ D$ a if (dwRet) return dwRet;
" h( {8 a) [0 t& P5 K' O$ g dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);
. S3 {. P$ b7 D return dwRet;: o2 I% o% E9 B: m
}) E9 S; D8 J( @$ y+ `# }8 r- W0 |3 A
, \ T9 ^5 @9 i# Y4 z' V* C, V' V
static const LPSTR szwProcotol = "wProcotol";
# {' k4 [2 ?( {8 i% ]; b% [% JDWORD GetVer(DWORD Uin)0 r& @! U% }' N
{3 a( V4 p L8 `2 ?& ~
DWORD dwRet=0;" ^' r3 x0 [4 h7 { }
LPVOID IQQData=NULL;
/ h: `/ W* V1 K if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;% @& V8 D$ G7 R: C
LPVOID DynamicData=NULL;
3 E/ c5 X2 |+ _7 C# L( } PrepareData(IQQData,&DynamicData);. O% u+ C/ z: e& T
if (NULL==DynamicData) return dwRet;
# f X3 i) k# _" \' Z4 w5 b! H dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
' ]: p5 Z* z& ]4 N return dwRet;
: v r7 `* ~# h/ n/ {. _}# l2 S/ i+ [) W6 R8 n: J7 M
$ r' B# k( N4 [
原文出处:http://www.ye-soft.net/article.asp?id=43 |
|