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

QQ IP显示的关键代码

[复制链接]
发表于 2007-10-12 14:06:56 | 显示全部楼层 |阅读模式
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.3 i5 a: ~( d# M* `: }
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.
* |4 c  s" [: g
4 ~6 r5 F$ m6 [5 B8 v1 ], Dstatic const DWORD UnknownSig=0x1E3A86BA;7 G2 [: ?' M! O& r# A" r: i3 ]
static const LPSTR  szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";5 v3 D+ n  e5 O6 p& t: k' R
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);  G- q$ Y8 v) }7 E
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
& z6 n! b( g/ m+ _6 r{
2 y. Z1 U* H) H) X# ?4 L* H, _    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);2 G# W7 Z7 X; M  D$ h1 z
    PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);. _" {' P1 {0 L. }' d- ]
}
' ]0 C) w3 d* E2 L/ Q+ v
/ z) A+ G" u  B% h0 k; {& p  i6 ?DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)- ^9 n$ O& ?/ J  R( S
{& j9 F+ v6 @# w& k( {
    DWORD dwRet=0;: M5 D1 I4 m- i0 G7 \  {, |/ P
    __asm- f4 i: S3 v3 @- }0 ^7 l- J
    {
. I6 q3 C" i* z1 }8 `* R, g# a        lea eax,dwRet8 n9 r+ f) c1 r7 M0 Z0 ^
        push eax, ]+ o9 z" z3 l! }
        push szCmd
% W$ M& e, i- v# k9 D        mov eax, DynamicData4 m) |- ~; a) W' w
        push eax: a$ H9 o- E! ?$ r; ^4 @
        mov ecx,[eax]% c) R* Y2 H1 D6 U9 o4 q6 @, R
        mov eax,ecx
1 }8 c+ T! r7 g" ~. U  \% E        add eax,iOffset
: j4 h0 X3 V: F2 E$ s; ~* h        call [eax], T! V% t. A  D9 U# b2 f; C5 n
    }$ }" f. K# V9 m: n+ |  M  v
    return dwRet;  H4 n  V5 D0 L( g" N
}
' B, A3 J2 p, T- E# W1 v1 W0 e9 ]" `
0 g2 ]& l' \- T! istatic const LPSTR  szdwRecentIP="dwRecentIP";( P7 y/ O' q' k8 a) z, \- c" s
static const LPSTR  szdwIP="dwIP";0 _* _  {' X! d$ K, X+ I# l
static const LPSTR  szdwC2CIP="dwC2CIP";+ g2 A! }  X6 y5 X
DWORD GetIP(DWORD Uin)
. I! l9 z* m+ `{
4 Z6 T# }. p% ~9 E    DWORD dwRet=0;6 b+ G1 H) ~3 @* ^/ ^$ B
    LPVOID IQQData=NULL;* ^- V, o3 p6 |
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;3 N/ B7 b% X* @5 O: I
    LPVOID DynamicData=NULL;
# Q& q% w* R  L' A$ f    PrepareData(IQQData,&DynamicData);/ N; \: j) u. U& K
    if (NULL==DynamicData) return dwRet;
, {* Q$ L5 F5 I6 f( O    dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+189 z. E# k3 q" W9 V! `: ~( L
    if (dwRet) return dwRet;, }- b% f2 }" W( F
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);" b+ T& D( A$ R/ A% {3 B
    if (dwRet) return dwRet;
# d0 z* s! l. T: z    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);( A# a4 l2 \8 O- ~
    return dwRet;
( V" Q: k  v% o$ y# v! v: X& w}
+ O! g; J% R" T% G1 y( @1 e
: E4 H' I$ g1 v5 P0 X" Zstatic const LPSTR  szwRecentPort="wRecentPort";" T: Z7 B4 b3 S' L* T) ]5 v
static const LPSTR  szwPort= "wPort";+ {; J+ \- e6 g9 r5 r  Z: `
static const LPSTR  szwC2CPort= "wC2CPort";- ]% f; \1 s; }# X! t+ |* \
DWORD GetPort(DWORD Uin)
# {& O, `3 D: u# q% Q7 G  ~$ S& ]{! _( B5 @. R% N( o2 j
    DWORD dwRet=0;1 W  T. U( j0 D! t+ F
    LPVOID IQQData=NULL;
3 D' q4 {5 ~# F8 M. r- B    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
8 q5 t5 i+ Z! k8 L6 h; v    LPVOID DynamicData=NULL;
; P" [, U' i5 ]    PrepareData(IQQData,&DynamicData);
4 c6 [8 F1 _, U& e' S    if (NULL==DynamicData) return dwRet;7 l+ |+ o* O6 Z. c! Q9 q
    dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14, V- R1 d- V4 S6 K# P0 I. G# z% c
    if (dwRet) return dwRet;
7 j# x% K9 a% |, I7 @4 z8 g/ Y    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);* J8 Z6 `/ J' G
    if (dwRet) return dwRet;( P% a3 h  @) K+ `) `$ \
    dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);
' ]$ F$ |2 e9 I2 L0 M! x7 J2 d    return dwRet;
% z+ t8 I4 k% B0 d. |}% T! I8 C* Q" K, Y% ?  c* f
2 s9 x+ a0 V# Z4 l1 G
static const LPSTR  szwProcotol = "wProcotol";) K, n$ t' J  [3 @6 t+ @0 i
DWORD GetVer(DWORD Uin)
' I, ~: Y$ [1 z$ D7 x{
3 y% L( z; O; f) Y. i  _; |# U    DWORD dwRet=0;
+ m1 n! Y3 Q* v7 j8 e" \    LPVOID IQQData=NULL;' v. H6 h# e# q  |
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
+ S) }3 D% @2 f, s    LPVOID DynamicData=NULL;& ?+ x- p9 @( w. j1 [
    PrepareData(IQQData,&DynamicData);8 v" n& {1 w1 ^
    if (NULL==DynamicData) return dwRet;% p9 n- ?% z. n7 m9 B
    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
% ^: J# `& a3 r' c) m) ?    return dwRet;
$ R9 D+ P& t; o; B}
: w, \. K5 g0 O8 d: H7 q
3 ~* b$ s$ h* v原文出处:http://www.ye-soft.net/article.asp?id=43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-9-30 10:40 , Processed in 0.037464 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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