|
|
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.
: c* u/ U; q- Orunjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.
$ q$ {( o i; q& E
6 j$ ~* M A+ }! B6 z* cstatic const DWORD UnknownSig=0x1E3A86BA;
1 O: z- \, K7 s1 [) ~6 d+ Sstatic const LPSTR szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";
+ u4 Z9 }! Y$ C5 dtypedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);" V+ c, j9 [) x. B( R0 M; ]: d
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
i5 |; }$ y j8 Q: z, w( ]{ h; s. J! A) s+ f
pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);
1 s2 h6 X- N) J9 I, H PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);
- {5 k8 D6 S# D4 l* v}" w; I! [4 V/ _2 D. w
* n. M' u& K5 R) W
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)5 C5 G A9 a* r- o2 l
{) m9 M& S# P4 N
DWORD dwRet=0;
1 ~2 z1 `! {7 F9 s: b __asm
5 D, A6 o" X# j7 S1 ?( r4 e( X {4 `& z! _" B* j; X
lea eax,dwRet* H* z4 P: h; c) p
push eax
% i3 k6 ]5 X+ W6 O! c1 V push szCmd9 D" W8 R9 A. Y- m3 ^/ t% P0 l
mov eax, DynamicData
* C W( q' a4 @8 E* N. h6 Y" |/ U5 N push eax
) P% |3 A1 v2 ]' m, f/ l mov ecx,[eax]& {+ {# b9 d8 Q$ u; T3 p
mov eax,ecx
8 [3 }0 x" l, V$ N# w M add eax,iOffset
9 @& x% T E" u call [eax]4 F8 [/ T1 o: o3 m" o+ p' _+ Q1 w
}4 R$ o& W, |6 r& q+ A
return dwRet;1 K2 U' N& b* z# ^+ S& l5 p
}$ a+ {3 `# f+ J0 A$ g& @) x& _8 w7 |& x
; g0 G; T8 U) ^2 C7 j' j
static const LPSTR szdwRecentIP="dwRecentIP";
1 x: d3 {2 { G! zstatic const LPSTR szdwIP="dwIP";* }2 o9 g' [3 }( ~3 V4 ]9 ~, X3 m
static const LPSTR szdwC2CIP="dwC2CIP";
( d* U2 q+ U1 e& D! LDWORD GetIP(DWORD Uin)% R0 M7 V1 Q4 @8 t8 j& @
{9 s$ }* d. D V/ E/ M
DWORD dwRet=0;
( R6 J5 c& W$ V* U" V# {& [+ E LPVOID IQQData=NULL;
$ a( R; ` u% x* ?3 I if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;6 @) [$ P j2 @
LPVOID DynamicData=NULL;0 \8 T+ `' ^% |& D/ u8 k# u5 H
PrepareData(IQQData,&DynamicData);
7 v4 D0 d- ]6 {& Z if (NULL==DynamicData) return dwRet;
3 _+ q. {2 b; E0 T4 m dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18/ g+ x% A% U% r
if (dwRet) return dwRet;
. n) K- @8 c. i! J$ { dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);2 z% N# `* W# s
if (dwRet) return dwRet;* v2 m: N5 a- X0 k
dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);2 r ]8 D8 ?. b$ ~
return dwRet;
% K) ]. C M& \: ]0 P) P. A X}
: B; ?1 a1 X& H& V7 W6 H! g) L# R9 p3 E K+ W3 N) i
static const LPSTR szwRecentPort="wRecentPort";/ i! n+ S' F# o s. i
static const LPSTR szwPort= "wPort";
' v7 p; Q( W" Cstatic const LPSTR szwC2CPort= "wC2CPort";4 x/ S/ U. R4 N+ w( l5 K
DWORD GetPort(DWORD Uin)
6 ~, q i! [) K4 ?; Z{
5 N o4 ~. B. a# K: j DWORD dwRet=0;
3 \9 H1 u- N; ]( Z. ^0 U* `# w9 j LPVOID IQQData=NULL;4 w7 \4 D0 P9 A+ z* u I$ ?- t
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;+ A( o' J+ Z/ k8 A6 f+ d
LPVOID DynamicData=NULL;( r, p }" [- _0 P3 O* S) G; F
PrepareData(IQQData,&DynamicData);4 R+ C1 w* a7 o6 f* w8 `. `
if (NULL==DynamicData) return dwRet;
: A" I2 p. |6 M- K! h dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+146 o% u/ ]- ]3 V6 E' W
if (dwRet) return dwRet;1 y4 A* k' ^% o0 ?1 p) t" Z' c
dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);- g" a) C$ w% x8 e' a8 w6 \* A. ?
if (dwRet) return dwRet;% l }2 f+ u6 e7 K: }
dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);) c0 v- W, _: a5 }: k
return dwRet;
2 @: y Q7 k f2 p0 i( n$ c}
9 _- n1 f W2 Q* \( e- Q% m
0 c: W; C$ H: N6 fstatic const LPSTR szwProcotol = "wProcotol";
( ?% v9 e& b8 o. r. H1 y$ b7 d0 |DWORD GetVer(DWORD Uin)0 n- n/ J( s# u- @ d i; c6 u
{
2 v/ d }( y3 x( Q4 ^ DWORD dwRet=0;8 X5 L' ^- X. ~% l3 L
LPVOID IQQData=NULL;9 _3 G+ |2 m* }1 o: j$ ]
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
2 p) H4 X; u6 E) ? LPVOID DynamicData=NULL;
* m* D' k, h, M0 r7 _* j2 c# y PrepareData(IQQData,&DynamicData);
3 J! K- D0 O6 c- [ if (NULL==DynamicData) return dwRet;. v0 X3 U+ w, U; [3 s* t
dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
3 o1 N! q; B; o- Z return dwRet;5 y2 o+ j3 _% Y& N; Y
}
2 N# L8 \ C/ R; ]% A3 _
" E' i0 V9 F# _7 i原文出处:http://www.ye-soft.net/article.asp?id=43 |
|