|
|
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.: D' l. _9 _! C
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了., ]; o/ r" ]% \0 M% a% _7 V
' f) r3 b% s( I+ x, o: kstatic const DWORD UnknownSig=0x1E3A86BA;- i: o2 Q8 ^+ \# R7 O7 X' P! Y T
static const LPSTR szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA"; J h f' k+ z
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);
6 {( C* d% O4 [5 }4 ~VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)7 R, A! w. _. e! T% ]
{
8 |7 ~* E6 P# O pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);5 U8 s7 P/ R) [" L
PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);
# e- J4 A n' m( o, P7 w/ _. `}1 \# N" s; B& j
9 y' k* j0 H$ {; S' {2 Q
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)- u0 l- `5 w8 |& `! V [
{
M$ y+ Y }3 i DWORD dwRet=0;! q+ r9 m9 w: i: M
__asm
0 i6 z6 j' f9 W# i+ s" ? {
# `0 a+ f/ Q! e' M- Z lea eax,dwRet) Q0 d& P5 ?* p9 V$ Z$ U7 A
push eax! O7 C$ d5 `. v4 L4 Z# t; r
push szCmd' ?5 r9 c: P, v- F V, u+ p$ t2 n/ M8 f
mov eax, DynamicData' W# v, u! F4 d' L- V0 G& k
push eax
' {3 X: D, K! P- x! l3 V mov ecx,[eax]5 I: Y, {1 w0 c9 ~
mov eax,ecx
& h2 j1 E# V l% m add eax,iOffset5 q, z" { M2 R- A3 [: q: s
call [eax]$ F0 G* T! o& _
}
, F! R8 |* p5 B return dwRet;
# N6 A1 v7 g0 ~1 J, s( l {2 D, t}
$ r4 ]5 C! {7 K% ]
* z8 n+ q) `+ w4 j& K- Zstatic const LPSTR szdwRecentIP="dwRecentIP";9 u( W! ]4 R1 x" X5 ?5 `& n* z6 J
static const LPSTR szdwIP="dwIP";, \& T5 b7 k$ E! c. R! [* p% w
static const LPSTR szdwC2CIP="dwC2CIP";1 ?. H: }$ M$ i6 W* V: I: H8 w' ]
DWORD GetIP(DWORD Uin)
& N: E- |1 {1 G4 J1 q{
]& `& v: h0 l r0 B DWORD dwRet=0;
F5 p. O; F, K: g2 [# j LPVOID IQQData=NULL;% s) W* e! s" T/ x" V: N+ @
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
7 q& V4 d# i' @5 b C3 z LPVOID DynamicData=NULL;
k* z! t: a9 ^: h! ]; i% v PrepareData(IQQData,&DynamicData);
9 @+ A& a. e5 C$ K if (NULL==DynamicData) return dwRet;
2 ]! i) a a; b: y: S$ a4 K dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18- ]0 ^! `* k( T" O- f" v5 `
if (dwRet) return dwRet;" ^7 T) u! O/ @' j
dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
. S7 \6 u, e, H$ z, J8 x if (dwRet) return dwRet;
. y% o2 X( l9 C1 m9 Q, ^5 @. b2 ]6 h dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);* Z; g; F; P7 `( s) P" O
return dwRet;
9 E/ g( V4 \2 S" v# V9 S: m U}( \3 F( ~. d6 O$ l
; v' |: w" E9 d6 J" R) Istatic const LPSTR szwRecentPort="wRecentPort";/ @4 R+ w7 j4 \
static const LPSTR szwPort= "wPort";6 O# C: d6 P" S4 ~
static const LPSTR szwC2CPort= "wC2CPort";' c: W9 f* x; G/ J6 M
DWORD GetPort(DWORD Uin)
& N8 F1 N! r3 s/ |8 d; f{
2 k) E- S) u, N$ H( R( h8 n2 L DWORD dwRet=0;
' c8 a* u, q Q7 a LPVOID IQQData=NULL;
5 Y7 W, G7 r6 B. g/ K3 ], U if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;, }( @$ p$ F: x1 e! w) l6 s
LPVOID DynamicData=NULL;% P+ L* R- A4 i- r! B. ?; H
PrepareData(IQQData,&DynamicData);8 x$ i+ y7 j4 Z) j1 f1 R
if (NULL==DynamicData) return dwRet;
" x7 q2 B4 V% }% ]" [4 u0 H dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14
, Q2 j7 I! ^; U" b2 U# G if (dwRet) return dwRet;$ M6 ~$ _ ]/ {2 |( `5 r
dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);& d4 I# ?% n4 P: z$ C$ ?
if (dwRet) return dwRet;
/ V5 n* n* B+ b+ J9 N9 j1 L0 N dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);
2 `3 A5 p2 \5 \# q! r return dwRet;
" b# Z$ m) `" y- R; t}
" b8 J+ ]" a1 E* G" h0 o, n: F: S" ]) W" q0 U0 p
static const LPSTR szwProcotol = "wProcotol";
( ]+ v3 Q( I& x7 c( [) fDWORD GetVer(DWORD Uin)
/ Y* Q A6 ?% H; \0 L4 M# d5 e{
3 U; } t% ]+ ?0 j+ w DWORD dwRet=0;: {9 r" J8 M1 [) U& B
LPVOID IQQData=NULL;3 R9 H5 A. x2 k9 C
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
" \: P7 f) O. v( ] LPVOID DynamicData=NULL;
4 e% d& |6 ^/ \6 t3 @3 E PrepareData(IQQData,&DynamicData);
9 S1 }5 `% p7 c ?; B if (NULL==DynamicData) return dwRet;
1 n/ r) m. o; q8 e8 i, Y6 c dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);' p8 |( a, m* V- p
return dwRet;
, A, K2 `3 U! _9 ?}
8 \+ B5 F1 l m! S! R
1 j& m# Q% P0 _9 f+ T: b8 u8 `原文出处:http://www.ye-soft.net/article.asp?id=43 |
|