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

QQ IP显示的关键代码

[复制链接]
发表于 2007-10-12 14:06:56 | 显示全部楼层 |阅读模式
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.
$ O* A0 l, w: i% xrunjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了., h; c' Y2 ~& E; j5 [5 t

$ J- `) b6 ~! d7 j# Y* \static const DWORD UnknownSig=0x1E3A86BA;
( W! K/ F2 \* \9 S  Q  Tstatic const LPSTR  szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";
3 X1 E& n1 A4 f* k8 f; Ntypedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);/ h- Y& U" F( Z/ m0 @4 k* C& C
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
$ }7 c2 U( t! m{9 w9 @; j( y( d* n
    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);
% ]1 B7 L0 T7 H9 a. ]) g    PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);
2 l8 K6 l. N! C! ]}- M$ K" ?6 l' t: G: t3 R; M
9 n  d% {2 A- l
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)  O% L# H# }7 n% U( H
{
: ^3 j3 S- @) V- R0 f    DWORD dwRet=0;7 v9 O/ B, Q2 T6 Y' i% S! s
    __asm
  D4 ]8 i& d+ `. P  Y  Y    {( l0 r* R% x% \
        lea eax,dwRet
5 J% o" s) K+ J  l) d# B% L" c. B3 s        push eax+ k5 b2 _" R# w; F4 s1 W0 z  k
        push szCmd
; K. }) w, W$ \$ ~& C, a& ?- X        mov eax, DynamicData
" t5 T1 }9 h# c) P, _) P0 H7 z        push eax
, `7 M$ e" z& v7 k$ J        mov ecx,[eax]
  \( V5 k8 y" d        mov eax,ecx
7 \/ I  V" V! j0 O4 G- k1 V# u        add eax,iOffset
2 i- S* k2 M  a' I" {0 }        call [eax]6 y! Y+ M/ i8 o4 b* ]
    }0 x+ h  ?2 q4 L  t7 M3 D+ F
    return dwRet;
: v7 u* e# c; [( i( I4 V}
  J! q* c* S- U9 K# h0 W; J. v% b8 M% _& P( i9 \; Z
static const LPSTR  szdwRecentIP="dwRecentIP";
) ?; K6 N; ]- i! J, V- c* l6 Q. cstatic const LPSTR  szdwIP="dwIP";, Q7 P! c- _) Z/ P$ p2 b  B9 f
static const LPSTR  szdwC2CIP="dwC2CIP";. R7 P, k/ n3 I* A7 }: q
DWORD GetIP(DWORD Uin)
2 Q9 h5 O! r, V{% m" a( N- Y. N2 |# `6 P
    DWORD dwRet=0;
/ Y+ `" W% r+ S4 F( E    LPVOID IQQData=NULL;
4 \# x( Y1 F% h" U( h5 {2 x# j    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;) y. g  k$ h6 M
    LPVOID DynamicData=NULL;( G* B1 D( X2 _2 X
    PrepareData(IQQData,&DynamicData);; `+ Z, A, X# g1 ~
    if (NULL==DynamicData) return dwRet;
$ @. r2 R7 U, e+ g9 o    dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
3 |8 \% w4 y/ H0 \+ D. Y    if (dwRet) return dwRet;
% _. H- o: }+ i1 {' q) i1 U    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);# m3 i' |2 w) s* s/ ?' B& ~7 O
    if (dwRet) return dwRet;
& A" b( I5 y2 n! a+ Z  |: Q    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);
5 Z8 s5 I1 p& V( F8 Q2 ?) o    return dwRet;
9 x4 a  D, ?2 b, B8 O! z+ `}
* K& T* A. P! T5 m, I* \  G" I. |5 `; ~
& T8 H2 t0 e& C5 y% ystatic const LPSTR  szwRecentPort="wRecentPort";! {& ?8 g2 _+ P- _7 G/ f" i
static const LPSTR  szwPort= "wPort";
, T3 R0 w; m! pstatic const LPSTR  szwC2CPort= "wC2CPort";
8 t/ j5 T# ?  k2 \: L% W& MDWORD GetPort(DWORD Uin): L" \$ }2 r+ }" I! y
{5 R! J" L* ?; i: b/ z9 M$ D
    DWORD dwRet=0;
) ?- s3 v1 Z3 y* M" r: Q% B1 A    LPVOID IQQData=NULL;: z) @% I; c9 a1 s/ S8 L+ |) m
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
0 p5 C0 b+ K7 J" g2 f    LPVOID DynamicData=NULL;- }/ c8 v0 |9 n. o6 L2 S* K# |) W
    PrepareData(IQQData,&DynamicData);
: s( k# n) n$ p0 k: H# `    if (NULL==DynamicData) return dwRet;+ b" e: s" T1 o* {
    dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14
1 H; I3 @- v& L    if (dwRet) return dwRet;4 L* |8 r0 c1 {1 @  B% N& ?) V" b
    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);# E2 d2 b; d3 ^; O
    if (dwRet) return dwRet;
) [! ?% ~4 M4 p    dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);- u+ w( x8 Z) |5 r; L$ D) S
    return dwRet;! m4 y! Q) @2 q; z
}! s9 P9 _" I& k

+ B: H6 Y4 h/ o3 F) c' I8 ^static const LPSTR  szwProcotol = "wProcotol";
" A6 a( w- ]' C4 Y+ N  FDWORD GetVer(DWORD Uin)
% C# m* F# m+ J) E{
4 c+ u3 r, N4 T/ N) x* Y9 _: u    DWORD dwRet=0;
6 G" S% p' Y: K% p) v( Z    LPVOID IQQData=NULL;
% a3 S6 N8 w+ u' u% n    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
4 k/ {; R: [9 g    LPVOID DynamicData=NULL;) e! Q. [  [: \8 j3 J
    PrepareData(IQQData,&DynamicData);! O; v0 r8 j& l% o
    if (NULL==DynamicData) return dwRet;2 J2 {3 E: m5 C8 M2 s0 P8 g* s
    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
+ j7 b3 W% P0 z    return dwRet;
+ E6 |+ n6 d, m' i2 Q6 U( s3 F# S}) P+ H5 v2 E4 @' {" P% k7 \
! T9 a  O% T7 ]" X+ V; A# M  \
原文出处:http://www.ye-soft.net/article.asp?id=43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-14 21:44 , Processed in 0.019794 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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