|
|
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.
1 H$ ^3 Y' h& i8 ^/ D% f5 xrunjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.9 L4 ^- M6 b0 F0 L+ g G8 [
7 ^- F9 Z, Q0 @* F) W; |, P, wstatic const DWORD UnknownSig=0x1E3A86BA;! K0 @+ P* d& U8 f0 _% B% {$ u
static const LPSTR szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";. U( ]4 o9 i: w& O. u
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);
3 N1 }) Y+ N/ O# C7 P# I2 W- UVOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)4 K$ o$ P: e% A" V5 C5 ?
{
% o% j" S* B" R pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);& U) {# C( h1 c }- c0 v( i
PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);6 c. e ~ k8 v& C
}
/ A! X# T6 I$ A, W2 T" a9 {9 m. D/ u
) d: {1 u2 u( ]4 f, i5 t2 |6 b" nDWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)8 n" ~1 M- V' y
{
$ W q. x2 X2 \ b8 M% |3 z J DWORD dwRet=0;
5 I- v8 r3 }4 V3 z* P, z2 p __asm
( \' p* v8 B# n5 p& ~- x {
" C8 e+ E# v) } lea eax,dwRet5 V& g" p4 V6 g- F" E9 q: y( Q
push eax7 _) ^6 m# y7 p2 j
push szCmd. t$ {( `7 ` ^+ D
mov eax, DynamicData
# S l& R3 F% c: y h push eax0 I% @6 n% a' {+ N6 j
mov ecx,[eax]6 J4 `/ A( Y a3 Y7 A) B; x+ L
mov eax,ecx
& I0 Y/ {3 ]$ e6 O* o' z& V" A# F6 { add eax,iOffset
" u. z1 r2 c" x: e! V" q call [eax]* Z$ X' K( A1 |/ w5 _% k
}
" h: r/ Y7 l' q6 K/ Y6 K, e, f return dwRet;
1 @9 I' q) Q6 o6 H}
2 p! S% m' Q9 z4 y" T% T1 n2 O" d0 O$ }6 K5 f) y
static const LPSTR szdwRecentIP="dwRecentIP";* q0 I9 _3 b1 V3 T
static const LPSTR szdwIP="dwIP";/ l: t# s j/ }# L3 L4 _1 V
static const LPSTR szdwC2CIP="dwC2CIP";6 l+ @4 D- z6 Z8 }
DWORD GetIP(DWORD Uin)
" ^; x' [' `: y{
4 P$ i+ I" X# Z8 l DWORD dwRet=0;
% D/ W3 {$ U4 u LPVOID IQQData=NULL;8 H* }* S# S! a' C6 V
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
" r4 G# ^7 }3 U6 ]: v+ l5 q; q4 O% D LPVOID DynamicData=NULL;& ~7 y0 g0 c3 e
PrepareData(IQQData,&DynamicData);# ^# W0 |: l* [& K9 W. `/ I
if (NULL==DynamicData) return dwRet;
! f H) K* S2 T; m! \8 V( ?" I d dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
7 M! p' F) _; o8 R if (dwRet) return dwRet;- P0 p4 o$ \# s) P; F7 ?" ^
dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
4 x4 c! L& f8 ` W/ }& E. t. [ if (dwRet) return dwRet;
9 \9 t0 Q6 J5 @9 P: ~9 Y" W dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);6 @6 Z# ] X- h/ ~4 K6 k: X: i
return dwRet;
$ F9 R- Z8 z7 P- y* H* _5 F0 J}
$ U$ ^4 y. x7 j5 I1 s% ]+ \- V' E0 \5 i. ?$ y" O) [: i( ^
static const LPSTR szwRecentPort="wRecentPort";+ O6 E4 I. w; Y. R* J$ p/ W
static const LPSTR szwPort= "wPort";1 p/ Z1 b8 r. m% c, Y6 u
static const LPSTR szwC2CPort= "wC2CPort";
6 y+ P$ ~8 s5 n1 a- t! KDWORD GetPort(DWORD Uin)
+ k; y4 P e5 q{
, x, @6 x: X* p% O6 `/ y+ b, K DWORD dwRet=0;3 l9 ?8 n k; S- {- [
LPVOID IQQData=NULL;" _$ V7 h/ H; {+ n
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
) F8 W% f+ [- d0 `+ e0 [ LPVOID DynamicData=NULL;2 R8 Z! h- F: o0 m) e5 G
PrepareData(IQQData,&DynamicData);0 O% d: y5 @# Z( V# D5 T* D) a4 d$ {
if (NULL==DynamicData) return dwRet;6 v# F* S: f9 \1 P5 V$ J5 c" j! `3 d
dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14
! B& i( B0 E' r) V if (dwRet) return dwRet;( s2 g$ E) T* E( H0 {9 e
dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);) U- Y+ e6 O% d! {9 h
if (dwRet) return dwRet;
! b' T; K1 c1 q) q8 o& c$ _ dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);
2 e) E; G7 m+ A/ S return dwRet;
! p+ `7 ~9 ]8 B) S7 O0 h& w7 D. M}, E9 n# h8 f# Y) Z1 A0 ?
& c0 Q$ h( R1 r& Mstatic const LPSTR szwProcotol = "wProcotol";
3 w& r% i2 Q, n8 HDWORD GetVer(DWORD Uin)1 M. H- Q$ h i
{! p4 J$ n3 u' e- p5 E3 w- J" J
DWORD dwRet=0;
" {' E- V, C- P8 ~: L* G1 e LPVOID IQQData=NULL;3 g! A7 P, Y2 j% Z4 o2 V$ }9 `! \
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
; M- G, o6 B4 t3 b LPVOID DynamicData=NULL;
) }0 n' `+ H& o" F8 |; D, h) t& ~ PrepareData(IQQData,&DynamicData);. u' @0 r* T) T& e4 [( H9 k
if (NULL==DynamicData) return dwRet;, w5 k9 a* p& v3 b" i
dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);7 n3 ~, v+ E5 y `2 C$ `, X
return dwRet;# O: ^1 I' T X( R! L8 S* e5 ~
}
+ H" B7 |8 D$ G. X. \$ C" n, h% Y' W M7 o/ \- j6 P7 Z' t
原文出处:http://www.ye-soft.net/article.asp?id=43 |
|