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

QQ IP显示的关键代码

[复制链接]
发表于 2007-10-12 14:06:56 | 显示全部楼层 |阅读模式
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.& e. H2 V  d% O6 V: Y3 n& L
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.
" y! t' l6 b4 t
! c- U2 @& y+ }8 D/ x  \6 Z: i- w9 Fstatic const DWORD UnknownSig=0x1E3A86BA;
+ B$ X+ t1 |+ |2 r: S7 F. ^5 zstatic const LPSTR  szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";
# n. H; o# ]" M$ Stypedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);
/ s- }; _9 y" x+ G2 XVOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
6 P4 C, t/ F" ?8 R{' V, P# z" c( n* \" w. S, I
    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);6 h1 B! ?$ Z& i+ S) z6 y, @- J
    PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);2 H7 p& [9 ^( j: `" q4 a7 R% j
}3 a. N8 m/ [& x/ r
: ~4 R0 |! ~& Y
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd), z5 w3 X2 |. l. s, s' K; ^
{3 h9 D2 @% ]. N2 C$ }3 T
    DWORD dwRet=0;: V1 o; U2 ]6 K) C
    __asm1 X' _& x2 t3 `2 Q: o+ l4 j" x$ d
    {
2 e5 W! B! m- Z6 @+ P6 b2 T        lea eax,dwRet
* o3 x, G) p0 f% O- h2 @        push eax
, v: e: u' U) N& S6 K0 _        push szCmd+ ^# @# \) b% D" L( q1 C
        mov eax, DynamicData
/ d$ k  E) [8 f& e/ q- b1 ]        push eax
+ H/ Z3 W: k9 C2 l, J( [        mov ecx,[eax]
8 _) A& n4 m5 F1 J5 |* E        mov eax,ecx- @" v: n9 L" w  |
        add eax,iOffset
- B/ k% O+ ^* I- G" w, B% `        call [eax]5 C( F* ]" ?4 H# |/ w6 a, ^# J
    }
8 K/ O: S6 N, h1 F' ~    return dwRet;2 Z( l! t: U4 |' B5 i0 e% H
}
/ @/ S) v5 f& q4 o
6 S4 h$ S# `- N8 f' Nstatic const LPSTR  szdwRecentIP="dwRecentIP";
/ X; y+ z6 A  H8 G# Ystatic const LPSTR  szdwIP="dwIP";
' w% i5 I. f2 A  i; gstatic const LPSTR  szdwC2CIP="dwC2CIP";
3 l, _. l+ n. F! ^; EDWORD GetIP(DWORD Uin): O7 J3 q/ d) v8 A4 T' k
{
! ?6 S8 b3 b9 c" u    DWORD dwRet=0;
  l' }( B- L, q/ {  n    LPVOID IQQData=NULL;
; f0 @( H" N# m    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;% @1 m( k9 i/ ]  X
    LPVOID DynamicData=NULL;8 L2 U' g2 Z# q6 F' N
    PrepareData(IQQData,&DynamicData);
" F, \; o, X$ F) o9 ?4 ^. L& c6 C    if (NULL==DynamicData) return dwRet;" M0 E  W3 B% R' v
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18# b  U! ^; T% \3 Q0 A
    if (dwRet) return dwRet;
4 D4 ]  C- x  @! h1 g    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);+ J; a* y6 k8 Q; f
    if (dwRet) return dwRet;% A+ K; x  t( B" y) X& i3 A: g
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);6 d' g4 Z" D8 f5 ?' r
    return dwRet;
$ D! d: Z9 K$ z5 d8 [9 Y}8 \; A- ~1 G# B9 A( Y# I+ a
' M. f( t; {$ y6 s* j6 S
static const LPSTR  szwRecentPort="wRecentPort";
- G5 o& V# I7 `static const LPSTR  szwPort= "wPort";
8 l* ?' r+ Y" m" cstatic const LPSTR  szwC2CPort= "wC2CPort";
$ S: x$ G5 p: f" H3 Z3 Z7 vDWORD GetPort(DWORD Uin)  I/ K6 z( l- b$ {( S% y% A/ C$ ?( W( |
{( `! Z0 ?: |, d$ f8 g+ X% F
    DWORD dwRet=0;3 Q' N2 s  {* x* Y: Q* I
    LPVOID IQQData=NULL;, I- Z+ @6 B2 ^. o2 T" y
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
  G. Z" w( {% m; q; ]2 l    LPVOID DynamicData=NULL;
9 i  i3 C0 H: H# \. J1 d# I. Y    PrepareData(IQQData,&DynamicData);
- {0 Q" k% s: u9 D+ ^6 m0 k- O    if (NULL==DynamicData) return dwRet;
8 I* l; S9 r8 Y0 C6 a1 a    dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14# C* f% }: k/ `3 ~1 E
    if (dwRet) return dwRet;
" p7 V+ U$ g- i7 a! J$ I# M6 q/ [    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);; ~/ u$ X  D9 {  X, v: j
    if (dwRet) return dwRet;
5 m2 t+ P  N: w; i+ k4 b) o    dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);
3 q/ X! V+ ^% K2 Z5 Q    return dwRet;
, i" }3 W/ {" g/ T}% {6 y6 u; q1 u4 d9 I+ j9 Q

7 R7 M& m- L5 ~- p# i. O$ xstatic const LPSTR  szwProcotol = "wProcotol";
$ v, L. z8 X0 K) d' [DWORD GetVer(DWORD Uin)
9 n  o' _  e* y8 a1 U{
  }- p3 _! H2 p. j) s4 H# P    DWORD dwRet=0;
; g/ ?$ b: t9 K% a* l7 h    LPVOID IQQData=NULL;
0 E* V- ]- w' d# I2 J, X6 t    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
+ s% @5 K( D4 H9 }6 y8 C$ [    LPVOID DynamicData=NULL;
; d. a/ N, H* y' D. b9 T    PrepareData(IQQData,&DynamicData);3 V- D9 u/ h# w& i9 _9 h3 i
    if (NULL==DynamicData) return dwRet;
  h. Y( P( z2 [/ C    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
0 b; n% }5 k$ a: ?. y8 p    return dwRet;, ?& ~$ B6 h: I6 r
}
* @4 N# i; J. j0 s. P/ L# H  B; L! u# M8 i% H
原文出处:http://www.ye-soft.net/article.asp?id=43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-8 20:15 , Processed in 0.034245 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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