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

QQ IP显示的关键代码

[复制链接]
发表于 2007-10-12 14:06:56 | 显示全部楼层 |阅读模式
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.) ^' @8 j( O6 X0 F6 F
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.
5 ~* [8 |  m0 o4 F& G
6 c$ ^0 [( j( `5 @. }static const DWORD UnknownSig=0x1E3A86BA;
4 E" t3 L5 E+ l! [2 }7 ^  {* U( Jstatic const LPSTR  szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";; `7 a; f/ D; H
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);
- B3 x5 u- h, \2 d1 F. T; QVOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
; N# r% u5 Y+ z) |# M{
7 |+ m* u; I, H1 a& B* _" Y    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);& `' y  G3 b8 a4 ^2 r9 F
    PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);3 s3 j/ s4 ?9 ]5 V4 o+ y( }
}
; }( b$ z; ?" S  ~4 R
9 U% K# R& N$ `: C" q- o7 o7 r4 eDWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)
4 n& U4 t9 G! G7 z; w# o# Q{
8 o- N+ Q+ C$ |) V$ @: \/ s    DWORD dwRet=0;
0 q: I- H: }1 S# u    __asm' T6 E' d( {0 V# z. @
    {
& q$ u8 w) Y/ T+ U' d$ X) K        lea eax,dwRet
' [: ?/ B  ]* r6 O/ _% X        push eax  I+ N5 n9 i9 G9 {& I! t
        push szCmd' F$ e! K- r7 _
        mov eax, DynamicData
1 e1 K/ Q( t- {2 F; b        push eax2 v! [" [3 s5 A$ B( f5 x
        mov ecx,[eax]$ O* _, i% P( X! @- L# L' `
        mov eax,ecx1 ^. d5 _5 l( {, K% _) ^! U2 Y: n
        add eax,iOffset
7 m) k7 ^5 `+ e; q; Q! Q( J8 r        call [eax]& f2 k+ U: A7 P8 B# W
    }
7 C6 c! N4 \  K  @    return dwRet;7 ?9 V$ _& K0 {: {4 B
}
. F) P4 w. e: I8 @4 g* f$ }; I  l3 p! i& B- i' P( X
static const LPSTR  szdwRecentIP="dwRecentIP";8 y9 a# c) O% t3 ~/ l
static const LPSTR  szdwIP="dwIP";4 ?* G% L  I: z- N- ]2 e6 ~* d
static const LPSTR  szdwC2CIP="dwC2CIP";
: b+ C& j4 U$ r: v6 h5 EDWORD GetIP(DWORD Uin)
& P$ k3 u- e/ ?! Q4 V; \{9 q8 Z& D* b2 z1 ^  m: n) r
    DWORD dwRet=0;1 X- z6 [' K9 G8 P5 D/ p8 G% `
    LPVOID IQQData=NULL;5 c: \9 G4 a% L; x" |
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;3 x/ D2 y1 Q4 q: ]6 v# V
    LPVOID DynamicData=NULL;; {2 q7 v" U3 l3 x6 i7 {
    PrepareData(IQQData,&DynamicData);
7 X! G  [9 P- [& {( I' T! f; ?0 t5 |    if (NULL==DynamicData) return dwRet;
3 s$ i8 I% b9 f5 R6 x( M8 y% u    dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18- d- R) b: \! }
    if (dwRet) return dwRet;
( d& Q1 Q1 g3 r6 a$ ?9 i8 P8 o    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
* z: W/ Q+ y$ F% ?    if (dwRet) return dwRet;- A+ K$ p% i( h+ P
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);2 [2 i& g5 \( ^) u- P. e1 ]$ L
    return dwRet;6 ?; u  E! b, ]- u% C; {0 {/ M
}6 T0 [% v5 [5 Q9 ]) B$ k* Z# R. U
9 o1 A& v# e/ ~! k& \4 l: B7 X2 Z0 v
static const LPSTR  szwRecentPort="wRecentPort";2 O# }6 N4 @) }1 Z
static const LPSTR  szwPort= "wPort";! f' _( ~. f. M& U( U" }
static const LPSTR  szwC2CPort= "wC2CPort";
6 Y4 a6 f! h% b" d$ L* [. K" mDWORD GetPort(DWORD Uin)& F- M5 X2 O+ T- \
{
1 i+ s& {, x5 L& k    DWORD dwRet=0;
5 q0 V+ F# u9 Y7 r- J2 D    LPVOID IQQData=NULL;
5 F, F4 Q, n9 ?- l# E8 m+ o    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;, m: \; }) b/ @
    LPVOID DynamicData=NULL;+ B. q# z8 [* \+ `4 r( c+ ~
    PrepareData(IQQData,&DynamicData);: f) @; K+ T) N6 n
    if (NULL==DynamicData) return dwRet;7 @8 n" A4 A& T& _# ^4 q
    dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14" v% T' m/ r& @7 B- k" W7 D. f0 ?
    if (dwRet) return dwRet;3 p: Z; T- i) Z9 Z
    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);
- I% Z/ }. R8 P/ W( ~+ \    if (dwRet) return dwRet;
+ v% d9 \# ?4 w4 Q    dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);
8 g3 S  f& N7 E$ ~# Q1 Z: w    return dwRet;
# ]4 R* s) w1 t9 e% \- |}+ M7 P/ Q. j+ b* p# Z0 G

+ ?  m: a) k7 Q* Xstatic const LPSTR  szwProcotol = "wProcotol";
! a- Z' o. k4 R, O% e- wDWORD GetVer(DWORD Uin)) N1 G* O7 `. z/ m
{1 C; F" `3 i# u% {; t& d
    DWORD dwRet=0;7 u' }& @, m# e% X
    LPVOID IQQData=NULL;
# r4 O6 @4 x+ S$ X+ E3 f( a# V% j    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
- w0 o) D& q. L. u6 z" E! N7 v    LPVOID DynamicData=NULL;
1 s# z2 p' [, U/ q" {% }& G    PrepareData(IQQData,&DynamicData);' N4 U% y" k  s4 w
    if (NULL==DynamicData) return dwRet;* v4 k& K; ^$ \
    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
  u& _& X' |6 |6 ~& i; ^    return dwRet;
* @9 K8 V' U# J+ s7 J6 G}3 W% m" G2 y1 _/ j7 _- a
/ g1 U/ F" e& z# _
原文出处:http://www.ye-soft.net/article.asp?id=43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-14 02:11 , Processed in 0.018845 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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