|
|
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧., i" O _# j8 T0 A2 y
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.
6 C% U6 g9 z% }9 b" I. g
" L, p8 q! o$ \/ Estatic const DWORD UnknownSig=0x1E3A86BA;
! k! l! W! J1 tstatic const LPSTR szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";/ U/ j5 M, K9 r4 R
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);7 f+ n/ U/ J* u8 r1 e
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
& \ `- R7 X; _' [- @{
" [4 ?+ w& v9 o# ~ pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);; ^) B( p" g- y6 W- B
PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);
2 A% O8 ~! q1 S1 d/ k O}" S7 k2 `& `. |# u& f
% D" M0 \) P9 P" `0 t5 N* b: \DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)+ s5 g$ l7 ]9 P! g) P" c
{
, X$ D& p4 s) H% B( a DWORD dwRet=0;
. B; B7 g1 d& G __asm
2 M) S' l' L" K, c {
$ U$ X. G3 _ f3 D lea eax,dwRet2 i4 @0 j T$ G, r0 D- J+ f
push eax
( l0 w9 E& N y) o! G( P push szCmd
- q. R8 g4 \6 E- i. x* V& V. | mov eax, DynamicData
6 O" y3 u8 a! c push eax
5 h& u0 H) u$ M; k0 D mov ecx,[eax]: `6 F2 U$ i/ q
mov eax,ecx
- m$ Q3 y! _" L$ f; l) \ \& W add eax,iOffset
$ y# [( a( F" @7 R5 Z" Y call [eax]* e) T# b* m, C# B: O) |
}
* S, A- `/ h% v9 m4 f return dwRet;
& Y$ Q$ l* f1 I8 p: s1 q}
0 r3 Y ~9 S# u0 L8 g
! Z# V' X7 T2 \static const LPSTR szdwRecentIP="dwRecentIP";
9 s' G$ P8 u* i# u2 `; hstatic const LPSTR szdwIP="dwIP";# l- _1 d5 g- B [" |" N. |
static const LPSTR szdwC2CIP="dwC2CIP"; @! x6 z+ L9 \- I
DWORD GetIP(DWORD Uin)# @3 G/ s7 O! V! X! S/ K) Y/ q
{
& G% Q9 F/ K ^2 }- H DWORD dwRet=0;' b' k' b' l# f1 n
LPVOID IQQData=NULL;
1 W% m B0 H# } if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;- f# P* O. y' D- A3 E
LPVOID DynamicData=NULL;4 d3 d4 n% ?4 a8 N
PrepareData(IQQData,&DynamicData);
) n2 |% Y9 E# k; b7 H if (NULL==DynamicData) return dwRet;
" c5 W6 ?- o, a( T% I# R) P dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
! ^) ]3 h% I9 C; i/ A& P8 i t4 F if (dwRet) return dwRet;
: g: l, y U5 [% h dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);% \, [7 Q1 N5 C9 `9 Z
if (dwRet) return dwRet;
' ^) V# x% }+ L: Q) u5 d$ x7 [4 w dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);
0 j* D: w( X W0 q, W return dwRet;
" l- u0 e# w; e, ^" o}
( V& Q6 j! c; ]& ~) c [8 d2 T4 n$ ^6 ^/ p
static const LPSTR szwRecentPort="wRecentPort";& E; P) K' w7 Q% M
static const LPSTR szwPort= "wPort";
; x/ e. K' E6 {$ o5 H zstatic const LPSTR szwC2CPort= "wC2CPort";2 Z0 e: s" A2 W3 O0 J3 \
DWORD GetPort(DWORD Uin)+ V. N- P0 F$ r- }$ l$ l
{
* O5 A2 C l3 J: P. \* z# _: Z DWORD dwRet=0;2 \ u S5 ?1 ?* C$ r6 w _
LPVOID IQQData=NULL;
6 {8 g9 p( } T- j" T+ z* ? if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;! J' |3 i, m9 B# b2 X* j/ |' g9 l& l
LPVOID DynamicData=NULL;
7 [3 K* i ` Z0 U/ U PrepareData(IQQData,&DynamicData);$ T) l; f2 j z
if (NULL==DynamicData) return dwRet;
3 Z3 d: H& ]2 {( Y* F3 w& g dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14
2 |- Q: T9 v* x6 p; K9 U if (dwRet) return dwRet;
+ b. ^" K( { o; p1 g dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);
! r# h1 `/ z' J) G. [' n; V if (dwRet) return dwRet;$ ?( g" C. H/ w7 J; G" @$ B6 c3 ^; `
dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);6 |6 I' ]4 b/ }% {5 s! K
return dwRet;/ F8 g h! b; v9 b5 \9 ~ d
}
' b; B, w: Z4 ]5 G
: P* v$ }9 J+ q, y7 }( e S: k# qstatic const LPSTR szwProcotol = "wProcotol";
7 B+ N5 ]( M! V( c NDWORD GetVer(DWORD Uin)
: P- z- n9 o L; y9 e" v. [! l4 \{- u& i+ l3 X% @% D9 o- |4 T
DWORD dwRet=0;* h8 ^) O8 x8 y- F5 H# n: U
LPVOID IQQData=NULL;
/ E7 l3 x) s% [* u6 I, W( e if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
$ B* C" ?2 A6 H, p# }: z% \+ Q6 ^ LPVOID DynamicData=NULL;
: z: v) h" ?1 ~9 a6 e% H PrepareData(IQQData,&DynamicData);$ R3 _5 f+ P8 ]4 a
if (NULL==DynamicData) return dwRet;& i9 M: E- i8 ~ [
dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);+ T; @, C$ u4 ^! h- N4 b
return dwRet;6 |& j# U. _( i, R( g
}/ @1 k" C: I$ ]* b+ r8 \) M
# [2 \/ x: P2 s5 r* J- I+ R
原文出处:http://www.ye-soft.net/article.asp?id=43 |
|