找回密码
 注册
查看: 6766|回复: 0

QQ IP显示的关键代码

[复制链接]
发表于 2007-10-12 14:06:56 | 显示全部楼层 |阅读模式
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.
1 H$ ^3 Y' h& i8 ^/ D% f5 xrunjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.9 L4 ^- M6 b0 F0 L+ g  G8 [

7 ^- F9 Z, Q0 @* F) W; |, P, wstatic const DWORD UnknownSig=0x1E3A86BA;! K0 @+ P* d& U8 f0 _% B% {$ u
static const LPSTR  szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";. U( ]4 o9 i: w& O. u
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);
3 N1 }) Y+ N/ O# C7 P# I2 W- UVOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)4 K$ o$ P: e% A" V5 C5 ?
{
% o% j" S* B" R    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);& U) {# C( h1 c  }- c0 v( i
    PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);6 c. e  ~  k8 v& C
}
/ A! X# T6 I$ A, W2 T" a9 {9 m. D/ u
) d: {1 u2 u( ]4 f, i5 t2 |6 b" nDWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)8 n" ~1 M- V' y
{
$ W  q. x2 X2 \  b8 M% |3 z  J    DWORD dwRet=0;
5 I- v8 r3 }4 V3 z* P, z2 p    __asm
( \' p* v8 B# n5 p& ~- x    {
" C8 e+ E# v) }        lea eax,dwRet5 V& g" p4 V6 g- F" E9 q: y( Q
        push eax7 _) ^6 m# y7 p2 j
        push szCmd. t$ {( `7 `  ^+ D
        mov eax, DynamicData
# S  l& R3 F% c: y  h        push eax0 I% @6 n% a' {+ N6 j
        mov ecx,[eax]6 J4 `/ A( Y  a3 Y7 A) B; x+ L
        mov eax,ecx
& I0 Y/ {3 ]$ e6 O* o' z& V" A# F6 {        add eax,iOffset
" u. z1 r2 c" x: e! V" q        call [eax]* Z$ X' K( A1 |/ w5 _% k
    }
" h: r/ Y7 l' q6 K/ Y6 K, e, f    return dwRet;
1 @9 I' q) Q6 o6 H}
2 p! S% m' Q9 z4 y" T% T1 n2 O" d0 O$ }6 K5 f) y
static const LPSTR  szdwRecentIP="dwRecentIP";* q0 I9 _3 b1 V3 T
static const LPSTR  szdwIP="dwIP";/ l: t# s  j/ }# L3 L4 _1 V
static const LPSTR  szdwC2CIP="dwC2CIP";6 l+ @4 D- z6 Z8 }
DWORD GetIP(DWORD Uin)
" ^; x' [' `: y{
4 P$ i+ I" X# Z8 l    DWORD dwRet=0;
% D/ W3 {$ U4 u    LPVOID IQQData=NULL;8 H* }* S# S! a' C6 V
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
" r4 G# ^7 }3 U6 ]: v+ l5 q; q4 O% D    LPVOID DynamicData=NULL;& ~7 y0 g0 c3 e
    PrepareData(IQQData,&DynamicData);# ^# W0 |: l* [& K9 W. `/ I
    if (NULL==DynamicData) return dwRet;
! f  H) K* S2 T; m! \8 V( ?" I  d    dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
7 M! p' F) _; o8 R    if (dwRet) return dwRet;- P0 p4 o$ \# s) P; F7 ?" ^
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
4 x4 c! L& f8 `  W/ }& E. t. [    if (dwRet) return dwRet;
9 \9 t0 Q6 J5 @9 P: ~9 Y" W    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);6 @6 Z# ]  X- h/ ~4 K6 k: X: i
    return dwRet;
$ F9 R- Z8 z7 P- y* H* _5 F0 J}
$ U$ ^4 y. x7 j5 I1 s% ]+ \- V' E0 \5 i. ?$ y" O) [: i( ^
static const LPSTR  szwRecentPort="wRecentPort";+ O6 E4 I. w; Y. R* J$ p/ W
static const LPSTR  szwPort= "wPort";1 p/ Z1 b8 r. m% c, Y6 u
static const LPSTR  szwC2CPort= "wC2CPort";
6 y+ P$ ~8 s5 n1 a- t! KDWORD GetPort(DWORD Uin)
+ k; y4 P  e5 q{
, x, @6 x: X* p% O6 `/ y+ b, K    DWORD dwRet=0;3 l9 ?8 n  k; S- {- [
    LPVOID IQQData=NULL;" _$ V7 h/ H; {+ n
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
) F8 W% f+ [- d0 `+ e0 [    LPVOID DynamicData=NULL;2 R8 Z! h- F: o0 m) e5 G
    PrepareData(IQQData,&DynamicData);0 O% d: y5 @# Z( V# D5 T* D) a4 d$ {
    if (NULL==DynamicData) return dwRet;6 v# F* S: f9 \1 P5 V$ J5 c" j! `3 d
    dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14
! B& i( B0 E' r) V    if (dwRet) return dwRet;( s2 g$ E) T* E( H0 {9 e
    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);) U- Y+ e6 O% d! {9 h
    if (dwRet) return dwRet;
! b' T; K1 c1 q) q8 o& c$ _    dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);
2 e) E; G7 m+ A/ S    return dwRet;
! p+ `7 ~9 ]8 B) S7 O0 h& w7 D. M}, E9 n# h8 f# Y) Z1 A0 ?

& c0 Q$ h( R1 r& Mstatic const LPSTR  szwProcotol = "wProcotol";
3 w& r% i2 Q, n8 HDWORD GetVer(DWORD Uin)1 M. H- Q$ h  i
{! p4 J$ n3 u' e- p5 E3 w- J" J
    DWORD dwRet=0;
" {' E- V, C- P8 ~: L* G1 e    LPVOID IQQData=NULL;3 g! A7 P, Y2 j% Z4 o2 V$ }9 `! \
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
; M- G, o6 B4 t3 b    LPVOID DynamicData=NULL;
) }0 n' `+ H& o" F8 |; D, h) t& ~    PrepareData(IQQData,&DynamicData);. u' @0 r* T) T& e4 [( H9 k
    if (NULL==DynamicData) return dwRet;, w5 k9 a* p& v3 b" i
    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);7 n3 ~, v+ E5 y  `2 C$ `, X
    return dwRet;# O: ^1 I' T  X( R! L8 S* e5 ~
}
+ H" B7 |8 D$ G. X. \$ C" n, h% Y' W  M7 o/ \- j6 P7 Z' t
原文出处:http://www.ye-soft.net/article.asp?id=43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-2 04:18 , Processed in 0.018187 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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