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

QQ IP显示的关键代码

[复制链接]
发表于 2007-10-12 14:06:56 | 显示全部楼层 |阅读模式
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.
5 _7 z. V! s: F1 h) b4 j7 ~0 Prunjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.6 \: x. D/ R3 N& ~

% L, u/ ^- u1 M' v% h% y0 astatic const DWORD UnknownSig=0x1E3A86BA;# k1 U7 L+ r- h5 Y5 K7 v
static const LPSTR  szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";; w1 ]" v5 X- ?
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);
5 ]9 L1 F) t+ g/ U2 RVOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
; D0 k6 p( F5 c% R{
: {" _9 A8 t& M. y$ }    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);
7 r7 V! L& t; @7 N3 a) D% [    PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);
$ G( n2 N- @7 z. s! `}2 |# i+ r& n8 ]  M0 K* p4 H3 ]

6 I5 J# @# a, fDWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)
3 Y7 Z$ I" w. G- |' X{
# ~7 i4 y  {+ t: J: `: o    DWORD dwRet=0;
$ a* t& v' U5 X    __asm" Z5 B' Y! R7 W: [
    {5 b/ t8 p' g  [# C' o4 J
        lea eax,dwRet6 E5 ~# G1 P+ a1 ?( E" j- T9 U
        push eax
5 C  @4 }& G- N7 l9 j        push szCmd1 g# n) ]+ ?3 E* u% G9 ]1 D; b0 c
        mov eax, DynamicData6 w' _1 s: u0 N' w" n) R% ]" R5 L0 F
        push eax9 R( H: c  [9 h
        mov ecx,[eax]# z$ x. T7 O( R
        mov eax,ecx
; q: _$ H- {4 @2 \7 P        add eax,iOffset
  V9 ?8 z8 x5 P; Y+ M# G        call [eax]% M+ O% |( K6 k+ L; k; M: i
    }
9 @1 N- e1 M7 G2 I' M4 N. z( `+ v0 f    return dwRet;
! N) E6 @: F1 U. c' h' t& V7 E}% u1 w5 \+ P  z- @9 T

/ r- I9 O7 u. a4 Ystatic const LPSTR  szdwRecentIP="dwRecentIP";
: v" Q: {+ f- z; p- z8 @static const LPSTR  szdwIP="dwIP";- x# Y& c7 X1 T2 U* d+ U
static const LPSTR  szdwC2CIP="dwC2CIP";
8 _, I$ d# w: ?# T- ]$ b2 eDWORD GetIP(DWORD Uin)
$ X* O0 ?+ I1 q{9 `4 s& ~7 F! _9 a( P, {: ?
    DWORD dwRet=0;
" P! b& G! z' |! \7 K    LPVOID IQQData=NULL;
3 _( L  p' }, R    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;# N* a4 m0 f2 B" I* w" d& t
    LPVOID DynamicData=NULL;
8 `# H7 P- }* [" @! ]4 j8 P    PrepareData(IQQData,&DynamicData);
1 @2 c! @( Y+ ~$ _7 R    if (NULL==DynamicData) return dwRet;
) z7 t9 G4 u5 ~7 D' Q& \) K    dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
% u# D, n4 r  `# c    if (dwRet) return dwRet;
  x0 k: S0 A3 w; ?2 X$ f2 L& P    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);- @2 K; p2 |2 F0 t+ J* v: S! b
    if (dwRet) return dwRet;* S7 ~) Y. [# o9 c7 F6 n
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);" k3 T& t- P* a
    return dwRet;
7 E" J9 b/ a" S$ R! r' _( o/ x2 k}4 `: G+ ]& T& M8 i# X) r+ W

/ S$ J* Y! ]1 C. a. n8 W8 H: fstatic const LPSTR  szwRecentPort="wRecentPort";
$ p( j0 n9 k7 \' astatic const LPSTR  szwPort= "wPort";
/ s1 b% i+ f8 k5 W/ X" Kstatic const LPSTR  szwC2CPort= "wC2CPort";# p  w/ S2 B! N& Z' q
DWORD GetPort(DWORD Uin)
/ j0 f2 Z$ i4 g{
+ R  `9 V: D$ _$ k8 ?/ O& a# S    DWORD dwRet=0;4 x3 j3 C- _+ Y8 r  T- j
    LPVOID IQQData=NULL;
3 R; V& k+ p* b+ t8 g& D    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
0 j5 w! c0 U# a3 D9 Q& Q    LPVOID DynamicData=NULL;' t( Y- A  V, t, V  o7 P( Q3 h
    PrepareData(IQQData,&DynamicData);
: f" b+ B3 h+ @0 k    if (NULL==DynamicData) return dwRet;
) ]+ R* F' J, @, \2 D    dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14+ T2 Y3 b9 H7 G1 e! V3 H
    if (dwRet) return dwRet;$ \& i! g& }. s( `! m& j6 J- H
    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);, e+ _8 _+ g- R
    if (dwRet) return dwRet;# k+ F; S5 G2 e2 w5 M9 A
    dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);
, z2 K9 F, h5 Q" |1 ]; K% ^    return dwRet;0 W" Q4 A' P7 F( |) u
}2 f' _& o) L& C% c7 p* F/ K2 T
  g7 y- h  _5 ^4 |6 V
static const LPSTR  szwProcotol = "wProcotol";
- e, C$ Y! _" t0 t) l0 BDWORD GetVer(DWORD Uin)+ k1 j8 P4 [" _1 C) y, {
{- [4 |3 O. {+ x% w  @
    DWORD dwRet=0;# f+ @7 P7 A7 G' a! q6 j
    LPVOID IQQData=NULL;
7 A2 N3 r1 W4 H& F- T- y8 s1 j/ T. K0 i    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;! b5 }: j) y/ L% s0 p% j0 P, c
    LPVOID DynamicData=NULL;: c4 O3 E& @1 E: J
    PrepareData(IQQData,&DynamicData);, n" `: S1 `2 q& Q9 E& G
    if (NULL==DynamicData) return dwRet;* V" Y2 k" _# p# S1 D
    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
, Y* [, g' j0 V" q9 Q5 ?' z    return dwRet;; v$ x: P! s# d# [' t2 n: ]0 `
}* e9 |& [+ G; J# f$ A9 K( L1 w
7 @& @. l' Q1 n- E8 v' K6 p! D
原文出处:http://www.ye-soft.net/article.asp?id=43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-14 00:54 , Processed in 0.017645 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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