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

QQ IP显示的关键代码

[复制链接]
发表于 2007-10-12 14:06:56 | 显示全部楼层 |阅读模式
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.7 x& R4 y- q6 ~( M6 v
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.
% `. F5 \+ j; k
: h) |/ j( s) h4 R+ J/ H& f8 T5 b  vstatic const DWORD UnknownSig=0x1E3A86BA;8 \% Q8 D8 v6 Z7 h/ g7 ?& i
static const LPSTR  szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";2 M0 }7 R: n4 S" H
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);
& K- V8 q4 @2 u8 `* JVOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
$ t- p! |/ o( Z. x& z3 Q$ @7 N, d{) o( O, z; C7 {0 g
    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);
9 [0 V, R3 R3 N$ G0 ~; W5 n3 ~# z    PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);2 f" F8 t3 a% |2 X2 p
}' |' K/ |, \  G& J* n
; N$ `" M- k# e! y1 k
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)
( V0 C. H, y1 j5 \( t; ^. H. ]{
! u- c# W* Q4 ^/ C0 B    DWORD dwRet=0;
1 @4 ?, x, ?) J6 }. |    __asm. `* o0 @/ H3 |8 ]  D4 T9 Y
    {) N: [  z% _6 t- W0 ~
        lea eax,dwRet1 q7 w" M, a  X% B8 s9 X
        push eax  {" b, [! H* w, a
        push szCmd1 J* V8 l# P2 T9 x+ a: E3 G
        mov eax, DynamicData
3 X. A# j- J2 C8 F* h- O6 N; C' U        push eax
1 Y! z5 M, R* }/ A) m( t3 Z. C        mov ecx,[eax]: s+ H5 J# F% U" D( o! y
        mov eax,ecx8 P0 }; F; {' O1 Y
        add eax,iOffset; \+ Z- Q4 V' @9 `* q- m) a
        call [eax]
: q( W' n6 r) V. s$ v, K' t$ I    }8 ]7 G/ K  `8 P7 C: G: ~
    return dwRet;
" F; M3 \/ d/ w}0 L' q3 z6 i) ^4 R( e2 x+ v) v  C) j
- c% s; D6 t- N- s
static const LPSTR  szdwRecentIP="dwRecentIP";
2 i: s& G* Q2 u1 _static const LPSTR  szdwIP="dwIP";5 @# i; v6 Y  E4 J  H, S; t
static const LPSTR  szdwC2CIP="dwC2CIP";: F, \5 }. J7 O4 G& W- l5 e9 m
DWORD GetIP(DWORD Uin)
. }& T1 H5 B7 k  T  v: U5 @/ w{
$ J# t6 C4 J; T% C    DWORD dwRet=0;! T( g& `8 n$ p( W) `& E
    LPVOID IQQData=NULL;" x4 ~1 O2 c% d0 M7 Q2 f
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
/ H! i4 |$ R3 g8 o6 K: a    LPVOID DynamicData=NULL;6 M8 M4 a: w7 `: v7 |( P# \
    PrepareData(IQQData,&DynamicData);
. F: O7 f, f; l) V& H. L    if (NULL==DynamicData) return dwRet;
; t0 H1 _9 M7 o    dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
  f" d, m) Z  n5 _) @% Q; c4 @$ M    if (dwRet) return dwRet;
; b! J( n# k" w. h. s. _# ~    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
6 M; t- T7 M$ C6 L- n1 D    if (dwRet) return dwRet;
% r. W4 |# U1 B3 Q) Z    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);
( v* R* Y9 @+ ^: {$ U    return dwRet;
( q4 \6 t8 u- w/ v}/ l  B; s" L( ]( H" x9 ~5 c+ c( z+ R
! B& J" v- @& l2 n6 O
static const LPSTR  szwRecentPort="wRecentPort";2 \8 k" U) R) x' U" u
static const LPSTR  szwPort= "wPort";
2 ^. D5 k3 f  {1 y. J4 sstatic const LPSTR  szwC2CPort= "wC2CPort";! L2 n. I% i3 C$ k# G
DWORD GetPort(DWORD Uin). S; K0 B( l) A7 U3 W! C
{6 Q& E# B, t1 i: c* V
    DWORD dwRet=0;
5 R2 z& D, P# a( L: f9 ^    LPVOID IQQData=NULL;
; e2 n& v6 r' X* Y6 s2 y5 O    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
8 a0 Z: b' w- v5 L& M* `5 D$ r) Q    LPVOID DynamicData=NULL;$ R% H! m6 C/ f3 ^4 t5 g8 n" J8 }  \
    PrepareData(IQQData,&DynamicData);
9 s8 j4 H, d; K6 ~. o    if (NULL==DynamicData) return dwRet;& D; r) n* p2 `) r7 X$ u
    dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14
  ]8 ]% @; |7 {+ e6 @& |0 ~# ~4 b    if (dwRet) return dwRet;' _# S: P3 v8 |# {
    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);
  P; w/ f' ]& U6 f    if (dwRet) return dwRet;
4 K' {2 @! D( C9 Y2 K6 Q    dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);% B; {% v7 T! M% `- ?
    return dwRet;
$ O8 M2 [( }& ^! [0 P, O/ q}8 X) ~) b( E2 J

9 H6 q! d6 v3 j7 p9 t6 l2 K, ]static const LPSTR  szwProcotol = "wProcotol";
2 O2 m, k) q- _/ q/ bDWORD GetVer(DWORD Uin)2 k$ E! X0 X$ @
{/ [% P3 X) u7 a/ ^0 N
    DWORD dwRet=0;
7 Z0 ~: q$ u4 H. R% L. k$ b    LPVOID IQQData=NULL;
* E0 b5 n9 J! a6 j    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;( S1 r( f& s6 ?, d: \; N' m& C
    LPVOID DynamicData=NULL;0 t" x4 w# O& r2 J/ G
    PrepareData(IQQData,&DynamicData);7 U8 R0 i  @2 h9 T
    if (NULL==DynamicData) return dwRet;: f5 ]/ h! p+ `2 z2 q$ }# w' N
    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);# Q* O. v, V0 t- x1 N
    return dwRet;. s: U' n/ b% E' K* Q- |$ p. c6 G
}
9 R( B4 ^" k, x% L( f( A5 U: V2 t6 k6 Q* a
原文出处:http://www.ye-soft.net/article.asp?id=43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 07:59 , Processed in 0.017488 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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