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

QQ IP显示的关键代码

[复制链接]
发表于 2007-10-12 14:06:56 | 显示全部楼层 |阅读模式
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.
8 [! p  s$ a- N* x* erunjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.
2 z( o$ X& J; z' @. B! z
+ ]" Z" b4 l/ P- l9 J' R  kstatic const DWORD UnknownSig=0x1E3A86BA;/ C# R1 }5 o' g
static const LPSTR  szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";1 A4 u0 \: ^$ C1 k
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);( h/ j$ s$ a2 T- ?0 x
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
6 }) D' V# d+ R9 P) I! u0 O{
: Q0 I8 @5 {8 D" B3 u, L# P    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);% U* E, t" }) E; _. A& G( h) z
    PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);) h2 Q* ^8 g/ l! J5 P4 y3 a  n8 w( n
}
9 s4 p  b) k8 [' M. A; F- k! K. B5 c: q  G0 |. D" q9 `
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)
- B. Z1 Z& A. V( |, o{1 L+ z+ m0 G6 p$ }5 ], v
    DWORD dwRet=0;$ ^$ b0 Z) y* E3 p8 Y  Q8 q/ I
    __asm
) C! @0 {" n! K9 k: B' [% f    {
% D$ `4 W/ i) w; z4 p% ^: M        lea eax,dwRet
# V8 S5 c4 z$ i$ P" E, J3 M0 M        push eax
' Y. E6 ^$ o# [! M        push szCmd0 ?4 _0 }" w5 l  ^1 l4 [
        mov eax, DynamicData
8 r- A: u9 d$ ~$ ^6 t! n  n        push eax$ d) ~, r" u4 q- ?* `" G
        mov ecx,[eax]
! E! d8 n1 g, C& \        mov eax,ecx
$ V2 {) Q; w/ e0 D' C5 g! V        add eax,iOffset- t! s5 E9 i: o9 O4 y1 v$ x# x* x
        call [eax]% B4 }4 S" G0 u4 B
    }
4 J  I, T# ]; u    return dwRet;
( S: u3 ?5 p4 f% u}3 n. v# s9 P  I; T

+ s( R5 }. {7 Rstatic const LPSTR  szdwRecentIP="dwRecentIP";
8 K! ^1 O# H5 f4 i2 r; l1 O5 kstatic const LPSTR  szdwIP="dwIP";
) p; h) [3 o4 P; O% Dstatic const LPSTR  szdwC2CIP="dwC2CIP";' v) H# y, u! l. z7 Y( f
DWORD GetIP(DWORD Uin)
# z% c- K0 B3 L{
7 b" H2 L: p% P  w" O" G    DWORD dwRet=0;
4 ]* l! R( @2 t; r) A. b    LPVOID IQQData=NULL;+ ^7 r/ d% k+ x
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;' i) l- q" M' X' }
    LPVOID DynamicData=NULL;- [- e9 d: C' Z- v7 ]0 C' d
    PrepareData(IQQData,&DynamicData);$ P% Q) t# g5 q: I
    if (NULL==DynamicData) return dwRet;
/ Y; Z6 h  o. `. o    dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
. q3 K5 ?' ^6 G( P4 f    if (dwRet) return dwRet;* A. [& [. k8 n/ G( I
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);9 d  f; Q3 g5 S
    if (dwRet) return dwRet;; B& G4 o$ A# Q
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);
1 v7 M; s' v: I# a4 C    return dwRet;
. z; v8 p% P" B$ ~4 I}
) r* `3 l2 L# k) [$ N. e
- r: I: F3 E3 Q: M* P* i" ]static const LPSTR  szwRecentPort="wRecentPort";
/ y! j8 w/ L9 [1 @; f( `4 w! B- Istatic const LPSTR  szwPort= "wPort";
+ ^& p! F6 a' V5 F$ }8 j8 Y6 H! m2 Ystatic const LPSTR  szwC2CPort= "wC2CPort";% {4 W3 E8 B/ v( ]  p% J( o; F% @
DWORD GetPort(DWORD Uin)
6 Z* X) ~( r( S8 N; R& j  O{9 z) M+ @' m3 g) Q' h# Q
    DWORD dwRet=0;
8 i  k  g% G7 n) u+ X; O0 U& V    LPVOID IQQData=NULL;
% u/ I6 i4 u/ f- U2 {/ V$ y    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;& S+ {) x5 w5 |" D
    LPVOID DynamicData=NULL;! H: x5 m: {' }
    PrepareData(IQQData,&DynamicData);* ?  X' g$ ?4 z+ @9 t, _6 q$ }
    if (NULL==DynamicData) return dwRet;/ L+ F* j! H% R, b3 N0 m4 V
    dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14
0 l. @$ e% e/ j+ N    if (dwRet) return dwRet;
0 F6 G1 M4 p; H% L1 a) M    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);+ U2 I; @8 @/ u  {
    if (dwRet) return dwRet;
, ~# N5 X- h. j, x    dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);
. |' _5 t% ]7 O. l' R; w    return dwRet;
8 I5 N: k! p. v. P( m3 \( I  K; M) X  M}
( C, b  c* K9 o' ?* q* U2 a& |1 o( ]6 ?/ A4 y  v1 J' ?& {& C6 `8 X# E, G2 X
static const LPSTR  szwProcotol = "wProcotol";
( E: o, C; N4 c  [; d( ODWORD GetVer(DWORD Uin)+ n" _1 T0 h, w
{
2 d0 T& n2 _, F9 u    DWORD dwRet=0;+ O) M! L' \3 Z. j' r* U. x* I
    LPVOID IQQData=NULL;
. J$ D4 t! H8 ]    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
/ p5 M( J% q. V    LPVOID DynamicData=NULL;" G  L6 `- x9 I" X
    PrepareData(IQQData,&DynamicData);
$ R; Q& _* Y- c1 i4 A+ G    if (NULL==DynamicData) return dwRet;
! W1 o2 F: R! e6 Y9 D/ ^    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
4 b( F9 T1 }& p" F/ R    return dwRet;2 w8 M# k, s( [" S& l
}7 c0 I* z  f5 }+ M5 f

" `( v& ^9 u$ p6 {& _/ g7 p原文出处:http://www.ye-soft.net/article.asp?id=43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 04:59 , Processed in 0.017216 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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