找回密码
 注册
搜索
查看: 6652|回复: 0

QQ IP显示的关键代码

[复制链接]
发表于 2007-10-12 14:06:56 | 显示全部楼层 |阅读模式
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.+ q6 W3 n- k6 `- z; U) s
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.6 \# D( Z: a8 g# T; b2 t$ c

7 r  R) D1 S  m5 a0 Rstatic const DWORD UnknownSig=0x1E3A86BA;4 e$ y8 M" B) F" b' Z1 V- }$ A$ P( x
static const LPSTR  szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";' L$ J# f- D5 N% Z5 W
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);
& R3 M8 z6 c( V% {8 JVOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
; p% ~! T# W' r8 C& c2 t  T% {% i{
" C3 @/ F% V+ H. m* L: d! ~5 [    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);# t5 H7 W) y; q& U7 b& I  S& A( q$ z
    PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);
* v3 _# b* |4 n( p7 l- k: ~$ ?6 K}8 p  R2 n8 w  K% i" Z

! x3 V9 A+ v& m& uDWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)
$ g- s) \7 w: ^- C3 t. S: F$ t{6 I9 m( ]- v1 m1 M" k& \" M* V
    DWORD dwRet=0;& r4 V" J3 y9 `" G4 r0 D; h
    __asm
5 {" ]7 `4 ^4 h6 J    {
: k. n* P7 E; A        lea eax,dwRet
& A0 f/ {1 s& q7 h& |! d; ]" d8 o: O" m        push eax
" T8 E- z5 C/ z" a0 e  w- Y% L) C        push szCmd
3 O/ e; E  [9 U0 W8 n        mov eax, DynamicData
; ~; s$ Z0 H/ z3 z  V        push eax
1 X* P3 W& ?9 A, T7 K        mov ecx,[eax]. X) g9 F& Z$ b) ~7 R. @
        mov eax,ecx
! d* X* x3 g9 [" H2 F        add eax,iOffset4 f4 ^. p2 g# x% v4 ^! m+ Y6 P
        call [eax]! b. X: W' h3 q
    }
3 M- C; w( m1 ^0 ~8 }    return dwRet;. O) Q. O8 ^( L: y
}
3 d8 @- p" Q$ y+ o2 l
, S; X: L) f% r# D# I  Gstatic const LPSTR  szdwRecentIP="dwRecentIP";
" o+ `5 Q# P: g' _, }  Bstatic const LPSTR  szdwIP="dwIP";
+ |  R: \- E* E% [: Y7 u# Ustatic const LPSTR  szdwC2CIP="dwC2CIP";
2 S0 R0 j+ M5 r& t* g% ZDWORD GetIP(DWORD Uin)3 e- d7 [; m7 ^7 R" U
{
: `9 \7 j; V8 U3 y1 P+ ^2 U& r  x    DWORD dwRet=0;
6 h5 M0 U4 f$ P) x9 O    LPVOID IQQData=NULL;
" J) r, z* r8 G, c0 @2 b    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;9 V( x/ A# o; Y; w# D& h# e2 u
    LPVOID DynamicData=NULL;2 T, A5 w6 U5 `  o3 R
    PrepareData(IQQData,&DynamicData);( I9 E5 J4 a7 e
    if (NULL==DynamicData) return dwRet;9 I  t1 ~+ \2 s( O7 n' p* h
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
! s1 o) r' `8 U- z2 L5 |    if (dwRet) return dwRet;
, H4 t( w( A, o' t0 B: U" f! @    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
0 Y7 U( |  U/ G9 ^4 ~    if (dwRet) return dwRet;
% V( A% b9 g6 I+ Z    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);
: P; t9 g  l  K    return dwRet;
1 D/ a: G5 s2 g0 @7 j" i* i4 C}" S; ?; D7 e; b* q. m6 |. z+ N( q
' T3 Q* x6 [) F8 _' t1 a- E/ ?7 q
static const LPSTR  szwRecentPort="wRecentPort";
% X/ r) n5 k% u5 \/ fstatic const LPSTR  szwPort= "wPort";! O2 y/ \! n7 S8 t% A3 j
static const LPSTR  szwC2CPort= "wC2CPort";- j# r4 L3 B2 G
DWORD GetPort(DWORD Uin)
8 A* _1 k& T" S{. m0 z8 u" K& _: l  v( x/ q4 C8 U
    DWORD dwRet=0;/ U5 ~- v6 G; w, ]
    LPVOID IQQData=NULL;
* t0 `9 y  N6 Q- d: A    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
9 r- b& j* H2 k1 j    LPVOID DynamicData=NULL;
: e# A; }4 I( j; j5 h    PrepareData(IQQData,&DynamicData);+ W! a: I$ n- w/ }% e2 g. ]
    if (NULL==DynamicData) return dwRet;
$ I. `' r# H& S* L5 k6 `0 g+ a2 V    dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14
: ?( a! Y9 E2 ~5 T% [8 H    if (dwRet) return dwRet;
5 g  m) r% h$ s5 [6 X" t9 V    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);& i+ c2 s6 P4 W0 J
    if (dwRet) return dwRet;3 z( ~, D  W; b, t7 F7 L6 V2 P
    dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);4 ~$ Y" m: y+ S; S# O
    return dwRet;4 w+ d' ~& l; [- U# B
}! G2 @% U0 p7 Q* B% S

' x# _3 i1 m7 g) ^static const LPSTR  szwProcotol = "wProcotol";
4 I3 `8 B5 `( x& }( \; wDWORD GetVer(DWORD Uin)
, ^: S( Z* J0 p7 K{
' C( Z5 b4 H. ]1 g8 p. Y    DWORD dwRet=0;
" m6 E/ ?6 q2 T. \2 F/ q) t    LPVOID IQQData=NULL;) J, O: p# Z( O) b) l# z
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
/ m+ Y4 V( E( M$ @    LPVOID DynamicData=NULL;
9 j0 [$ U8 `5 q6 `2 Q    PrepareData(IQQData,&DynamicData);
% N) i9 r4 i, o! O    if (NULL==DynamicData) return dwRet;6 N) j& m4 D+ b7 M7 `0 _
    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
. X, }5 F7 p! p; F7 w    return dwRet;/ S- V. ?+ l' Y  _1 I2 e9 q. L
}' K; _3 o1 z* T9 J) f# n+ w3 u
) z7 o$ ^4 O! p
原文出处:http://www.ye-soft.net/article.asp?id=43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|宁德市腾云网络科技有限公司 ( 闽ICP备2022007940号-5|闽公网安备 35092202000206号 )

GMT+8, 2026-6-19 19:15 , Processed in 0.021489 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表