|
|
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.
5 p& k; O, [( a8 Z) U( Rrunjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.- Y+ a6 _7 n8 t" X' M
1 [( W( y- Q, m9 _1 tstatic const DWORD UnknownSig=0x1E3A86BA;8 C6 U5 H8 S9 y* @0 f0 k$ \$ y
static const LPSTR szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";
) j. Y y: \ b7 M% L1 Jtypedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);; f1 |/ I& H4 G2 a9 I" }9 m, {
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
" ]/ l- d* @6 |5 z: K{5 k' k0 q1 C( x/ E
pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);* s4 h) @: M# A& i! x$ z
PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);4 C4 K! _9 _. M6 O* S
}9 m4 ^" ~5 a# N# G7 [
; Q: F7 l8 Y+ P6 ]* b4 t; H' r! L( gDWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)( X/ M9 ^2 p6 Y0 F) O; w
{% h. I6 | c* _( L9 I [
DWORD dwRet=0;, u N4 S9 U$ d: P
__asm
5 K1 V# O4 R! p1 k) U3 y {1 Q% n2 Z7 k6 `+ M/ y" G" f
lea eax,dwRet0 l8 f. v w2 N4 R6 H$ }+ D: y# R
push eax
1 b: K) Y H% {: T( ~ push szCmd
- m& _- u0 ?. o/ @) R. ~6 r0 J mov eax, DynamicData( k& P/ Z3 p. `% c6 H
push eax
/ ]: c. U+ j; ~" u8 w3 f mov ecx,[eax]$ ~) V# y% n* c4 w# [# \3 ^: P
mov eax,ecx) Z3 ^6 A. @) H) {8 q* K
add eax,iOffset
9 r6 N5 x/ m+ O) ?# M3 z* E% a% c- e call [eax]8 X+ |8 w( Q" B& k! d! t
}
1 J- [% v# i% P9 W! U return dwRet;
- l$ h6 v* p2 N$ v0 I8 G' V, w% l}
- {& ~7 B8 e2 D3 Q
+ h9 }& G2 l, x6 Sstatic const LPSTR szdwRecentIP="dwRecentIP";
0 q9 _5 z' c8 ~6 r6 @static const LPSTR szdwIP="dwIP";) \9 v |- K5 m( _! I
static const LPSTR szdwC2CIP="dwC2CIP";( S2 }! V" C( y6 @( K0 C: s
DWORD GetIP(DWORD Uin)
1 Z* h; R, c7 m& h2 ]! x{
( k9 s) d4 G; C# }, |* r2 C DWORD dwRet=0;. @" ?; y" {8 R# U& b+ [( Y2 ^
LPVOID IQQData=NULL;! v9 _7 P7 O# [
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
! K3 j0 X1 ?) D! _$ e1 g f LPVOID DynamicData=NULL;
O, P) {3 X! c H9 ` PrepareData(IQQData,&DynamicData);
O4 w: [% h0 f2 q8 T, z if (NULL==DynamicData) return dwRet;. Y0 q, i; \: N
dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18; Q; E A' f( t; m9 o6 G
if (dwRet) return dwRet;) V8 b5 f2 i& ^
dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);& u/ J* o7 m7 l/ V, X" G
if (dwRet) return dwRet;
/ k0 ~% _) s6 W! f dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);. L) e: H D: a. [. k+ h4 {
return dwRet;: y6 g* c1 k D2 X
}
9 X% a" F F( \7 D( t( n$ D9 x |# n6 Y6 y5 a' c. J& q
static const LPSTR szwRecentPort="wRecentPort";
6 S: X) [' a9 e. l4 pstatic const LPSTR szwPort= "wPort";
; b+ \0 n4 s( I- i' b8 Ustatic const LPSTR szwC2CPort= "wC2CPort";
! `) N% Y% I+ r, o" d' Z+ A3 r2 K5 dDWORD GetPort(DWORD Uin)
0 p8 ~' o' z# N' [2 v9 p, C{
$ B$ p: W+ i- q. `/ F- G' v DWORD dwRet=0;, I( m/ z, f6 `4 ?$ Q7 q q# M
LPVOID IQQData=NULL; `) I/ o5 A: u1 {
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;2 A. r- |9 @. s* t1 H: G. S2 G
LPVOID DynamicData=NULL;$ ^1 s8 | ?0 E
PrepareData(IQQData,&DynamicData);- ]- J4 B4 M- l
if (NULL==DynamicData) return dwRet;
) ^0 _5 z! j4 L; i {* ~4 u dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14
' p1 H5 z. `- g) k. y, k0 u if (dwRet) return dwRet;
5 b7 B. D$ F: K# I( F5 I dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);
7 S. ?# h8 S. l3 K' F% D if (dwRet) return dwRet;
k$ f7 v6 L% l+ G2 i dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);; N8 K+ x; B+ L
return dwRet;
) a3 e0 e" d, t% F0 {}
+ [1 A- q; v" U0 h% |* [8 t! F1 J0 h; A2 t8 D4 ?" V
static const LPSTR szwProcotol = "wProcotol";
/ L; q4 Z: {0 B+ qDWORD GetVer(DWORD Uin)
+ d0 L3 v4 }- a+ u/ i. c7 {- }{
: m8 Q% M. V" o0 D/ @3 w9 g7 o! g5 S DWORD dwRet=0;' P* h6 u$ q1 T+ ]0 H) ?6 y
LPVOID IQQData=NULL;& f6 v! B! r6 ?6 Y: G' W$ U
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;, Q6 z( x$ L- U% ~2 b1 m6 x
LPVOID DynamicData=NULL;, |, D# z6 ]; I) W) Q( h7 M# Q& f
PrepareData(IQQData,&DynamicData);9 ~9 c, ]& s: l; I. o& x
if (NULL==DynamicData) return dwRet;! B8 n+ I6 w3 K) P
dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
& B2 u, K( c0 y/ j- J: @, k return dwRet;
/ H, s6 r* O/ {8 O}9 R) y1 n: {! L/ ?
5 l1 ?2 ^: W/ ^; g' l$ c- f: Z- d
原文出处:http://www.ye-soft.net/article.asp?id=43 |
|