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

QQ IP显示的关键代码

[复制链接]
发表于 2007-10-12 14:06:56 | 显示全部楼层 |阅读模式
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.+ R) [0 u2 w' Z' j+ R8 H
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.
$ P" L; @6 H3 {% \: C! ~3 W' T8 L- R+ q. b% V$ J
static const DWORD UnknownSig=0x1E3A86BA;
- W% @9 F9 G5 Estatic const LPSTR  szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";: Z6 `) E# y% \3 g  j/ [% v+ J
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);, o9 w! L# p6 B4 E2 q, R
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
2 l$ U, z" D/ `7 c+ ~{
8 |- s) U7 t5 j) }7 N  g* e    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);
0 g  R: W& B1 M! m( p- ?    PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);
! T9 p3 s- X+ T2 M) m) ^& E' n9 H/ Q+ i}
7 T# |6 {$ r) D, g" g. d% b# P" w5 r+ S
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)
8 p- o* J. f) f{5 I/ K  J5 A4 n
    DWORD dwRet=0;4 @) U$ U$ Y. F
    __asm
+ L0 O. L" N, t' a+ o' I* t    {" ?. _5 l% L4 [5 q* p
        lea eax,dwRet+ J) W4 m$ |# G, C' p% T
        push eax# U8 \- W1 S- e, F; G' K( U7 Q
        push szCmd
7 g# s2 @. a  R, L        mov eax, DynamicData
" I2 m8 c5 }- H, i& L2 L' Q        push eax* L5 S0 M$ l7 H
        mov ecx,[eax]" U. W3 a) i& L! G
        mov eax,ecx3 Q% P7 q# q2 ]8 X3 r
        add eax,iOffset3 o6 J. {. W' h3 c  c4 N# }
        call [eax]
; _4 O. _+ q* ?6 y" d    }
( T5 q9 p. L& O1 ^0 j9 v# |+ f    return dwRet;
7 T9 C" O  |. k9 U& f3 j# F}
. K) _. {- b  ~0 }5 U! w+ q+ A% ~( e! g& z2 ?* r" R
static const LPSTR  szdwRecentIP="dwRecentIP";
/ x5 W0 J/ U5 x' W2 cstatic const LPSTR  szdwIP="dwIP";" u. D4 i$ v- l6 I: b( O7 l
static const LPSTR  szdwC2CIP="dwC2CIP";+ E6 a% w3 k% j1 b( m! P5 ?
DWORD GetIP(DWORD Uin)
3 H/ W/ p6 ~  _& m: u1 a{% |$ N& X5 f+ Z2 h1 I( n+ p3 d
    DWORD dwRet=0;3 \! [2 q" `; S1 i$ Z$ x
    LPVOID IQQData=NULL;
1 g  G+ r9 ~3 j& p8 s5 u+ A    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
8 j3 [$ E2 f) N$ r; ~    LPVOID DynamicData=NULL;6 o! v$ D4 v" Q5 B6 [# ~' |+ J
    PrepareData(IQQData,&DynamicData);( l" Q% w% y. t: M3 L- Z; ~
    if (NULL==DynamicData) return dwRet;
7 ^5 y/ A) m/ l2 S  ]    dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18& k4 P' K# v" E+ ~* D9 O
    if (dwRet) return dwRet;
1 q7 n! u1 w) W    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
, ]2 v! H# A: @* Y+ M5 d# k    if (dwRet) return dwRet;
, Y0 w6 _, R7 v5 @    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);
5 R" ?7 Q9 r* M" ?3 B    return dwRet;) ~5 M6 a  N& f7 m0 y6 D
}; H1 v8 @+ L5 U

3 E5 t9 B( j9 x; w& D0 X0 |: g/ }5 [- pstatic const LPSTR  szwRecentPort="wRecentPort";: i4 Z/ g, N# {2 o2 i7 d
static const LPSTR  szwPort= "wPort";
' S! g  a7 F" ?& e9 gstatic const LPSTR  szwC2CPort= "wC2CPort";
) |' x4 J! d' |' t! I  uDWORD GetPort(DWORD Uin)2 n' c2 {" U( j; J
{
  h9 n* y- f7 t7 P2 k    DWORD dwRet=0;/ m5 p% @3 y% j9 p
    LPVOID IQQData=NULL;
$ D! S- W* H2 `    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
9 m1 ~' g7 o  k4 N; Y    LPVOID DynamicData=NULL;
: |" u; v$ A, f7 ^. A- d- R    PrepareData(IQQData,&DynamicData);
& O6 d$ g) Y; x. k* b2 r    if (NULL==DynamicData) return dwRet;- ]; `6 }: }  }9 E
    dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+141 t. {6 G4 @2 y% o
    if (dwRet) return dwRet;* u: N7 b) n8 d1 `3 R
    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);
* f% A- i3 z& R    if (dwRet) return dwRet;0 B; V2 N! E5 C# M& M6 {. m9 Z
    dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);) t1 P7 L% V( K
    return dwRet;
4 A6 z9 V% f$ @, ?3 j}
9 f, W" {+ L6 Q# A2 f( }7 R
  ?# H8 Q+ D# g2 Gstatic const LPSTR  szwProcotol = "wProcotol";, m6 [6 v4 Y0 w2 e4 Z' S( R
DWORD GetVer(DWORD Uin)3 x+ `( n0 u" `
{3 D! ^7 d. J% ~: O4 I2 B. R; w
    DWORD dwRet=0;
. Y" ^0 B  a, [6 N3 d$ V2 p) H9 F    LPVOID IQQData=NULL;
6 `1 u, ^! C/ X  n' y$ R    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;: P+ K$ t, ^" m# L. r; }$ q
    LPVOID DynamicData=NULL;8 _9 [3 ^$ ~- w8 M) A
    PrepareData(IQQData,&DynamicData);
# G' ^8 j  X3 P& i( b    if (NULL==DynamicData) return dwRet;
/ G4 h, b1 w* h  @    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
# R7 ?+ v5 |  a% b3 w- R    return dwRet;
7 j1 |  u+ z5 `$ x, c+ U% }7 k% h}2 L& A. ^! u0 \9 ]$ |
6 v1 t6 e0 m  z9 [0 Y8 p
原文出处:http://www.ye-soft.net/article.asp?id=43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-9-30 08:58 , Processed in 0.035222 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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