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

QQ IP显示的关键代码

[复制链接]
发表于 2007-10-12 14:06:56 | 显示全部楼层 |阅读模式
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.
: c* u/ U; q- Orunjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.
$ q$ {( o  i; q& E
6 j$ ~* M  A+ }! B6 z* cstatic const DWORD UnknownSig=0x1E3A86BA;
1 O: z- \, K7 s1 [) ~6 d+ Sstatic const LPSTR  szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";
+ u4 Z9 }! Y$ C5 dtypedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);" V+ c, j9 [) x. B( R0 M; ]: d
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
  i5 |; }$ y  j8 Q: z, w( ]{  h; s. J! A) s+ f
    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);
1 s2 h6 X- N) J9 I, H    PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);
- {5 k8 D6 S# D4 l* v}" w; I! [4 V/ _2 D. w
* n. M' u& K5 R) W
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)5 C5 G  A9 a* r- o2 l
{) m9 M& S# P4 N
    DWORD dwRet=0;
1 ~2 z1 `! {7 F9 s: b    __asm
5 D, A6 o" X# j7 S1 ?( r4 e( X    {4 `& z! _" B* j; X
        lea eax,dwRet* H* z4 P: h; c) p
        push eax
% i3 k6 ]5 X+ W6 O! c1 V        push szCmd9 D" W8 R9 A. Y- m3 ^/ t% P0 l
        mov eax, DynamicData
* C  W( q' a4 @8 E* N. h6 Y" |/ U5 N        push eax
) P% |3 A1 v2 ]' m, f/ l        mov ecx,[eax]& {+ {# b9 d8 Q$ u; T3 p
        mov eax,ecx
8 [3 }0 x" l, V$ N# w  M        add eax,iOffset
9 @& x% T  E" u        call [eax]4 F8 [/ T1 o: o3 m" o+ p' _+ Q1 w
    }4 R$ o& W, |6 r& q+ A
    return dwRet;1 K2 U' N& b* z# ^+ S& l5 p
}$ a+ {3 `# f+ J0 A$ g& @) x& _8 w7 |& x
; g0 G; T8 U) ^2 C7 j' j
static const LPSTR  szdwRecentIP="dwRecentIP";
1 x: d3 {2 {  G! zstatic const LPSTR  szdwIP="dwIP";* }2 o9 g' [3 }( ~3 V4 ]9 ~, X3 m
static const LPSTR  szdwC2CIP="dwC2CIP";
( d* U2 q+ U1 e& D! LDWORD GetIP(DWORD Uin)% R0 M7 V1 Q4 @8 t8 j& @
{9 s$ }* d. D  V/ E/ M
    DWORD dwRet=0;
( R6 J5 c& W$ V* U" V# {& [+ E    LPVOID IQQData=NULL;
$ a( R; `  u% x* ?3 I    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;6 @) [$ P  j2 @
    LPVOID DynamicData=NULL;0 \8 T+ `' ^% |& D/ u8 k# u5 H
    PrepareData(IQQData,&DynamicData);
7 v4 D0 d- ]6 {& Z    if (NULL==DynamicData) return dwRet;
3 _+ q. {2 b; E0 T4 m    dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18/ g+ x% A% U% r
    if (dwRet) return dwRet;
. n) K- @8 c. i! J$ {    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);2 z% N# `* W# s
    if (dwRet) return dwRet;* v2 m: N5 a- X0 k
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);2 r  ]8 D8 ?. b$ ~
    return dwRet;
% K) ]. C  M& \: ]0 P) P. A  X}
: B; ?1 a1 X& H& V7 W6 H! g) L# R9 p3 E  K+ W3 N) i
static const LPSTR  szwRecentPort="wRecentPort";/ i! n+ S' F# o  s. i
static const LPSTR  szwPort= "wPort";
' v7 p; Q( W" Cstatic const LPSTR  szwC2CPort= "wC2CPort";4 x/ S/ U. R4 N+ w( l5 K
DWORD GetPort(DWORD Uin)
6 ~, q  i! [) K4 ?; Z{
5 N  o4 ~. B. a# K: j    DWORD dwRet=0;
3 \9 H1 u- N; ]( Z. ^0 U* `# w9 j    LPVOID IQQData=NULL;4 w7 \4 D0 P9 A+ z* u  I$ ?- t
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;+ A( o' J+ Z/ k8 A6 f+ d
    LPVOID DynamicData=NULL;( r, p  }" [- _0 P3 O* S) G; F
    PrepareData(IQQData,&DynamicData);4 R+ C1 w* a7 o6 f* w8 `. `
    if (NULL==DynamicData) return dwRet;
: A" I2 p. |6 M- K! h    dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+146 o% u/ ]- ]3 V6 E' W
    if (dwRet) return dwRet;1 y4 A* k' ^% o0 ?1 p) t" Z' c
    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);- g" a) C$ w% x8 e' a8 w6 \* A. ?
    if (dwRet) return dwRet;% l  }2 f+ u6 e7 K: }
    dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);) c0 v- W, _: a5 }: k
    return dwRet;
2 @: y  Q7 k  f2 p0 i( n$ c}
9 _- n1 f  W2 Q* \( e- Q% m
0 c: W; C$ H: N6 fstatic const LPSTR  szwProcotol = "wProcotol";
( ?% v9 e& b8 o. r. H1 y$ b7 d0 |DWORD GetVer(DWORD Uin)0 n- n/ J( s# u- @  d  i; c6 u
{
2 v/ d  }( y3 x( Q4 ^    DWORD dwRet=0;8 X5 L' ^- X. ~% l3 L
    LPVOID IQQData=NULL;9 _3 G+ |2 m* }1 o: j$ ]
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
2 p) H4 X; u6 E) ?    LPVOID DynamicData=NULL;
* m* D' k, h, M0 r7 _* j2 c# y    PrepareData(IQQData,&DynamicData);
3 J! K- D0 O6 c- [    if (NULL==DynamicData) return dwRet;. v0 X3 U+ w, U; [3 s* t
    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
3 o1 N! q; B; o- Z    return dwRet;5 y2 o+ j3 _% Y& N; Y
}
2 N# L8 \  C/ R; ]% A3 _
" E' i0 V9 F# _7 i原文出处:http://www.ye-soft.net/article.asp?id=43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-5-4 16:52 , Processed in 0.019358 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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