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

QQ IP显示的关键代码

[复制链接]
发表于 2007-10-12 14:06:56 | 显示全部楼层 |阅读模式
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.; N2 s8 k4 c6 D1 H
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了., f, L# s% I+ v( C# \/ v* J) Y# S
! E. L* [+ a+ l$ A. {7 c7 j
static const DWORD UnknownSig=0x1E3A86BA;9 c, `* `6 v* v: v0 ]
static const LPSTR  szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";
  ~8 ]" X3 B" m# u7 }typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);/ x6 B: U- M8 L4 @' w
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
- u# ?# ]; |" {6 H{
5 ?" W/ y% ^/ U( s1 \- u6 U4 M    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);
- P4 O  O8 o$ `- k( t# O' a    PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);$ p/ d  y" a  V$ P2 o9 q
}
, }( ~! o5 q! g: C# _, W8 k3 E) o& s& k; {$ c
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd); F3 u/ W, d# Y& W! A, Q; p
{
6 V( i$ s2 x# A) N5 O! ?    DWORD dwRet=0;- R3 t8 F) y/ S* c
    __asm8 R- O! e) E6 {1 x0 |3 \% S. k
    {( O" R/ E3 g+ f) S8 R, C! D8 h
        lea eax,dwRet- e- Y  J3 u# Z4 u5 F! K
        push eax% ]8 T! K! ~& k+ D
        push szCmd
: ^, J+ k) ^+ T8 j$ B        mov eax, DynamicData
( s' P/ D, m0 R+ N8 G# B! O        push eax! r7 [, U' @, `: S
        mov ecx,[eax]' }2 ]* f# Y' X, E. u' R2 Q' O
        mov eax,ecx+ }2 H9 d! h8 {8 g
        add eax,iOffset
6 B+ b( h1 @& F, k3 M        call [eax]( n- o3 @" X! A7 b) u
    }" m7 B. j7 K6 }8 r7 G, j2 L
    return dwRet;* u" x/ x' \3 ]. r
}
% e; z4 {( `) [2 \8 s" Z
# p9 j* L  v& r" ]5 _static const LPSTR  szdwRecentIP="dwRecentIP";
* Q" Y7 l; ?* h) H$ Y) Ystatic const LPSTR  szdwIP="dwIP";1 E8 l2 k9 i5 q$ o* x
static const LPSTR  szdwC2CIP="dwC2CIP";
0 S5 c9 p0 J3 c$ JDWORD GetIP(DWORD Uin)
9 O) F4 F& T; X' S{
9 T9 i% O# B6 F# P/ b    DWORD dwRet=0;) |$ T" e# v5 ?
    LPVOID IQQData=NULL;" b4 Y4 Q3 n, |, W7 z) R
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
2 n# ^1 b* V3 `/ v& D* w    LPVOID DynamicData=NULL;) d8 X0 X1 O" A0 x
    PrepareData(IQQData,&DynamicData);+ X/ c5 K: E4 Q; l' u/ r
    if (NULL==DynamicData) return dwRet;
8 c5 U/ l6 E8 ?    dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
1 ~+ ?3 T# h9 f6 g" k/ L    if (dwRet) return dwRet;
% C2 \8 |4 x! {9 |9 V0 w) T" e& Z    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
4 h. k9 r8 u! N+ G  |    if (dwRet) return dwRet;7 B# L: Y+ [) n3 c% g
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);7 e4 L8 e! \/ S
    return dwRet;' I; j+ g+ k) I$ I! L
}
4 G9 t9 G* H) M! Z& h+ Q6 L! ^. ~
5 I( r2 W- m8 \  G% J' sstatic const LPSTR  szwRecentPort="wRecentPort";  e7 h) T4 q0 A2 a  N" b% u$ G
static const LPSTR  szwPort= "wPort";7 _# F0 M# O) E% C) ~4 C9 H
static const LPSTR  szwC2CPort= "wC2CPort";
- z! A9 U9 n/ \- f  }- T3 {DWORD GetPort(DWORD Uin)' [( B& d" s5 v, s! Z; G4 ?
{6 C4 h* n) g0 u* \- Z0 V( W
    DWORD dwRet=0;
0 c9 _8 X1 a! o3 C5 N& r    LPVOID IQQData=NULL;
4 W5 o# e, V# e! P$ k8 S' Y    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;. \1 b2 f3 e( R5 B' B
    LPVOID DynamicData=NULL;
' `( F% p5 [9 c. J& N5 q    PrepareData(IQQData,&DynamicData);/ w  }) H# @* C; }
    if (NULL==DynamicData) return dwRet;; B: M, e6 n8 Z- E
    dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14
2 P; D% J2 B* _! w    if (dwRet) return dwRet;6 `( o' \! V. E: r9 B( B: Q
    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);9 o0 N6 K5 ^# \0 N- g% l4 V
    if (dwRet) return dwRet;
& f" y7 S0 y# }* \3 |. Z, ?; m    dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);) h9 ]. Z! x& X2 [# M$ j3 Y
    return dwRet;
$ N. B$ m/ _/ F# E; M}9 h! x; u2 Z* L, _  F
: D0 ^0 `5 H% `( Q- g0 _1 t
static const LPSTR  szwProcotol = "wProcotol";* s4 {2 z$ f0 H
DWORD GetVer(DWORD Uin)
7 H5 o. x$ M' v{2 b6 h5 O" x* r6 |% q# ~0 [- @
    DWORD dwRet=0;
& X7 D0 |8 ?' f    LPVOID IQQData=NULL;
* e2 \* t3 F5 R" S2 Q5 E& p    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;! G; S% w3 d2 N
    LPVOID DynamicData=NULL;
* ?$ F, _! B, ?5 @5 D% _. i    PrepareData(IQQData,&DynamicData);
! c5 S3 ?7 N3 e3 y    if (NULL==DynamicData) return dwRet;
6 E% N, N# f. z$ n! q    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);9 r* A& v# {) B) M2 N% t
    return dwRet;
3 v# B7 x, {+ o! V! T2 F}
' D( {4 d1 K" g! G
: q- Y1 ?2 c$ {0 k% `0 m* f原文出处:http://www.ye-soft.net/article.asp?id=43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-19 03:20 , Processed in 0.014472 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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