找回密码
 注册
查看: 6765|回复: 0

QQ IP显示的关键代码

[复制链接]
发表于 2007-10-12 14:06:56 | 显示全部楼层 |阅读模式
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.
/ n( S0 ^2 H& i9 i2 X: Q' p" brunjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.
8 B% F* w- `( X( {! X! s7 r3 ^. q) S9 A, Z( i- S# z; w
static const DWORD UnknownSig=0x1E3A86BA;
* w1 b6 j  @" Xstatic const LPSTR  szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";
9 Q/ ]. c4 j/ @; h, ?$ F. F) Ttypedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);
' a) s; b. K+ |: q8 _- iVOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData), a0 W3 X: A/ e" H
{
; N% A. a0 q# E5 l0 V5 o1 F    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);
1 q% l6 `- C8 t6 m3 z    PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);! ], B" `- Q8 U/ k7 s: l
}
& s1 T/ x6 E5 m+ M  x0 j- |( z1 X( f% ?& r+ j
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)
5 k6 |! \5 @8 F, H3 d{3 K9 t, A( J' Y
    DWORD dwRet=0;
7 Q9 k! c$ O' r+ X    __asm/ y( x! @, s6 m  q2 p' _
    {
/ C2 V9 i/ X# ]+ @        lea eax,dwRet. _3 q2 G- `9 o1 F
        push eax
9 V& {9 `9 T2 E$ M0 V3 F        push szCmd) s* b+ L, V. [
        mov eax, DynamicData
( B3 e6 e- J! [' K' u) A7 F# ]2 @+ z        push eax
9 _/ c7 y9 W) d; [! E; H( ]2 v        mov ecx,[eax]/ l0 s9 S0 i" r& d4 j: c
        mov eax,ecx0 ]6 q0 z2 W& [& K6 B
        add eax,iOffset
* I  n9 p3 Q7 j* @        call [eax]
; \  x  z# n5 q' {    }
; b. p, N* m' s. }    return dwRet;
) a  q- I& H3 W0 Q9 \6 {}: T7 \# E1 F* H

# D. S$ ~: r" [% @+ }static const LPSTR  szdwRecentIP="dwRecentIP";8 O, G  G' o  J) H
static const LPSTR  szdwIP="dwIP";  b$ z7 V. p: r5 G/ G; e
static const LPSTR  szdwC2CIP="dwC2CIP";
# i& I0 q3 i4 Y9 uDWORD GetIP(DWORD Uin)2 C" d2 Q+ U! Y& [9 l
{" l% o, D, B  x" {
    DWORD dwRet=0;
1 R0 e. U* @) ?    LPVOID IQQData=NULL;
/ m: y# o$ h7 |+ l6 o$ i5 s    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
9 V0 ~+ g7 t. a4 B$ \5 }. Y- o    LPVOID DynamicData=NULL;
. h$ d; Y. ^1 V4 \    PrepareData(IQQData,&DynamicData);
; c- z0 T$ s( v/ K+ L+ y    if (NULL==DynamicData) return dwRet;5 G! F: e  Q0 y
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
0 p( u8 z: a( ?8 d  ~    if (dwRet) return dwRet;
# }" Z$ r/ F1 w) o/ Q8 p9 B    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);) Q" _! H0 D4 l+ a
    if (dwRet) return dwRet;0 g& q& U2 @# K' t1 _# w) X
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);7 }: f+ d1 o- c6 [' D3 i8 O
    return dwRet;- j7 V. ]/ f) A# _# X! v
}
" n" u: @8 A2 E1 Y9 L" F, {3 u" I
* }! {# N8 B, Cstatic const LPSTR  szwRecentPort="wRecentPort";* ~# L) h3 l" ^& {7 h. I' L
static const LPSTR  szwPort= "wPort";
2 T3 E' F1 h! ?* t0 Z/ |static const LPSTR  szwC2CPort= "wC2CPort";
; q0 @2 i6 ?" F. C5 I# uDWORD GetPort(DWORD Uin)9 D) J5 @5 n( z( ?4 S
{, P: f/ k9 m, b
    DWORD dwRet=0;# ~9 L$ [/ W. \- s; C# r0 {- f% W
    LPVOID IQQData=NULL;& w: `- h% C, j- u3 J7 t2 v
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;5 U* j. g1 U  [# j" F! a0 z& Q. [& y
    LPVOID DynamicData=NULL;
7 h' d* [; M& F    PrepareData(IQQData,&DynamicData);
. v( A! z" y  c% n0 w: P    if (NULL==DynamicData) return dwRet;* _9 i6 a8 d8 @2 I( K, C8 l4 u
    dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14
2 [. q6 `9 j5 ?' I    if (dwRet) return dwRet;; Y+ |! @: r) g0 q
    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);4 y: u4 T2 n! G) Z( `' X
    if (dwRet) return dwRet;
$ S: U$ G# Y+ ?% E    dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);1 l" u! s6 P. y- ]) p
    return dwRet;
8 e  s- T8 W1 X) _* Y2 Z& K}3 H9 y: u6 i) d. S& w4 `, ~6 e

0 Y/ T1 j& u( f. g( D9 Zstatic const LPSTR  szwProcotol = "wProcotol";
1 i$ f- d. h. r3 `) _' cDWORD GetVer(DWORD Uin)7 t" N6 l3 {( _# A" ^/ Q
{
" ^4 A8 ^! f$ z# a2 f    DWORD dwRet=0;5 }+ {3 `- [/ E- l
    LPVOID IQQData=NULL;  x; b. _3 q7 B: R% |  r8 w
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;; h# O; G; @2 k" x5 ~
    LPVOID DynamicData=NULL;" S( W" _* h5 f$ o
    PrepareData(IQQData,&DynamicData);0 ^; x2 J+ g; O3 A
    if (NULL==DynamicData) return dwRet;7 W3 l' e* t" i
    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);. e; D) I+ ?% ]* J. B. J
    return dwRet;7 G: m( D7 K9 Y  G; L+ w2 G
}
( W* |2 c# ^% L' p7 |( W+ z2 K0 ]3 i  u* V7 z3 `  j, f( c$ d
原文出处:http://www.ye-soft.net/article.asp?id=43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-2 04:15 , Processed in 0.024470 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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