找回密码
 注册
查看: 6769|回复: 0

QQ IP显示的关键代码

[复制链接]
发表于 2007-10-12 14:06:56 | 显示全部楼层 |阅读模式
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.! t0 }8 |' O, y( M
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.
, g/ ^8 y/ N, |" k6 A+ e' a+ W
! Z' H( G% `0 c, a" ystatic const DWORD UnknownSig=0x1E3A86BA;8 o; o+ c. H5 {; {. c0 y
static const LPSTR  szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";- q2 F+ D9 T6 g. f+ F+ A0 t
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);" H- l) G, d9 R
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)- D8 }3 ]+ Q/ p! p  E" k/ ]
{$ q7 Z1 m, D7 c  U& t
    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);/ ^8 G4 h# \/ q. j% V
    PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);
* O- M& }( J* u}; H. C6 n( }; V8 ^) U

. u; U7 R# t( ~1 I; DDWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)9 }. W' [7 o1 |& n0 w
{( |' g2 Q$ g7 Z) W
    DWORD dwRet=0;
' N+ Y" E& M0 `0 ^) j    __asm
) O# x+ B3 ?0 @4 A+ p/ G    {
) |' h+ r8 K9 {$ s7 |        lea eax,dwRet% D! T" k: N& E
        push eax" B+ ~7 i2 _6 ?
        push szCmd
0 _5 A5 Y8 Z, P& {' E        mov eax, DynamicData; K9 G9 ?' E3 J% O
        push eax4 G( K7 _- ~2 X4 \' S$ {& E( u6 v
        mov ecx,[eax]
4 q3 ~) q  G+ J' Q4 F1 w5 y& W+ f0 @        mov eax,ecx: `$ R' U- z9 n& ?# H, a' N0 z  b
        add eax,iOffset
% R9 @6 Q# K! ~! u' f" T( S- e3 I        call [eax], }5 W, l! f$ _/ U
    }) D$ \" `& c  s* L2 Q( M
    return dwRet;3 g6 `5 s+ v& P
}, S+ o# p4 ?# x" F

, o. |1 F* C) E# \5 Rstatic const LPSTR  szdwRecentIP="dwRecentIP";* A4 f" {! }" y! G# g; x9 t" Y
static const LPSTR  szdwIP="dwIP";$ g1 I9 ~4 b" {/ X8 s, P
static const LPSTR  szdwC2CIP="dwC2CIP";! p6 g( ^; d  F+ g9 ]8 ~( t
DWORD GetIP(DWORD Uin)% @; _  [( y7 m" }- S" H9 h8 O
{
( [5 x$ m* F- F    DWORD dwRet=0;
0 x' H8 j0 J! Y    LPVOID IQQData=NULL;1 z  i; n, m4 m8 Z9 z
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
; r& r1 g9 }* {/ W9 Y    LPVOID DynamicData=NULL;
; ]7 c& n1 B# A$ m$ M    PrepareData(IQQData,&DynamicData);1 I2 P& z5 V# J/ D1 N3 i; U
    if (NULL==DynamicData) return dwRet;/ V% W4 T" ~* I8 t, A: R( _
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+188 B  `2 w" D7 T0 h
    if (dwRet) return dwRet;
8 {1 i  ~8 ?: a6 J; k8 e    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
% Q5 I: Y1 b% y$ N: a: K    if (dwRet) return dwRet;
1 C' p1 u/ _8 {% [% `+ Q    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);, F9 A0 @7 S5 T- x7 C9 ~7 T* M
    return dwRet;- N5 A$ r- Q( L% ~& V+ S
}
$ U6 T! K7 h+ i$ W! t( d: D1 r3 \6 `0 D! }
static const LPSTR  szwRecentPort="wRecentPort";
# l% `# j% n$ k7 i5 Mstatic const LPSTR  szwPort= "wPort";5 A% @" @' K/ r6 h! p
static const LPSTR  szwC2CPort= "wC2CPort";
+ n: L/ O) u9 g1 Q4 ?DWORD GetPort(DWORD Uin)
! j1 F$ y' H, p7 {3 f, y  \' X{
9 }# T0 A- b5 Z$ ?* l0 E2 ~$ x    DWORD dwRet=0;6 z% P0 l9 L3 @0 R! H
    LPVOID IQQData=NULL;
) F6 F& G) ]5 h5 u0 t    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;! X' j# t8 j4 o. r  G, y
    LPVOID DynamicData=NULL;& }" h2 a/ b% Y0 S
    PrepareData(IQQData,&DynamicData);
# u# t0 t9 K+ C2 D7 ]    if (NULL==DynamicData) return dwRet;0 b8 q  ^: P5 ]. l
    dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14
( n* ~8 i7 v! l    if (dwRet) return dwRet;+ w7 n. n' h5 Q+ y" R
    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);1 E+ ^" V; [# m4 s3 z3 V
    if (dwRet) return dwRet;4 N. B; H6 Z3 i5 T
    dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);1 o/ e' P/ C/ H% {7 \6 x
    return dwRet;! J/ o8 M  ^* [* K& ]1 y8 Y
}. @, L) R4 @2 M! h; U' b

4 X5 a7 U% M) H) M6 Y! x6 `& X0 f& Y/ estatic const LPSTR  szwProcotol = "wProcotol";+ \1 R8 C! U- c; D9 v" n  {' @4 l. I
DWORD GetVer(DWORD Uin)
' Y- e# j. C. y8 Q5 v: a9 F, _{0 n8 }% i1 g0 u) S1 `, t; B
    DWORD dwRet=0;
1 ~: D& r% U2 X* k, ^    LPVOID IQQData=NULL;
+ H8 q( _4 R4 Z7 E4 Z    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;( _4 H% M0 S1 A0 I# M& p" ^5 a) M
    LPVOID DynamicData=NULL;
  x! n" g+ w- w& s8 ~+ R    PrepareData(IQQData,&DynamicData);+ T6 \* u4 W5 Z/ q
    if (NULL==DynamicData) return dwRet;/ k2 }$ d+ e- x$ m9 {# U
    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
$ s' k5 r+ ?. Q! g  w  h) b    return dwRet;
0 a5 A3 i$ M, C}, Y$ b7 n, f( z, C, q1 s/ _
: Y; z) f+ f0 t) P
原文出处:http://www.ye-soft.net/article.asp?id=43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-2 11:05 , Processed in 0.016954 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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