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

QQ IP显示的关键代码

[复制链接]
发表于 2007-10-12 14:06:56 | 显示全部楼层 |阅读模式
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.9 @. \+ J1 l( Q; F8 l
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.3 ~/ z8 R( b7 b$ ^0 f5 H

& |# L. ?6 z( ]6 h' h5 R, Ustatic const DWORD UnknownSig=0x1E3A86BA;
1 u4 `, z  L( z2 mstatic const LPSTR  szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";
# o4 U: A% X' x" x* z* S4 I6 D( Ytypedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);/ `; [  P3 P6 g2 H
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)+ t5 H8 E7 a" |
{
( F- }9 Q3 p2 b1 i1 @0 j    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);0 C; f" u" ^+ s# c( U
    PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);+ |  y. v3 `7 P; @3 f# c  N/ I
}# ]7 a1 Z( L. x9 T

: }' C# p1 z: J2 ]/ b! kDWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)2 T& j8 ~- y; @6 s4 w
{+ ]; a; ?# Y9 x
    DWORD dwRet=0;2 D7 N( c& V( R" {
    __asm
( [4 f- ?% x# A, U& G6 T    {$ e  j: c5 I0 ?9 R
        lea eax,dwRet
6 p7 `$ H' y- m  ^        push eax
: e9 p: H! i7 z7 T% A        push szCmd
" W# {& Z' G# `        mov eax, DynamicData% d7 A" m8 d, ?5 n) {" A- I& X
        push eax
7 @/ o( N+ x& P        mov ecx,[eax]3 |' k0 f+ T9 C
        mov eax,ecx- ^$ L0 m! M5 h# Y3 u3 s
        add eax,iOffset
# P2 @+ U* P5 F$ H        call [eax]1 W/ x/ v7 ~* a
    }. W5 c: a. Y3 j) l' w
    return dwRet;' c0 Z, J8 V7 H8 b. a
}! B; D$ C, x! o2 H

# {" `1 O1 b: B9 q* vstatic const LPSTR  szdwRecentIP="dwRecentIP";
+ u, Z+ M) t) h# h$ e4 t5 ]! jstatic const LPSTR  szdwIP="dwIP";
8 t8 e' f" ^$ t: W) W$ R! Zstatic const LPSTR  szdwC2CIP="dwC2CIP";
7 z" l2 X( V" H" n/ kDWORD GetIP(DWORD Uin)& }  C" q3 O% R1 ^" }
{
( S! S8 H; X5 `    DWORD dwRet=0;  Y" C" j8 {0 q  E% ^4 D
    LPVOID IQQData=NULL;- g# s4 j7 P1 ?' A: `  h, W
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;0 k0 t$ ]& S4 F8 C. U6 K$ q
    LPVOID DynamicData=NULL;
$ ]8 P  ~$ x& ~8 K( V) Z, F    PrepareData(IQQData,&DynamicData);+ r& _& Y& w+ L( G
    if (NULL==DynamicData) return dwRet;
' K  n& R& K( F: {, G! |; C    dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
- k/ y' M7 q( M7 j3 z7 d    if (dwRet) return dwRet;4 b  e" ]' i7 s/ @9 N2 p4 U4 }
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);+ D6 k, r! ]* w4 z2 f5 V* S) O
    if (dwRet) return dwRet;
8 f, Q; A3 I6 N' E4 n1 W    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);
) H1 \2 W; I& a* t    return dwRet;
7 y  e2 K/ B4 Q+ ^' S}
- C9 g# ~" {: e9 N0 f# h( I6 W
& X7 W+ D& `1 Istatic const LPSTR  szwRecentPort="wRecentPort";+ [2 h& |( L, f: m1 d  u
static const LPSTR  szwPort= "wPort";$ X$ T( p, e6 p- g
static const LPSTR  szwC2CPort= "wC2CPort";
* `3 C+ ^% d! r) o! i4 ADWORD GetPort(DWORD Uin)" I7 m6 K2 l! X& U/ i& R1 [
{; Z& S" T1 V! `3 `( S+ v
    DWORD dwRet=0;+ U. @9 ^0 N  e% c4 U( F- }8 U
    LPVOID IQQData=NULL;4 M% C) l# F7 i- e4 J4 v
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;& d% ]' E1 p. g- X- v6 O( ]
    LPVOID DynamicData=NULL;; H( }! {) O! z9 |
    PrepareData(IQQData,&DynamicData);: S3 p" J# G7 t5 `! N, n% [
    if (NULL==DynamicData) return dwRet;7 D4 Q, g" }& l4 M3 j
    dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14
3 X+ R3 f5 u# e- f' ?    if (dwRet) return dwRet;
/ `+ A5 Z2 {/ ^    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);
: W7 a. E4 ^9 `, b0 D4 ^1 i    if (dwRet) return dwRet;! l2 C: l# x; J4 n
    dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);
  o! y, d' Y: b4 B0 h$ j    return dwRet;
! u/ v9 e' r" v4 @}+ }# \& Y& B5 j, I  {
) y9 G9 j0 B1 V! O# K4 `
static const LPSTR  szwProcotol = "wProcotol";  v( U0 E6 F. L/ ^
DWORD GetVer(DWORD Uin)
2 {+ x$ m4 y+ _2 [  t! L: q# d; T% v{
; x( z' u) K( H    DWORD dwRet=0;
6 x, H+ f  j' w. P& X, B    LPVOID IQQData=NULL;
9 X& \, g9 a! k( x/ ^    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
  @7 G& C& T, [    LPVOID DynamicData=NULL;
  p; z4 j5 E' I    PrepareData(IQQData,&DynamicData);( s' ?: G' ?' n+ X
    if (NULL==DynamicData) return dwRet;
% |. b# B  l  V) R! n9 Y; y1 X    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
6 h- H( ?/ I$ N# y2 K/ X    return dwRet;
2 H8 c% Q6 A  G8 Y& K* b1 L}7 ^7 ~, ?$ R" c: R& @3 G$ j1 }
6 m: H9 W  L* I3 W# {( @# c" h  e
原文出处:http://www.ye-soft.net/article.asp?id=43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-9-30 06:30 , Processed in 0.037096 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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