|
|
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.7 x& R4 y- q6 ~( M6 v
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.
% `. F5 \+ j; k
: h) |/ j( s) h4 R+ J/ H& f8 T5 b vstatic const DWORD UnknownSig=0x1E3A86BA;8 \% Q8 D8 v6 Z7 h/ g7 ?& i
static const LPSTR szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";2 M0 }7 R: n4 S" H
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);
& K- V8 q4 @2 u8 `* JVOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
$ t- p! |/ o( Z. x& z3 Q$ @7 N, d{) o( O, z; C7 {0 g
pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);
9 [0 V, R3 R3 N$ G0 ~; W5 n3 ~# z PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);2 f" F8 t3 a% |2 X2 p
}' |' K/ |, \ G& J* n
; N$ `" M- k# e! y1 k
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)
( V0 C. H, y1 j5 \( t; ^. H. ]{
! u- c# W* Q4 ^/ C0 B DWORD dwRet=0;
1 @4 ?, x, ?) J6 }. | __asm. `* o0 @/ H3 |8 ] D4 T9 Y
{) N: [ z% _6 t- W0 ~
lea eax,dwRet1 q7 w" M, a X% B8 s9 X
push eax {" b, [! H* w, a
push szCmd1 J* V8 l# P2 T9 x+ a: E3 G
mov eax, DynamicData
3 X. A# j- J2 C8 F* h- O6 N; C' U push eax
1 Y! z5 M, R* }/ A) m( t3 Z. C mov ecx,[eax]: s+ H5 J# F% U" D( o! y
mov eax,ecx8 P0 }; F; {' O1 Y
add eax,iOffset; \+ Z- Q4 V' @9 `* q- m) a
call [eax]
: q( W' n6 r) V. s$ v, K' t$ I }8 ]7 G/ K `8 P7 C: G: ~
return dwRet;
" F; M3 \/ d/ w}0 L' q3 z6 i) ^4 R( e2 x+ v) v C) j
- c% s; D6 t- N- s
static const LPSTR szdwRecentIP="dwRecentIP";
2 i: s& G* Q2 u1 _static const LPSTR szdwIP="dwIP";5 @# i; v6 Y E4 J H, S; t
static const LPSTR szdwC2CIP="dwC2CIP";: F, \5 }. J7 O4 G& W- l5 e9 m
DWORD GetIP(DWORD Uin)
. }& T1 H5 B7 k T v: U5 @/ w{
$ J# t6 C4 J; T% C DWORD dwRet=0;! T( g& `8 n$ p( W) `& E
LPVOID IQQData=NULL;" x4 ~1 O2 c% d0 M7 Q2 f
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
/ H! i4 |$ R3 g8 o6 K: a LPVOID DynamicData=NULL;6 M8 M4 a: w7 `: v7 |( P# \
PrepareData(IQQData,&DynamicData);
. F: O7 f, f; l) V& H. L if (NULL==DynamicData) return dwRet;
; t0 H1 _9 M7 o dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
f" d, m) Z n5 _) @% Q; c4 @$ M if (dwRet) return dwRet;
; b! J( n# k" w. h. s. _# ~ dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
6 M; t- T7 M$ C6 L- n1 D if (dwRet) return dwRet;
% r. W4 |# U1 B3 Q) Z dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);
( v* R* Y9 @+ ^: {$ U return dwRet;
( q4 \6 t8 u- w/ v}/ l B; s" L( ]( H" x9 ~5 c+ c( z+ R
! B& J" v- @& l2 n6 O
static const LPSTR szwRecentPort="wRecentPort";2 \8 k" U) R) x' U" u
static const LPSTR szwPort= "wPort";
2 ^. D5 k3 f {1 y. J4 sstatic const LPSTR szwC2CPort= "wC2CPort";! L2 n. I% i3 C$ k# G
DWORD GetPort(DWORD Uin). S; K0 B( l) A7 U3 W! C
{6 Q& E# B, t1 i: c* V
DWORD dwRet=0;
5 R2 z& D, P# a( L: f9 ^ LPVOID IQQData=NULL;
; e2 n& v6 r' X* Y6 s2 y5 O if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
8 a0 Z: b' w- v5 L& M* `5 D$ r) Q LPVOID DynamicData=NULL;$ R% H! m6 C/ f3 ^4 t5 g8 n" J8 } \
PrepareData(IQQData,&DynamicData);
9 s8 j4 H, d; K6 ~. o if (NULL==DynamicData) return dwRet;& D; r) n* p2 `) r7 X$ u
dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14
]8 ]% @; |7 {+ e6 @& |0 ~# ~4 b if (dwRet) return dwRet;' _# S: P3 v8 |# {
dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);
P; w/ f' ]& U6 f if (dwRet) return dwRet;
4 K' {2 @! D( C9 Y2 K6 Q dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);% B; {% v7 T! M% `- ?
return dwRet;
$ O8 M2 [( }& ^! [0 P, O/ q}8 X) ~) b( E2 J
9 H6 q! d6 v3 j7 p9 t6 l2 K, ]static const LPSTR szwProcotol = "wProcotol";
2 O2 m, k) q- _/ q/ bDWORD GetVer(DWORD Uin)2 k$ E! X0 X$ @
{/ [% P3 X) u7 a/ ^0 N
DWORD dwRet=0;
7 Z0 ~: q$ u4 H. R% L. k$ b LPVOID IQQData=NULL;
* E0 b5 n9 J! a6 j if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;( S1 r( f& s6 ?, d: \; N' m& C
LPVOID DynamicData=NULL;0 t" x4 w# O& r2 J/ G
PrepareData(IQQData,&DynamicData);7 U8 R0 i @2 h9 T
if (NULL==DynamicData) return dwRet;: f5 ]/ h! p+ `2 z2 q$ }# w' N
dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);# Q* O. v, V0 t- x1 N
return dwRet;. s: U' n/ b% E' K* Q- |$ p. c6 G
}
9 R( B4 ^" k, x% L( f( A5 U: V2 t6 k6 Q* a
原文出处:http://www.ye-soft.net/article.asp?id=43 |
|