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

QQ IP显示的关键代码

[复制链接]
发表于 2007-10-12 14:06:56 | 显示全部楼层 |阅读模式
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.' Q. I: [2 f$ m" R" R. r
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.2 L. [$ R$ b7 y, C: E$ x

/ E. A9 \# O, v; kstatic const DWORD UnknownSig=0x1E3A86BA;
$ ]+ v' i7 i. Y# i/ [9 dstatic const LPSTR  szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";
% w3 W1 J7 i/ Z- t9 N4 }typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);
* n  q& M* e, r1 rVOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
7 a& ^+ t4 s7 R- V/ ]9 _) l! ]{
. W! k0 o0 B. n; x/ N3 r7 w1 E    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);' i4 N) n8 Q9 P, u9 H% V
    PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);, f0 f; E9 _: L
}
$ j) M7 u& G* G0 V, Y1 W, {7 c8 d  D% k: ^8 c$ B* P, G  r
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)
' _' m! H4 r# ^4 t+ ]$ V{9 \3 n, i+ y: |; C+ A# \
    DWORD dwRet=0;
/ f& u. D2 G. q, d" d- t% ^  D    __asm- k/ }7 d( {0 t' [2 M% e
    {
; y0 w/ W* y. D& V% ]: s        lea eax,dwRet) k- z7 R* [3 R2 C& ~! {- K
        push eax, b+ L# e6 Z, V) M
        push szCmd
" G- K9 H+ Y7 c9 o4 e  b0 r        mov eax, DynamicData
0 d! |4 x+ p1 |8 b" ?/ B6 w        push eax0 s( ~1 b/ h" D9 l
        mov ecx,[eax]9 F' j, B( t: t0 [# w% C+ o
        mov eax,ecx9 {, G0 X5 O1 n# l, N$ ~- C+ E: }3 N
        add eax,iOffset
: Z: c, `4 ]3 g        call [eax]& I/ l# k$ Q( I; o: A( p
    }
" W0 R9 E7 B# p+ g! l    return dwRet;7 S7 V9 s0 g, N) ]
}! |& u4 u- i, Z8 s& F) I

5 g1 I4 t  U/ t9 r8 Z- Pstatic const LPSTR  szdwRecentIP="dwRecentIP";$ c9 m8 X! j. w) a4 P2 b
static const LPSTR  szdwIP="dwIP";
9 z& d0 D# T' j% K9 j0 Vstatic const LPSTR  szdwC2CIP="dwC2CIP";# J+ _: v' W$ y  Q7 U
DWORD GetIP(DWORD Uin)- \/ W" O7 i, ?; J7 f
{
4 G4 `- N# z. A! k) ~1 P% f! C    DWORD dwRet=0;
# Z" j7 R' g" G& W5 \7 X    LPVOID IQQData=NULL;
4 W& o! R! h' Y+ Q7 l; I    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
7 ?# W8 V  \: r8 H, E    LPVOID DynamicData=NULL;) d% H: e9 Z" M3 O, ]0 b
    PrepareData(IQQData,&DynamicData);
9 S8 D  C' f, a    if (NULL==DynamicData) return dwRet;6 o2 L. _+ l3 F
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
: [& P7 g# M! z+ X, W    if (dwRet) return dwRet;9 h0 _0 _! P" V; V
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
0 _  Z6 s" y5 a! k$ `) O6 C    if (dwRet) return dwRet;6 J/ N" _+ ^. u# a# j! F
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);
% I" h6 d$ Y/ h3 C5 b0 d6 z, \, _    return dwRet;$ o4 e* k8 i8 A) N, ^& g
}- l" f0 k9 Q" t8 W; c
* g2 z. {6 F8 q/ A) X. [6 _
static const LPSTR  szwRecentPort="wRecentPort";
! s' p/ l  ]  \1 j4 mstatic const LPSTR  szwPort= "wPort";; Y% e& ]! }; s# [5 v: i* u
static const LPSTR  szwC2CPort= "wC2CPort";
) o) d, [* g+ ?DWORD GetPort(DWORD Uin)
! n% Y  f% r# F: @{
. r2 h1 |. c$ m' ]# u8 |$ G    DWORD dwRet=0;( j5 W% [* y5 p+ h/ s% \/ p# D) t
    LPVOID IQQData=NULL;
; Z5 u; Y' k) s8 n    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
9 x- a/ [* ~7 V6 }" [: V3 P; |6 j    LPVOID DynamicData=NULL;6 u' a$ }! q% N6 U; y
    PrepareData(IQQData,&DynamicData);
; k  T4 |* F' o    if (NULL==DynamicData) return dwRet;; ^- c. T" s1 |( b$ T' e
    dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14( u7 X- U( g& b
    if (dwRet) return dwRet;
0 c. e$ o! p: Z# C" h8 W  q4 Q8 ^0 h    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);8 g+ F& _( N) N- {$ c7 V0 Y6 x
    if (dwRet) return dwRet;* M7 G+ L7 A8 `6 y
    dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);, \- {2 E) U, j, R4 W& h; S& _
    return dwRet;! C+ U& B( W# a* v5 n+ \4 ~5 t: C
}' T1 J* k$ w3 e" z# j% Z% b
% {8 [: p$ S- j0 y  n7 b
static const LPSTR  szwProcotol = "wProcotol";* s' U. ]/ C1 ^& p1 i
DWORD GetVer(DWORD Uin)
+ R0 K: v8 c- Y, U! @  Y{3 c% l" Z# J% R1 m# {3 t, C
    DWORD dwRet=0;
# `  ?- X/ O* ~2 j  w( ~! j    LPVOID IQQData=NULL;6 d/ i4 _: k* P& n) ]; _
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;5 H4 _4 l* v" @
    LPVOID DynamicData=NULL;" O( G, v% |; l- ~' r8 B7 F- \& Z
    PrepareData(IQQData,&DynamicData);, u7 d6 b/ n* a/ o! ?& v! v
    if (NULL==DynamicData) return dwRet;: `) P9 d1 q2 Y7 \) ^) c
    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);. w( T+ ]3 w  x% L  F# e: ^4 v
    return dwRet;
6 ]) E5 @4 [, F, K9 i1 g}3 j" p$ G. ]* H

& z( |4 z9 o4 K* i% x原文出处:http://www.ye-soft.net/article.asp?id=43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-19 10:27 , Processed in 0.016194 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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