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

QQ IP显示的关键代码

[复制链接]
发表于 2007-10-12 14:06:56 | 显示全部楼层 |阅读模式
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.) R! u2 q+ P' y6 H5 o7 z. f
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.
0 U: k) ^4 u, X) H& f- ~6 Z& w, D' p( ~9 y
static const DWORD UnknownSig=0x1E3A86BA;
$ {, r" z7 m- ]# @- e! @% Sstatic const LPSTR  szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";* V2 A# ~" t3 w, Y0 g, M5 q" G/ n
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);: c& n& p/ @$ g
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
/ ]/ F- H* l6 X" `" \5 X, `+ |3 o8 F{3 g/ j2 K( Q4 N
    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);
, C& `, `; O6 C0 E1 F    PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);
, C; o. ]3 q" v! m0 O1 j  d8 f, V- f}( l  k0 L0 e) [7 D# `4 V8 k- J) T

- @1 P7 L& f2 i% f+ a( e$ d2 gDWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)
( i. W2 j2 N# n{3 F$ n. T8 ]- |) n  i/ M
    DWORD dwRet=0;+ y! M/ T+ @% ~9 t! F5 K
    __asm
$ ?% F2 w' j+ `- ?    {
" z- J' t% Y2 t9 H  g        lea eax,dwRet
  D! u0 R; ], ~' ^        push eax9 b$ J# ^! X, @- }5 H3 V
        push szCmd
6 R' ]# A7 y  j* Z        mov eax, DynamicData2 e! V4 T8 V9 ~* C
        push eax+ W# s1 E& p7 ?, c* t, X8 E0 k
        mov ecx,[eax]
9 I6 F6 o2 u# S, V6 I. P        mov eax,ecx
4 y: X( h/ V8 x        add eax,iOffset
- o/ D2 w1 w( j# [        call [eax]
2 x9 ?- a- T3 m    }' e1 W& {) a+ K- a
    return dwRet;
' p& ?! J* k$ g5 ~}
6 E* q# E2 X7 r: f4 [; W8 N
4 F; d' L, U. |* s" Qstatic const LPSTR  szdwRecentIP="dwRecentIP";
! k) Z* Q( L) u1 M0 o0 gstatic const LPSTR  szdwIP="dwIP";( c0 b: h# G& T6 ?0 _; B% _
static const LPSTR  szdwC2CIP="dwC2CIP";# r8 y: \9 U" L9 }( A7 I9 y' n. n1 e
DWORD GetIP(DWORD Uin)5 H4 q$ k7 O3 H
{3 ?- s, {  h$ M% {
    DWORD dwRet=0;
$ R4 p' d* ^) b+ G# {7 ~+ Q9 w    LPVOID IQQData=NULL;
; t$ S- L8 y" h1 [- v3 ]& d    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
2 p! \2 ]. j* g5 Q3 G    LPVOID DynamicData=NULL;) s+ i. B& Z1 k7 D2 [8 ^; g
    PrepareData(IQQData,&DynamicData);- a9 I% {) h- Q; S$ z
    if (NULL==DynamicData) return dwRet;
2 ?0 b4 z& Q: k9 m8 K    dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
& o0 o  B. [, {+ g3 Q# q5 |/ Y    if (dwRet) return dwRet;) X3 v4 g9 e3 D2 }" K) |+ |* x2 d
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
& G# C- G6 ~1 ?+ R    if (dwRet) return dwRet;
9 m4 Q/ m3 L' ~. H- j    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);
& d  f! ]: W2 y  x; F' u    return dwRet;
6 I- s$ C1 ^5 ~1 ~4 e}
6 k2 ?: ^& Z- T% p) s4 W+ w, z5 Y2 `2 `8 @! f0 A  d: w
static const LPSTR  szwRecentPort="wRecentPort";9 [/ g+ S8 d* F/ g- G! {. l6 ?
static const LPSTR  szwPort= "wPort";
  O- \" q0 ~8 M0 I) \7 D2 Qstatic const LPSTR  szwC2CPort= "wC2CPort";4 X) N6 U# ~$ v3 k6 u
DWORD GetPort(DWORD Uin)$ Y; m0 P; P) T* p3 C
{
2 t+ z/ A# ?. x& K    DWORD dwRet=0;( E: T& X3 X) s, k0 |: P
    LPVOID IQQData=NULL;" s- `! l2 n3 u* ^5 y
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
% N5 I+ C# W5 q' j( s" O    LPVOID DynamicData=NULL;" y8 R& P& w( J9 K# x' u/ k7 p1 W
    PrepareData(IQQData,&DynamicData);
$ b/ Y- o1 j2 D9 m    if (NULL==DynamicData) return dwRet;
: O3 W0 ?$ q3 ]/ b    dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14
- i0 p- [6 S' U" w# Y    if (dwRet) return dwRet;
5 I1 B& R# b* o& A    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);, [% g' ]" e7 X. W: I, I
    if (dwRet) return dwRet;
* a* u" r* l0 ^$ N6 c0 C    dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);" I# g' x: W7 J. z) g+ q: @
    return dwRet;
4 q# S0 e4 K+ B- {  W# B}- o7 C0 x1 Q) \4 u! g
& b4 c( z) O$ T4 x/ S3 I. P' p' N
static const LPSTR  szwProcotol = "wProcotol";, o3 O9 i4 K& E% j1 b
DWORD GetVer(DWORD Uin)
" c' G7 _6 I2 \, s{" m( z. r: X6 ^
    DWORD dwRet=0;9 c1 p* L0 }: M
    LPVOID IQQData=NULL;
) j$ ^! O! L6 T: h3 N    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
( C; g# f, W7 G# |, B7 W- _# U4 }    LPVOID DynamicData=NULL;
7 _4 K. S9 V6 |) ^# P  o' N    PrepareData(IQQData,&DynamicData);
7 Q7 P* o& B5 B. O" z4 W* M& Q    if (NULL==DynamicData) return dwRet;3 q8 ~( ?+ @4 y) A/ X# ~. ~6 E5 z/ C( W
    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);5 i1 w; `) a* O. u$ L
    return dwRet;
, H7 d4 O) [( h) X# u( Y}1 n4 i0 X9 e, b

$ t3 B6 N. _+ ~8 T5 c# F8 n6 U: k原文出处:http://www.ye-soft.net/article.asp?id=43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-5-2 07:40 , Processed in 0.017856 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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