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

QQ IP显示的关键代码

[复制链接]
发表于 2007-10-12 14:06:56 | 显示全部楼层 |阅读模式
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧., i" O  _# j8 T0 A2 y
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.
6 C% U6 g9 z% }9 b" I. g
" L, p8 q! o$ \/ Estatic const DWORD UnknownSig=0x1E3A86BA;
! k! l! W! J1 tstatic const LPSTR  szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";/ U/ j5 M, K9 r4 R
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);7 f+ n/ U/ J* u8 r1 e
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
& \  `- R7 X; _' [- @{
" [4 ?+ w& v9 o# ~    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);; ^) B( p" g- y6 W- B
    PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);
2 A% O8 ~! q1 S1 d/ k  O}" S7 k2 `& `. |# u& f

% D" M0 \) P9 P" `0 t5 N* b: \DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)+ s5 g$ l7 ]9 P! g) P" c
{
, X$ D& p4 s) H% B( a    DWORD dwRet=0;
. B; B7 g1 d& G    __asm
2 M) S' l' L" K, c    {
$ U$ X. G3 _  f3 D        lea eax,dwRet2 i4 @0 j  T$ G, r0 D- J+ f
        push eax
( l0 w9 E& N  y) o! G( P        push szCmd
- q. R8 g4 \6 E- i. x* V& V. |        mov eax, DynamicData
6 O" y3 u8 a! c        push eax
5 h& u0 H) u$ M; k0 D        mov ecx,[eax]: `6 F2 U$ i/ q
        mov eax,ecx
- m$ Q3 y! _" L$ f; l) \  \& W        add eax,iOffset
$ y# [( a( F" @7 R5 Z" Y        call [eax]* e) T# b* m, C# B: O) |
    }
* S, A- `/ h% v9 m4 f    return dwRet;
& Y$ Q$ l* f1 I8 p: s1 q}
0 r3 Y  ~9 S# u0 L8 g
! Z# V' X7 T2 \static const LPSTR  szdwRecentIP="dwRecentIP";
9 s' G$ P8 u* i# u2 `; hstatic const LPSTR  szdwIP="dwIP";# l- _1 d5 g- B  [" |" N. |
static const LPSTR  szdwC2CIP="dwC2CIP";  @! x6 z+ L9 \- I
DWORD GetIP(DWORD Uin)# @3 G/ s7 O! V! X! S/ K) Y/ q
{
& G% Q9 F/ K  ^2 }- H    DWORD dwRet=0;' b' k' b' l# f1 n
    LPVOID IQQData=NULL;
1 W% m  B0 H# }    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;- f# P* O. y' D- A3 E
    LPVOID DynamicData=NULL;4 d3 d4 n% ?4 a8 N
    PrepareData(IQQData,&DynamicData);
) n2 |% Y9 E# k; b7 H    if (NULL==DynamicData) return dwRet;
" c5 W6 ?- o, a( T% I# R) P    dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
! ^) ]3 h% I9 C; i/ A& P8 i  t4 F    if (dwRet) return dwRet;
: g: l, y  U5 [% h    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);% \, [7 Q1 N5 C9 `9 Z
    if (dwRet) return dwRet;
' ^) V# x% }+ L: Q) u5 d$ x7 [4 w    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);
0 j* D: w( X  W0 q, W    return dwRet;
" l- u0 e# w; e, ^" o}
( V& Q6 j! c; ]& ~) c  [8 d2 T4 n$ ^6 ^/ p
static const LPSTR  szwRecentPort="wRecentPort";& E; P) K' w7 Q% M
static const LPSTR  szwPort= "wPort";
; x/ e. K' E6 {$ o5 H  zstatic const LPSTR  szwC2CPort= "wC2CPort";2 Z0 e: s" A2 W3 O0 J3 \
DWORD GetPort(DWORD Uin)+ V. N- P0 F$ r- }$ l$ l
{
* O5 A2 C  l3 J: P. \* z# _: Z    DWORD dwRet=0;2 \  u  S5 ?1 ?* C$ r6 w  _
    LPVOID IQQData=NULL;
6 {8 g9 p( }  T- j" T+ z* ?    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;! J' |3 i, m9 B# b2 X* j/ |' g9 l& l
    LPVOID DynamicData=NULL;
7 [3 K* i  `  Z0 U/ U    PrepareData(IQQData,&DynamicData);$ T) l; f2 j  z
    if (NULL==DynamicData) return dwRet;
3 Z3 d: H& ]2 {( Y* F3 w& g    dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14
2 |- Q: T9 v* x6 p; K9 U    if (dwRet) return dwRet;
+ b. ^" K( {  o; p1 g    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);
! r# h1 `/ z' J) G. [' n; V    if (dwRet) return dwRet;$ ?( g" C. H/ w7 J; G" @$ B6 c3 ^; `
    dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);6 |6 I' ]4 b/ }% {5 s! K
    return dwRet;/ F8 g  h! b; v9 b5 \9 ~  d
}
' b; B, w: Z4 ]5 G
: P* v$ }9 J+ q, y7 }( e  S: k# qstatic const LPSTR  szwProcotol = "wProcotol";
7 B+ N5 ]( M! V( c  NDWORD GetVer(DWORD Uin)
: P- z- n9 o  L; y9 e" v. [! l4 \{- u& i+ l3 X% @% D9 o- |4 T
    DWORD dwRet=0;* h8 ^) O8 x8 y- F5 H# n: U
    LPVOID IQQData=NULL;
/ E7 l3 x) s% [* u6 I, W( e    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
$ B* C" ?2 A6 H, p# }: z% \+ Q6 ^    LPVOID DynamicData=NULL;
: z: v) h" ?1 ~9 a6 e% H    PrepareData(IQQData,&DynamicData);$ R3 _5 f+ P8 ]4 a
    if (NULL==DynamicData) return dwRet;& i9 M: E- i8 ~  [
    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);+ T; @, C$ u4 ^! h- N4 b
    return dwRet;6 |& j# U. _( i, R( g
}/ @1 k" C: I$ ]* b+ r8 \) M
# [2 \/ x: P2 s5 r* J- I+ R
原文出处:http://www.ye-soft.net/article.asp?id=43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-5-2 07:37 , Processed in 0.016367 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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