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

QQ IP显示的关键代码

[复制链接]
发表于 2007-10-12 14:06:56 | 显示全部楼层 |阅读模式
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.
- B4 e* e3 U5 J7 q: W# m" [2 t' _" Yrunjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.0 g4 ^: C9 r$ E0 O0 S, h$ z

' ^. A% k9 s! |9 Ostatic const DWORD UnknownSig=0x1E3A86BA;+ A2 N2 M  l0 e% w) h6 r
static const LPSTR  szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";5 o+ ]! h; O* W  y
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);
3 a7 D; K5 J" ?' i7 j# p. J; KVOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
3 }2 u/ s8 i: _; g" l# V- K' a{
3 K9 I+ }" \) y    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);& ^6 @1 L4 [) }2 W0 `6 d2 W
    PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);. ^  _) u+ i/ j# _
}
+ Q! l7 A1 k/ a( {  l0 {1 w2 e$ }7 N4 L" u, ]) r: G) k
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)* @+ Z$ }. z# h# A- v3 e
{' v1 h5 j. N; b7 D+ J
    DWORD dwRet=0;
" e) U6 n. U# j- |; J. T    __asm
) J: n2 N  ?- ~  u; G, E    {
6 U. F$ q( N& P5 F3 I1 X4 T        lea eax,dwRet
+ x* ^9 ?7 y0 |* h. c        push eax
+ w" s1 n! n/ B) C; J        push szCmd
1 }7 [* V( Q+ f% n        mov eax, DynamicData& W6 [- v' ?& T8 \2 J
        push eax0 a9 {  B0 k% S3 _& F2 s
        mov ecx,[eax]+ z( Z6 q* G7 q* H! j- A
        mov eax,ecx
. ?6 W1 v/ O- S" [3 h( \: I3 |        add eax,iOffset0 r# U6 ^$ u9 l; R
        call [eax]
( L! C4 A" u4 y1 l! G5 X& A8 b; ?, f    }
$ z% H, X1 D2 Z8 B    return dwRet;
) O5 T6 Z# D$ T8 j  M1 x1 v% v}3 N* Q5 j; F6 u/ H$ D6 ~
# o0 d% t- U& F$ X- s/ K  s
static const LPSTR  szdwRecentIP="dwRecentIP";0 z1 ?9 {1 ~& u5 p6 _
static const LPSTR  szdwIP="dwIP";; v" ~" _& V, K& I: ]' i
static const LPSTR  szdwC2CIP="dwC2CIP";' S* X! d- A+ T1 q2 T/ O0 L
DWORD GetIP(DWORD Uin)9 C5 n/ r8 V) a5 [2 s; s& X
{6 J' L6 m# W" K$ W" ^  V
    DWORD dwRet=0;' m6 C, h8 R( Q3 {* W% z
    LPVOID IQQData=NULL;/ r9 m  n1 f# \! X! ?3 C. ^
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;: y) g) e! h& z' |9 s2 |
    LPVOID DynamicData=NULL;0 w; |& a! S2 H/ @$ ?( J
    PrepareData(IQQData,&DynamicData);
% I2 ]- N; h$ f9 Q8 z    if (NULL==DynamicData) return dwRet;$ j; T1 a7 G4 Y- g* a( r5 x9 O/ j
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
0 T0 b& ?4 l5 _0 O4 M    if (dwRet) return dwRet;
* s& R5 R' N6 L+ u7 y! O: a. \    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
. e: a/ f+ U* ^/ j1 r    if (dwRet) return dwRet;; ^' M  c! R: j5 k
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);  |  h4 m9 L  Y3 ]  f
    return dwRet;+ I% Z- l+ o1 ?: s9 v" u' r8 c
}- H; e# }8 K% U7 ]7 o1 P+ [! C% y" [

& q2 _; D1 M4 g; l) l6 Zstatic const LPSTR  szwRecentPort="wRecentPort";, V. w" D5 Q: i* j2 c/ z
static const LPSTR  szwPort= "wPort";
+ _* ^! o% B- nstatic const LPSTR  szwC2CPort= "wC2CPort";' A( g1 w1 X  C$ a
DWORD GetPort(DWORD Uin); S% ]# L( }: t0 j3 a  |
{
/ _8 V7 z0 F  [( q6 f$ ~    DWORD dwRet=0;  U* W- i' U+ b0 O# R" d: P0 o% H
    LPVOID IQQData=NULL;
* V/ U6 x3 [. r8 u1 ~, Y    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;5 f1 x$ _' Y) i+ S/ C1 {" `
    LPVOID DynamicData=NULL;
* u' w, f9 p# {+ y3 z3 C6 t    PrepareData(IQQData,&DynamicData);* \3 [5 u6 `4 @4 W% f4 a4 ]
    if (NULL==DynamicData) return dwRet;
' H" m% U4 Q" Z- ^5 J    dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+142 G7 l: @: r8 F: A) g6 k2 @
    if (dwRet) return dwRet;0 Q5 K. H0 M4 ]8 Z9 `6 I. y% j) ]
    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);
2 Q/ k' V2 P8 P$ ]" @: ^    if (dwRet) return dwRet;. d  M+ d  j& P+ S1 f5 \
    dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);
$ Q/ T  N2 f( ?8 N3 O8 O    return dwRet;
$ t8 v: T! O5 ?' E5 R+ V}7 E' Z$ {( Y# J/ Q# K% R

+ n; }, H3 Y/ n5 q9 N6 f5 nstatic const LPSTR  szwProcotol = "wProcotol";5 P7 Q( D, p! s/ G! R3 u$ ^' D
DWORD GetVer(DWORD Uin)0 C  P2 ^, S/ _1 [9 u' T
{- o% i( z6 g. B5 s
    DWORD dwRet=0;9 j0 J, N1 X! g: w5 J, O/ ~9 I
    LPVOID IQQData=NULL;/ y% M2 c3 E' I
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;7 b4 y( |) K* ~$ ~% `4 V; e
    LPVOID DynamicData=NULL;' h0 F2 b( F$ Z6 T4 m
    PrepareData(IQQData,&DynamicData);0 ]# c/ e. D% h$ T, r
    if (NULL==DynamicData) return dwRet;
) `* f& a3 a8 d0 N4 N0 M/ J+ z5 s( L* O    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);7 O0 ?+ b" l6 r0 k; s
    return dwRet;
' r! v+ t) W& R. i3 J}
  x8 ?* G1 R' Y2 J" M# y$ x% A' \
& E" J" {$ p( n) B1 K* I; J原文出处:http://www.ye-soft.net/article.asp?id=43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-19 11:08 , Processed in 0.014844 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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