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

QQ IP显示的关键代码

[复制链接]
发表于 2007-10-12 14:06:56 | 显示全部楼层 |阅读模式
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.  t3 c" x7 m$ I" R5 D% f+ @/ |
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.( ~' R& O1 m/ E3 e& F

* q4 w7 @9 q; I' M2 _static const DWORD UnknownSig=0x1E3A86BA;
. g- f6 H- F1 H! u; ustatic const LPSTR  szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";
7 v9 H( r$ g7 K, D0 |7 A: btypedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);
9 E6 h. i$ Q2 JVOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)9 r( J5 d: H9 k6 U9 I
{  E4 b9 o5 _' F# \7 `! ]
    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);) \, g% |1 O8 O7 t2 a/ u
    PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);
- a% c+ _1 p1 c  n7 f* k% T- ]; p: @}# n: z$ z- N7 v. z- z0 |

$ L& H. t6 V: x% H3 @# SDWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)
' e! [5 _5 o/ V2 C# J7 {{9 G3 |. d# K& r8 g1 C/ Q# F
    DWORD dwRet=0;9 h9 [- n8 a1 z1 D, A& R
    __asm
: d7 D, n! ^. Z, o( m$ E3 c! n    {
# o6 F& ]- _3 l7 ]" J- T        lea eax,dwRet  O" @/ z; ]; _# L- z
        push eax5 Q8 Y; P) }, x" j% r$ N
        push szCmd: |- a/ G8 k  e) B* E, z
        mov eax, DynamicData+ U7 y: O$ a  z. {$ s" ?! z3 I
        push eax
# J, Y+ g" P; @" i7 A: R. W6 K0 a        mov ecx,[eax]! y% B2 v+ f( S% p, J3 u
        mov eax,ecx
$ n4 X3 g% ]0 T9 {5 U) m/ H# ?: Q- P        add eax,iOffset  ?" U, u- a5 m, [
        call [eax]
8 O3 K8 l1 L1 g  k* Z    }. d  R/ Q' V! G+ I8 Z- a
    return dwRet;
$ S% O+ q; g) ?- A3 n6 k}
2 I; P" D' I$ {% `; w. G
; _+ \! w4 c% fstatic const LPSTR  szdwRecentIP="dwRecentIP";* @3 ?2 ~7 u. G; {# z, K. {- c" Y4 p
static const LPSTR  szdwIP="dwIP";
* U* F* P, d6 ]0 G- {static const LPSTR  szdwC2CIP="dwC2CIP";  P- ]& k9 _% E/ c
DWORD GetIP(DWORD Uin)
0 d0 y; d) }5 B3 U' S6 s3 G1 H1 j: I2 X{
7 K9 o9 o  i" U: n    DWORD dwRet=0;
! X- c; |; B6 ?    LPVOID IQQData=NULL;/ G) \  o& D! W7 I! v- U
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;1 y+ x, T) t1 M8 t) B: S- n
    LPVOID DynamicData=NULL;! F2 Z" I6 G- _4 P! [: X
    PrepareData(IQQData,&DynamicData);
- K6 Y  H9 r: a; H2 |    if (NULL==DynamicData) return dwRet;. {" X% }- j  Z$ d9 g0 D
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
' i0 ], `( l' y4 F- q    if (dwRet) return dwRet;
! [6 I$ \: q: T) z! p# e$ R    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
2 v  ~, X/ t9 F4 k4 E5 A8 }    if (dwRet) return dwRet;
3 b  y& l' X. s! Q$ T    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);
( R4 o1 z) p: j4 W3 Q    return dwRet;* |. z+ ^8 u* s7 N! R0 `
}
+ {' N+ P* i6 l. v5 C6 z8 m
5 R( B' Z: u& y7 \% k, d( n5 n, Tstatic const LPSTR  szwRecentPort="wRecentPort";
+ \- B* J' V* l+ F; Vstatic const LPSTR  szwPort= "wPort";4 z. D& A! h/ A  T! |: I& e  o( k
static const LPSTR  szwC2CPort= "wC2CPort";
4 [  R1 n6 R; L2 X1 QDWORD GetPort(DWORD Uin)
2 o: V* _: g1 e+ R6 T{3 H5 g* ~1 S5 L5 ^1 V
    DWORD dwRet=0;: X: j1 n" k4 G6 u- L8 ]
    LPVOID IQQData=NULL;  S" ~1 M2 L6 r
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
" [; t( ~& {, \, r. t    LPVOID DynamicData=NULL;
' c- I+ D# M3 k    PrepareData(IQQData,&DynamicData);
4 y+ T( ?7 H8 V2 l# W    if (NULL==DynamicData) return dwRet;0 X, y$ k) `- i2 _5 [8 ?& [* o
    dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14  S0 N, p. Q  q
    if (dwRet) return dwRet;
  O& J1 K! t+ U+ Z8 l8 A    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);, r2 u  _# `- D3 ?! Z# M; v
    if (dwRet) return dwRet;% r7 N6 l* H8 k$ P
    dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);
6 D8 d! x; C/ N: w# p    return dwRet;4 Y" c  D+ b& V$ _0 Z. Q! t5 h8 x+ M
}
: {: z  Y! X; d/ L  C8 Q3 \- d' E& A/ ^
static const LPSTR  szwProcotol = "wProcotol";$ `2 |5 O- T6 I9 U# [  [4 C! u
DWORD GetVer(DWORD Uin)  S' _# Z& l. {
{0 T, v% g; m7 X; u' {7 _
    DWORD dwRet=0;
. Q  h& W1 H+ E: }; Q6 S6 o. ~4 ~0 |    LPVOID IQQData=NULL;
6 T# |: Z( ~0 e& B9 u% Y# m    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;: [4 o+ @% W/ ^7 q5 s8 c
    LPVOID DynamicData=NULL;
$ r) i, T5 T" j6 A: M, C5 \: K    PrepareData(IQQData,&DynamicData);
. B% K$ X) K! j5 m2 P    if (NULL==DynamicData) return dwRet;: e; z3 r' v, g' M
    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);4 _# O% |0 a: w# n* n. J
    return dwRet;4 ]' @7 W+ _( U7 Q9 ]' ?
}8 Z+ j+ z8 S- \4 k6 @: m7 q* w
7 ^  i/ k- p& Z) D+ K: x
原文出处:http://www.ye-soft.net/article.asp?id=43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-9 04:16 , Processed in 0.033761 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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