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

QQ IP显示的关键代码

[复制链接]
发表于 2007-10-12 14:06:56 | 显示全部楼层 |阅读模式
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.
# U. a& Y; c: `runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了." m9 b& i" f5 K' e  \
! d  A) R1 o/ H$ d! M& D! P- Z
static const DWORD UnknownSig=0x1E3A86BA;" Q) g* T. B2 R" M9 A- f
static const LPSTR  szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";
" F* V8 Y2 e' d0 ]4 j7 ztypedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);
, q# }) d# I+ kVOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData), _* j3 _1 R) U0 f3 o+ u6 O
{& F/ L3 |0 k, s) x% N" }
    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);7 p9 P. P# R# R; r
    PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);
6 ~4 W  |+ d; p% z. s9 Z, |}( U: {/ v8 _) R$ l6 n6 u+ e/ K3 D
8 n( X+ H5 w& Y7 j5 A% r- Q
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)
! @$ V" z6 Y4 v5 h' Y/ n1 M{5 u& m  m* j8 E. p1 h& G
    DWORD dwRet=0;
' y/ ]1 Z5 z: j& R: Z    __asm6 ^. E* m* }! z
    {  K" E: L, n  E6 Z* T
        lea eax,dwRet+ y3 y3 I( a4 d
        push eax
; j* }2 c/ T* @* w- r) \/ B        push szCmd1 D- h6 D. t- E. ~+ Y
        mov eax, DynamicData( L# b0 v7 I: s* l) _/ V
        push eax
! g+ l! R6 v/ f5 {( b3 b, j: o3 _        mov ecx,[eax]5 n, `2 _! R0 \, l' J
        mov eax,ecx5 f. g$ L& L: @' D  Q( V
        add eax,iOffset
: O, |% \3 v' F, Q" y* n4 M; W        call [eax]
* E2 o$ b& i7 S/ K8 L2 h& H    }
6 N# A" l. s( K3 W    return dwRet;
8 I* }: Y4 B5 x}
6 [5 s8 r! ~$ m% ^
5 F. m* t& A7 p9 Nstatic const LPSTR  szdwRecentIP="dwRecentIP";
" I8 J8 O- [' S& Xstatic const LPSTR  szdwIP="dwIP";
) J0 Y6 d2 h; O: ostatic const LPSTR  szdwC2CIP="dwC2CIP";
5 L7 O! a1 _1 r! _: F% JDWORD GetIP(DWORD Uin)& o0 C4 z# j1 s
{- O! Z: ]/ u" Y. L3 J
    DWORD dwRet=0;9 `. Q( f" h1 K; [, M. |" U! H2 L
    LPVOID IQQData=NULL;
4 A! F$ h: k' O3 d3 d4 @7 y' U    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
7 \; U9 Q% Y) `) y2 z+ i    LPVOID DynamicData=NULL;
  p- z- \1 r* B* l/ o8 a) n    PrepareData(IQQData,&DynamicData);! h$ l3 m9 ~& [- j0 q
    if (NULL==DynamicData) return dwRet;
: N# G- C# |$ k0 Q5 G' T    dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
, u# V- a$ |" z2 _5 R    if (dwRet) return dwRet;) F  V( k4 K7 d8 s
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
' K7 u& ^) ]/ v! ]9 r    if (dwRet) return dwRet;
( f& h0 D/ o6 K* n$ e    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);
+ u& j$ ]+ r( C! u& I& N* P8 u    return dwRet;, C5 A4 t9 A, {8 }0 u$ N& `
}* ]( o& e, c: _0 h  L! @2 J6 ~
3 A: v0 U3 R! z+ @- W
static const LPSTR  szwRecentPort="wRecentPort";- s+ h2 k$ l( q( i
static const LPSTR  szwPort= "wPort";# p% V+ h4 I2 z
static const LPSTR  szwC2CPort= "wC2CPort";
  R4 t% r- {" ]! z8 Z( fDWORD GetPort(DWORD Uin)
2 W+ v; X& a/ Y% ^6 c{2 A3 [' S5 y$ U! [. r- `
    DWORD dwRet=0;
' G2 x3 `3 P! r0 w( J9 t4 N% O    LPVOID IQQData=NULL;5 [/ H& j! `9 s
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;" K' Z: J% S; W4 o" @
    LPVOID DynamicData=NULL;, L( H( J$ ?7 ^' {; L3 \
    PrepareData(IQQData,&DynamicData);% o! g+ O5 t% P3 S- [0 O! i  c
    if (NULL==DynamicData) return dwRet;5 S( A) d$ ]1 A* _3 G8 A& w
    dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14
% a! q. K7 p& U: Y, Z9 J: g    if (dwRet) return dwRet;& h+ ?4 T% p+ g/ q% C' |
    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);8 R; [( Q7 q; a! t+ r$ B
    if (dwRet) return dwRet;/ O9 [% k" R$ b8 W
    dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);
6 s# G9 E% n1 `, q8 d    return dwRet;
6 _, {9 e& S. N! l! f: D}
' F' M0 Y' {+ T' N. k! k/ A. L8 S4 B) r! p4 d4 Z# i, c9 X
static const LPSTR  szwProcotol = "wProcotol";( r. j1 w! L# C" S) A* ^) u* p
DWORD GetVer(DWORD Uin)  i  B5 |1 r3 }1 p7 X
{
# E0 g: [  t: _" [( B% A9 p) ?    DWORD dwRet=0;
3 Q1 F* {7 ^3 i- ]- Q& y/ P    LPVOID IQQData=NULL;
7 k0 E1 G5 {: T/ a, F  q" s    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;+ @) e( h) l' l5 ]
    LPVOID DynamicData=NULL;
/ x, R5 i) ~- E: [. O( o$ P8 y/ R    PrepareData(IQQData,&DynamicData);9 |' c' U- P/ \! Y' P% `
    if (NULL==DynamicData) return dwRet;) n* K" `* h3 M8 K) B; O. @
    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
/ h8 {3 r6 S& n    return dwRet;
. f6 V. c' Y8 a1 H- Q! A  p8 u}
- T2 D* u7 s' f3 }& `& h- D! h  y0 `+ p, C* \9 ^  {8 n/ p
原文出处:http://www.ye-soft.net/article.asp?id=43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 09:18 , Processed in 0.017632 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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