|
|
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.
8 [! p s$ a- N* x* erunjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.
2 z( o$ X& J; z' @. B! z
+ ]" Z" b4 l/ P- l9 J' R kstatic const DWORD UnknownSig=0x1E3A86BA;/ C# R1 }5 o' g
static const LPSTR szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";1 A4 u0 \: ^$ C1 k
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);( h/ j$ s$ a2 T- ?0 x
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
6 }) D' V# d+ R9 P) I! u0 O{
: Q0 I8 @5 {8 D" B3 u, L# P pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);% U* E, t" }) E; _. A& G( h) z
PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);) h2 Q* ^8 g/ l! J5 P4 y3 a n8 w( n
}
9 s4 p b) k8 [' M. A; F- k! K. B5 c: q G0 |. D" q9 `
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)
- B. Z1 Z& A. V( |, o{1 L+ z+ m0 G6 p$ }5 ], v
DWORD dwRet=0;$ ^$ b0 Z) y* E3 p8 Y Q8 q/ I
__asm
) C! @0 {" n! K9 k: B' [% f {
% D$ `4 W/ i) w; z4 p% ^: M lea eax,dwRet
# V8 S5 c4 z$ i$ P" E, J3 M0 M push eax
' Y. E6 ^$ o# [! M push szCmd0 ?4 _0 }" w5 l ^1 l4 [
mov eax, DynamicData
8 r- A: u9 d$ ~$ ^6 t! n n push eax$ d) ~, r" u4 q- ?* `" G
mov ecx,[eax]
! E! d8 n1 g, C& \ mov eax,ecx
$ V2 {) Q; w/ e0 D' C5 g! V add eax,iOffset- t! s5 E9 i: o9 O4 y1 v$ x# x* x
call [eax]% B4 }4 S" G0 u4 B
}
4 J I, T# ]; u return dwRet;
( S: u3 ?5 p4 f% u}3 n. v# s9 P I; T
+ s( R5 }. {7 Rstatic const LPSTR szdwRecentIP="dwRecentIP";
8 K! ^1 O# H5 f4 i2 r; l1 O5 kstatic const LPSTR szdwIP="dwIP";
) p; h) [3 o4 P; O% Dstatic const LPSTR szdwC2CIP="dwC2CIP";' v) H# y, u! l. z7 Y( f
DWORD GetIP(DWORD Uin)
# z% c- K0 B3 L{
7 b" H2 L: p% P w" O" G DWORD dwRet=0;
4 ]* l! R( @2 t; r) A. b LPVOID IQQData=NULL;+ ^7 r/ d% k+ x
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;' i) l- q" M' X' }
LPVOID DynamicData=NULL;- [- e9 d: C' Z- v7 ]0 C' d
PrepareData(IQQData,&DynamicData);$ P% Q) t# g5 q: I
if (NULL==DynamicData) return dwRet;
/ Y; Z6 h o. `. o dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
. q3 K5 ?' ^6 G( P4 f if (dwRet) return dwRet;* A. [& [. k8 n/ G( I
dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);9 d f; Q3 g5 S
if (dwRet) return dwRet;; B& G4 o$ A# Q
dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);
1 v7 M; s' v: I# a4 C return dwRet;
. z; v8 p% P" B$ ~4 I}
) r* `3 l2 L# k) [$ N. e
- r: I: F3 E3 Q: M* P* i" ]static const LPSTR szwRecentPort="wRecentPort";
/ y! j8 w/ L9 [1 @; f( `4 w! B- Istatic const LPSTR szwPort= "wPort";
+ ^& p! F6 a' V5 F$ }8 j8 Y6 H! m2 Ystatic const LPSTR szwC2CPort= "wC2CPort";% {4 W3 E8 B/ v( ] p% J( o; F% @
DWORD GetPort(DWORD Uin)
6 Z* X) ~( r( S8 N; R& j O{9 z) M+ @' m3 g) Q' h# Q
DWORD dwRet=0;
8 i k g% G7 n) u+ X; O0 U& V LPVOID IQQData=NULL;
% u/ I6 i4 u/ f- U2 {/ V$ y if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;& S+ {) x5 w5 |" D
LPVOID DynamicData=NULL;! H: x5 m: {' }
PrepareData(IQQData,&DynamicData);* ? X' g$ ?4 z+ @9 t, _6 q$ }
if (NULL==DynamicData) return dwRet;/ L+ F* j! H% R, b3 N0 m4 V
dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14
0 l. @$ e% e/ j+ N if (dwRet) return dwRet;
0 F6 G1 M4 p; H% L1 a) M dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);+ U2 I; @8 @/ u {
if (dwRet) return dwRet;
, ~# N5 X- h. j, x dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);
. |' _5 t% ]7 O. l' R; w return dwRet;
8 I5 N: k! p. v. P( m3 \( I K; M) X M}
( C, b c* K9 o' ?* q* U2 a& |1 o( ]6 ?/ A4 y v1 J' ?& {& C6 `8 X# E, G2 X
static const LPSTR szwProcotol = "wProcotol";
( E: o, C; N4 c [; d( ODWORD GetVer(DWORD Uin)+ n" _1 T0 h, w
{
2 d0 T& n2 _, F9 u DWORD dwRet=0;+ O) M! L' \3 Z. j' r* U. x* I
LPVOID IQQData=NULL;
. J$ D4 t! H8 ] if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
/ p5 M( J% q. V LPVOID DynamicData=NULL;" G L6 `- x9 I" X
PrepareData(IQQData,&DynamicData);
$ R; Q& _* Y- c1 i4 A+ G if (NULL==DynamicData) return dwRet;
! W1 o2 F: R! e6 Y9 D/ ^ dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
4 b( F9 T1 }& p" F/ R return dwRet;2 w8 M# k, s( [" S& l
}7 c0 I* z f5 }+ M5 f
" `( v& ^9 u$ p6 {& _/ g7 p原文出处:http://www.ye-soft.net/article.asp?id=43 |
|