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

QQ IP显示的关键代码

[复制链接]
发表于 2007-10-12 14:06:56 | 显示全部楼层 |阅读模式
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.
0 P/ {) x, T2 A3 `9 O5 Trunjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.
( x1 V4 w6 U2 \1 G0 `
9 l" }; r6 t# ^6 Ustatic const DWORD UnknownSig=0x1E3A86BA;/ ~, Q1 T% ?" c) ~7 ~) r0 v
static const LPSTR  szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";, h9 j4 T( E- C( }
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);# n, c% t5 K9 X5 C6 B$ t
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)1 J1 k# z) u& @$ Y
{$ d! i) h/ N+ ]5 o' ?% k' X
    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);) g- y2 K/ N, I) Z# ?) q
    PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);/ p8 R+ X6 x5 t2 B; l4 i
}
) y) t/ g3 l9 z# h8 l" J4 j: x- [/ X2 B- C5 A' T3 O. T# u
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)1 S( R, t7 {: F. d. g/ D
{! Z( U9 U) T% v' ~7 i, o
    DWORD dwRet=0;; W& z7 C! p: t5 O
    __asm5 T# @& s$ h& S/ Y# k  `, H/ t
    {
9 k4 l8 g/ ?. b  E        lea eax,dwRet3 m1 w. {; C/ X# E: B% H1 O
        push eax
5 b& _' i5 H+ Z" L        push szCmd
4 ]5 ], Z$ n- H4 z/ ^+ k        mov eax, DynamicData/ O9 T9 z  l( q/ S$ ~% M5 J6 v
        push eax
; ~6 o( K& _. W$ o2 s. {        mov ecx,[eax]
, }/ j4 f" _  \; w7 J5 P        mov eax,ecx) M' Y0 U7 [. g2 j1 P$ n
        add eax,iOffset) K# Q5 f7 v+ M! I* R0 L
        call [eax]0 j7 |3 K# x8 N9 ^- A/ c. ^
    }' ?* X5 R" }% u  n8 R
    return dwRet;
) u1 \+ z/ W% c}
. d3 r& D* g3 U" Z5 p* Q6 }$ ]7 v" V3 H9 v2 m+ |
static const LPSTR  szdwRecentIP="dwRecentIP";" D( R# U9 W8 i' g7 L
static const LPSTR  szdwIP="dwIP";
" J' y/ t. q7 d' ?7 I  _static const LPSTR  szdwC2CIP="dwC2CIP";% @$ ?$ `& g" w2 h6 r
DWORD GetIP(DWORD Uin)
9 A/ ^% |( o% n( M{7 X: U( Y+ [4 s/ j$ d( [7 _
    DWORD dwRet=0;
- S9 B8 L4 z4 @5 F) n    LPVOID IQQData=NULL;1 P" Q' [; j" w3 ^, z$ i
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;* Q7 ~$ v9 }; ^& H( q
    LPVOID DynamicData=NULL;% G9 y+ }) O6 j9 b$ e- v1 Y3 F
    PrepareData(IQQData,&DynamicData);
; v/ ?! h3 x& X0 U9 u    if (NULL==DynamicData) return dwRet;
  g7 X* p# r$ G* }    dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
, G4 ]% V! P, Z! g+ g3 H    if (dwRet) return dwRet;
& z3 N2 W$ B, @0 h    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
/ [7 h& i* E. ~) e    if (dwRet) return dwRet;
4 [9 b% ?8 ^2 c/ j+ }; G! |& I/ K  L    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);7 o1 W4 h3 I2 F: V( N; T
    return dwRet;
0 @: o2 [4 n; s. i+ G}6 ^& H" Z5 E" D& s8 J! ]# `- X
: |' c. @) |" B6 d
static const LPSTR  szwRecentPort="wRecentPort";4 q; F& X2 i- P0 e+ p5 P5 K4 A/ j
static const LPSTR  szwPort= "wPort";& o; j8 O( J( q2 D
static const LPSTR  szwC2CPort= "wC2CPort";
1 n% D& j, x' I/ p% A! }8 PDWORD GetPort(DWORD Uin). c5 W1 @7 B5 n
{
) X& E  M. l$ t7 ^8 h    DWORD dwRet=0;
' V1 |9 ^0 X7 L% C( s- P% u4 ^    LPVOID IQQData=NULL;0 r4 l7 }. ^# G1 U
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;+ I8 Q- O$ M( D! Q
    LPVOID DynamicData=NULL;* U, ^- g+ E2 u0 R
    PrepareData(IQQData,&DynamicData);( x& }. R, ~/ N
    if (NULL==DynamicData) return dwRet;9 {5 @$ b* D3 Z2 ]
    dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+147 c( T! `: @! f) Q: W' _
    if (dwRet) return dwRet;  @# o' o7 J: F
    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);
2 \# x7 Z/ o4 K8 `: D& c% b; U    if (dwRet) return dwRet;( i7 O8 n) ~% k$ z' J
    dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);
& F) N4 \! e$ d+ a* ?/ R% ]    return dwRet;
# P5 n7 |* {  u" Y# U2 C, R}  W" |% O# J" Q1 ]! f

7 y+ @8 s$ q( X& fstatic const LPSTR  szwProcotol = "wProcotol";7 s/ y) v" _, f: i5 V
DWORD GetVer(DWORD Uin)3 U0 X6 r1 e. b# u, r# E
{" b1 d; M- Y2 L
    DWORD dwRet=0;
- d' W* k0 ~/ d  G% v; `; P1 N) C    LPVOID IQQData=NULL;
8 H# p9 Q) m+ R    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
  I8 t7 D: @! w7 g; }0 l    LPVOID DynamicData=NULL;6 H+ F8 Q: ^1 n0 a
    PrepareData(IQQData,&DynamicData);9 s3 f' ?7 B4 a) f# M  F9 A, }
    if (NULL==DynamicData) return dwRet;' u* k! m5 _3 F
    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
7 v0 z" [2 O# Z$ e+ }    return dwRet;
! Q6 ?6 Z! {/ f, q}5 ?; G) g9 G4 ]0 A4 A1 n
: ~4 A* m5 ?: @% g/ O8 G
原文出处:http://www.ye-soft.net/article.asp?id=43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-9-30 10:37 , Processed in 0.035209 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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