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

QQ IP显示的关键代码

[复制链接]
发表于 2007-10-12 14:06:56 | 显示全部楼层 |阅读模式
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.
% C6 X; q1 S; m: i. z. {* yrunjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.
* |, ]# I- I  I" m
* T8 i! r# j& Q& r, ?static const DWORD UnknownSig=0x1E3A86BA;
5 }. b* }4 K- [, X8 f' T, Ostatic const LPSTR  szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";2 M( U$ l- j- k, Z
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);
- D( \! S: @  `) N* \# X9 rVOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)5 X% m1 ]# [8 f
{, Q. ~9 A3 G7 ]
    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);4 o; j* u, i  c5 O: X/ Z8 g
    PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);
' [% d4 G$ i% R}, i' P6 K/ y# [7 s) v
+ C2 A( p" s+ h  {# s- {
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)
/ I0 `. c% ^: n3 A) }' z- w/ |2 e0 z{
' p( ?3 {  j; k: ]3 m1 p    DWORD dwRet=0;
6 c+ m7 S- Y: S! z0 Q% Y    __asm
% C2 |. W6 Y* r8 I8 L    {4 h6 W5 F* r; D6 B0 R9 T4 z
        lea eax,dwRet+ |* x: H: `. u
        push eax  U& F9 i2 C% D# b0 \
        push szCmd; b! G5 ]* W" m$ j7 M; [1 l: s/ s4 y& c
        mov eax, DynamicData1 ?0 d9 T4 z. U- Q: v
        push eax; |: }  ]% Q; N' a6 c" O
        mov ecx,[eax]
% R' y- ^+ Y$ j7 m        mov eax,ecx3 r* q$ |- B' }3 z5 ]
        add eax,iOffset
( X8 J* G& K: G        call [eax]
# _5 A8 @: ?9 l/ m3 j9 `    }  V4 v7 C+ x# E' P8 a
    return dwRet;: F. l2 s% Z+ b4 K( O* {
}
5 m3 `( b. D7 [6 M
6 D# B  C& G6 X4 h% Kstatic const LPSTR  szdwRecentIP="dwRecentIP";; c5 g/ X- q( r: B6 p8 o
static const LPSTR  szdwIP="dwIP";3 F9 H5 g3 Z0 ?9 I. ]
static const LPSTR  szdwC2CIP="dwC2CIP";# u  y# s' f  K3 ?/ |) ~
DWORD GetIP(DWORD Uin)
/ M' u% i) Z% ?9 x) u, @5 s9 T' E( Z{* Z' h9 D0 K9 p1 S
    DWORD dwRet=0;
4 r# K( h5 j3 t    LPVOID IQQData=NULL;% s( X4 f: P+ G" E1 @# L
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
4 H" H. X, ^5 d# r0 G  p    LPVOID DynamicData=NULL;7 n2 L& E/ d. M5 c
    PrepareData(IQQData,&DynamicData);
* [5 Z# g/ z0 p8 H2 P0 G+ h6 g    if (NULL==DynamicData) return dwRet;
9 I. z, V+ t4 s- s  a    dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
2 I7 \. D3 U, R6 k    if (dwRet) return dwRet;
  J: y& x8 t, `    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);6 ~) Q; J; \/ J) r
    if (dwRet) return dwRet;
/ k& ^5 j- M% ?& g    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);
3 \( ^# M$ v/ {    return dwRet;
5 m  b" {  f. l  ^6 _; w: b}
( o% a" f  Y0 v( e
# q7 Y  E9 L. |* ~7 r' K- T& C. ^static const LPSTR  szwRecentPort="wRecentPort";8 b- o: x5 S: c+ \
static const LPSTR  szwPort= "wPort";
' H7 Q; F6 |* v% {static const LPSTR  szwC2CPort= "wC2CPort";
+ M$ S, \: C, }8 x" }6 KDWORD GetPort(DWORD Uin)9 E' U9 N5 I0 S/ a
{! o. C# {: ~6 }4 K7 E
    DWORD dwRet=0;
" C# v1 X0 G0 }3 B: v# O1 u  u( z, c    LPVOID IQQData=NULL;. c  L* g# \2 X2 ~4 [0 V
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
( _; W$ c0 Y, K8 N) h    LPVOID DynamicData=NULL;
+ a3 m3 W0 t6 {' {& }; S* r    PrepareData(IQQData,&DynamicData);" c3 d' F& R8 f. s1 H
    if (NULL==DynamicData) return dwRet;
: C' A% H) F) Y9 |5 X5 ]/ s    dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14
3 q% v9 G9 z/ U$ F0 y$ I    if (dwRet) return dwRet;
! Z# v: D% I& w7 N    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);
# K6 z: z( M  t2 a7 n; p1 M5 \    if (dwRet) return dwRet;
4 N6 k" L, m; K    dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);4 ]7 h( c& d8 Z: x8 [  U, d' u* {
    return dwRet;: U8 h  ^4 u: R, ^- A; u! @
}
; i; o9 W; ~1 D
. S+ m8 U6 q7 d. V/ T5 y( [static const LPSTR  szwProcotol = "wProcotol";- t5 V: n- @9 E2 w% _2 c
DWORD GetVer(DWORD Uin)- ^* H8 h6 I8 r0 F
{$ R& G1 U! c7 g3 o! B
    DWORD dwRet=0;- j+ f) g, U/ e3 t+ K$ {# X
    LPVOID IQQData=NULL;7 D3 w- a# r7 P, j* g4 i
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
5 G6 D" f8 H1 o$ e& f    LPVOID DynamicData=NULL;8 f1 l! a: I* N$ U
    PrepareData(IQQData,&DynamicData);
) _7 @! C+ ]' x* Z: a1 Z    if (NULL==DynamicData) return dwRet;9 z  D7 J) i8 u/ q" b# G
    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
- T$ I  n4 Q5 ~6 x( {3 ]% v: x0 a    return dwRet;% k4 n- o, _& a% A% k
}/ L  p7 J8 d" a: {9 q$ Q

+ Y7 p9 H$ v! o% w3 |% _2 B* t7 h原文出处:http://www.ye-soft.net/article.asp?id=43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 06:19 , Processed in 0.018274 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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