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

QQ IP显示的关键代码

[复制链接]
发表于 2007-10-12 14:06:56 | 显示全部楼层 |阅读模式
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.
1 @" i4 a+ ]+ o6 d+ M1 xrunjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.
  o4 P" p, L) H# [8 ]1 v! c8 W$ H! `
. w# P7 J! P$ Y7 astatic const DWORD UnknownSig=0x1E3A86BA;1 t9 O! e0 T  a! P2 b% Y) k# X8 e5 {
static const LPSTR  szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";
( y0 w/ M6 i& ^4 U% U- G8 C0 itypedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);* M. @: A- O9 a/ {! c5 f( X
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)% ]+ v  d" c8 T' w+ B; P1 Y0 q
{
! r0 p' P: u7 [# j* ~2 g# r    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);' w* |$ A2 d2 L! x- o4 M5 Y
    PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);: W4 U6 K: J9 I' U. V" C4 Q" N
}
" Q: f0 O+ D/ v) w+ y$ S% r( t, D6 e" u; d8 c. Y+ C
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)
1 a1 G* M, w- v9 Y1 g{$ c- b) t* r* Z# f2 I' j" g+ m7 F8 X
    DWORD dwRet=0;; C  V7 ~# u  T" ~7 K  Q% g3 t
    __asm
9 p! ?, j! k: b5 L9 n) u    {: F3 _# E# }( X& O- u
        lea eax,dwRet
" J7 L4 B: e8 D1 b        push eax
0 V+ J: V+ U9 I        push szCmd3 A+ ^0 b. z6 g9 y! \4 j5 ?& ~0 _
        mov eax, DynamicData
. F( A; y  W6 b  s0 d0 j        push eax
; i1 T; E1 K& D% c, j& v        mov ecx,[eax]
6 h( R6 i8 [! U" ]        mov eax,ecx
& L2 q+ ]  {' L3 T        add eax,iOffset" Y' [1 R7 t; h% }- `. x1 y5 P
        call [eax]
- \9 H- ]) V9 b, k    }
( u2 w3 l5 a- t* p. ]    return dwRet;& J# f- @' f9 y
}+ m- \: @2 `. S* ?- R

8 p- I8 `; Z( b# D) L% {& @. v* gstatic const LPSTR  szdwRecentIP="dwRecentIP";( G( h! O; r! d4 l0 _- D  e
static const LPSTR  szdwIP="dwIP";1 f3 U# \  `8 q& }
static const LPSTR  szdwC2CIP="dwC2CIP";
7 ^# a/ I2 j4 E  z4 |3 e" _# bDWORD GetIP(DWORD Uin)1 ^1 J8 B* [: r, C
{
& D& N) k& [' f3 o6 {" ?    DWORD dwRet=0;( T& l: _" w6 ^3 U0 U. u. p
    LPVOID IQQData=NULL;
5 p/ D9 c4 i& c. |) ~  f  j3 a4 a& \5 E    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;7 o/ }1 R& @5 N" k* \
    LPVOID DynamicData=NULL;
+ _6 w! q( q& [' m" T0 I    PrepareData(IQQData,&DynamicData);
. \$ ]8 w) l2 H8 ^8 h    if (NULL==DynamicData) return dwRet;' B: [& a0 ?5 I  ^$ V  r& W2 O
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18& r) B0 E8 _* Q& A: u. {
    if (dwRet) return dwRet;1 {) \' R% a* w/ r2 N( Y0 Q9 b3 t3 I
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
4 ^" h; x; F5 l4 B! n    if (dwRet) return dwRet;
6 K5 d+ I# P3 X. u1 s. L    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);2 X/ e7 |5 I, G. Z( B$ D! ]& C
    return dwRet;
0 b) ^, v) Z7 J0 I# `}
  G9 E4 F5 |5 c+ `) C2 n& D5 O/ U
static const LPSTR  szwRecentPort="wRecentPort";4 R6 m& X& H( @
static const LPSTR  szwPort= "wPort";0 F& M1 @5 J+ s/ Z0 q
static const LPSTR  szwC2CPort= "wC2CPort";! z$ x) D& i5 g0 O+ U8 m. M
DWORD GetPort(DWORD Uin)+ n* B2 u- l8 q/ E" \+ [. i
{
4 H* W9 o+ S. l$ {7 H    DWORD dwRet=0;! I3 m% A7 M8 y6 k9 X4 @
    LPVOID IQQData=NULL;1 P8 F7 q, S. d
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;* Y" W# J$ p# d0 F. U2 F1 M
    LPVOID DynamicData=NULL;
! e* [: C& f4 E6 ?# p! e    PrepareData(IQQData,&DynamicData);
# @# q& V* Y/ `/ a0 K    if (NULL==DynamicData) return dwRet;
6 A- W: o( L1 b6 n    dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14$ q7 K, |2 B0 D1 [6 Q
    if (dwRet) return dwRet;
% p& Z9 I6 G+ i+ i& s& Q    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);" m8 r5 ]% P# F- l
    if (dwRet) return dwRet;
; Q! r9 e* \1 D7 H    dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);  D* u( C0 @6 j) `5 Y; V5 X
    return dwRet;
5 d1 ~6 m9 X2 i- W+ M: n}
7 t" L4 |: y  Z0 d$ }9 {0 ~' l
: X7 Y3 F0 @: ]* b/ X, Tstatic const LPSTR  szwProcotol = "wProcotol";
0 R$ w* Y$ e& T+ e! tDWORD GetVer(DWORD Uin)
+ p8 n! ]8 A) d* ^# k{, @8 j) e8 g5 Y3 X$ K
    DWORD dwRet=0;
( x  a$ B- o( h, }/ a5 t    LPVOID IQQData=NULL;6 G5 u" n5 R: y( B; ]# o
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
' ]' v7 S7 W! I    LPVOID DynamicData=NULL;. e9 y7 C* O1 u
    PrepareData(IQQData,&DynamicData);
! m0 _1 y; |, D/ ~, `: Z    if (NULL==DynamicData) return dwRet;" v' ~; U/ P! _2 L# H# \" Q+ B
    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
! m- W. k5 q9 T9 r8 }$ K: k! W0 J    return dwRet;* `) t8 S- a6 V
}* C0 n" [! B$ o
, T: d+ ]1 f+ G# X0 O7 U7 H
原文出处:http://www.ye-soft.net/article.asp?id=43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-9 04:13 , Processed in 0.034119 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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