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

QQ IP显示的关键代码

[复制链接]
发表于 2007-10-12 14:06:56 | 显示全部楼层 |阅读模式
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.: D' l. _9 _! C
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了., ]; o/ r" ]% \0 M% a% _7 V

' f) r3 b% s( I+ x, o: kstatic const DWORD UnknownSig=0x1E3A86BA;- i: o2 Q8 ^+ \# R7 O7 X' P! Y  T
static const LPSTR  szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";  J  h  f' k+ z
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);
6 {( C* d% O4 [5 }4 ~VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)7 R, A! w. _. e! T% ]
{
8 |7 ~* E6 P# O    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);5 U8 s7 P/ R) [" L
    PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);
# e- J4 A  n' m( o, P7 w/ _. `}1 \# N" s; B& j
9 y' k* j0 H$ {; S' {2 Q
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)- u0 l- `5 w8 |& `! V  [
{
  M$ y+ Y  }3 i    DWORD dwRet=0;! q+ r9 m9 w: i: M
    __asm
0 i6 z6 j' f9 W# i+ s" ?    {
# `0 a+ f/ Q! e' M- Z        lea eax,dwRet) Q0 d& P5 ?* p9 V$ Z$ U7 A
        push eax! O7 C$ d5 `. v4 L4 Z# t; r
        push szCmd' ?5 r9 c: P, v- F  V, u+ p$ t2 n/ M8 f
        mov eax, DynamicData' W# v, u! F4 d' L- V0 G& k
        push eax
' {3 X: D, K! P- x! l3 V        mov ecx,[eax]5 I: Y, {1 w0 c9 ~
        mov eax,ecx
& h2 j1 E# V  l% m        add eax,iOffset5 q, z" {  M2 R- A3 [: q: s
        call [eax]$ F0 G* T! o& _
    }
, F! R8 |* p5 B    return dwRet;
# N6 A1 v7 g0 ~1 J, s( l  {2 D, t}
$ r4 ]5 C! {7 K% ]
* z8 n+ q) `+ w4 j& K- Zstatic const LPSTR  szdwRecentIP="dwRecentIP";9 u( W! ]4 R1 x" X5 ?5 `& n* z6 J
static const LPSTR  szdwIP="dwIP";, \& T5 b7 k$ E! c. R! [* p% w
static const LPSTR  szdwC2CIP="dwC2CIP";1 ?. H: }$ M$ i6 W* V: I: H8 w' ]
DWORD GetIP(DWORD Uin)
& N: E- |1 {1 G4 J1 q{
  ]& `& v: h0 l  r0 B    DWORD dwRet=0;
  F5 p. O; F, K: g2 [# j    LPVOID IQQData=NULL;% s) W* e! s" T/ x" V: N+ @
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
7 q& V4 d# i' @5 b  C3 z    LPVOID DynamicData=NULL;
  k* z! t: a9 ^: h! ]; i% v    PrepareData(IQQData,&DynamicData);
9 @+ A& a. e5 C$ K    if (NULL==DynamicData) return dwRet;
2 ]! i) a  a; b: y: S$ a4 K    dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18- ]0 ^! `* k( T" O- f" v5 `
    if (dwRet) return dwRet;" ^7 T) u! O/ @' j
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
. S7 \6 u, e, H$ z, J8 x    if (dwRet) return dwRet;
. y% o2 X( l9 C1 m9 Q, ^5 @. b2 ]6 h    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);* Z; g; F; P7 `( s) P" O
    return dwRet;
9 E/ g( V4 \2 S" v# V9 S: m  U}( \3 F( ~. d6 O$ l

; v' |: w" E9 d6 J" R) Istatic const LPSTR  szwRecentPort="wRecentPort";/ @4 R+ w7 j4 \
static const LPSTR  szwPort= "wPort";6 O# C: d6 P" S4 ~
static const LPSTR  szwC2CPort= "wC2CPort";' c: W9 f* x; G/ J6 M
DWORD GetPort(DWORD Uin)
& N8 F1 N! r3 s/ |8 d; f{
2 k) E- S) u, N$ H( R( h8 n2 L    DWORD dwRet=0;
' c8 a* u, q  Q7 a    LPVOID IQQData=NULL;
5 Y7 W, G7 r6 B. g/ K3 ], U    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;, }( @$ p$ F: x1 e! w) l6 s
    LPVOID DynamicData=NULL;% P+ L* R- A4 i- r! B. ?; H
    PrepareData(IQQData,&DynamicData);8 x$ i+ y7 j4 Z) j1 f1 R
    if (NULL==DynamicData) return dwRet;
" x7 q2 B4 V% }% ]" [4 u0 H    dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14
, Q2 j7 I! ^; U" b2 U# G    if (dwRet) return dwRet;$ M6 ~$ _  ]/ {2 |( `5 r
    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);& d4 I# ?% n4 P: z$ C$ ?
    if (dwRet) return dwRet;
/ V5 n* n* B+ b+ J9 N9 j1 L0 N    dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);
2 `3 A5 p2 \5 \# q! r    return dwRet;
" b# Z$ m) `" y- R; t}
" b8 J+ ]" a1 E* G" h0 o, n: F: S" ]) W" q0 U0 p
static const LPSTR  szwProcotol = "wProcotol";
( ]+ v3 Q( I& x7 c( [) fDWORD GetVer(DWORD Uin)
/ Y* Q  A6 ?% H; \0 L4 M# d5 e{
3 U; }  t% ]+ ?0 j+ w    DWORD dwRet=0;: {9 r" J8 M1 [) U& B
    LPVOID IQQData=NULL;3 R9 H5 A. x2 k9 C
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
" \: P7 f) O. v( ]    LPVOID DynamicData=NULL;
4 e% d& |6 ^/ \6 t3 @3 E    PrepareData(IQQData,&DynamicData);
9 S1 }5 `% p7 c  ?; B    if (NULL==DynamicData) return dwRet;
1 n/ r) m. o; q8 e8 i, Y6 c    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);' p8 |( a, m* V- p
    return dwRet;
, A, K2 `3 U! _9 ?}
8 \+ B5 F1 l  m! S! R
1 j& m# Q% P0 _9 f+ T: b8 u8 `原文出处:http://www.ye-soft.net/article.asp?id=43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-13 22:42 , Processed in 0.017797 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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