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

QQ IP显示的关键代码

[复制链接]
发表于 2007-10-12 14:06:56 | 显示全部楼层 |阅读模式
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.6 W1 R" T- h# X; Q+ C: r: [
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.
9 e8 i4 r# t. z9 d- a- T
. ~& w6 i9 M: w( \; T/ r+ \static const DWORD UnknownSig=0x1E3A86BA;
0 o, k2 [# U: j' s/ astatic const LPSTR  szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";
3 H' N, S* M2 l' A; stypedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);, d3 i4 ^- D$ m( `0 P8 H; ?8 k
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)) F# |7 C2 Q; m
{  \/ y# [. L- W3 o! g
    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);' e6 ]1 A% s# _: n  Y1 b
    PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);
1 X; f* `: @9 A0 C& o: O& S+ }}
; j9 \: V$ J* R9 N7 j' U/ j" }6 {2 ]2 d3 j
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)& A8 S. g. |9 h8 [( R/ Y
{
& ~0 R& p* r( q  B8 l    DWORD dwRet=0;
0 T  L3 p7 Y/ M; I, ^    __asm1 j% k' N8 m* N& M. r
    {
) @6 Y4 U) g. @) U- {0 \) t! {- D        lea eax,dwRet
& i! k: c% ~& W* w0 S# u        push eax. f# u$ ~1 R0 @* W" b( z/ k
        push szCmd
9 [/ b- _( ]9 ?) k1 N: O1 I: [        mov eax, DynamicData
& {/ ~* \# o  p8 e0 O5 B! D0 _. F        push eax5 s, k- G7 V2 j0 Y. y
        mov ecx,[eax]
* N( S: O( P* V1 n1 Q$ z: L2 `2 l: Z        mov eax,ecx6 F7 I0 |& c! U& t
        add eax,iOffset6 [3 y  |9 l. q( v- p
        call [eax]
9 D# Z- k0 s7 c( F  J1 r    }
1 a4 A7 a+ G8 C, U% Q0 J    return dwRet;4 Q4 n/ |" m' N
}3 o/ N& }6 F) V4 |. z
* j; T$ `1 R8 A9 k
static const LPSTR  szdwRecentIP="dwRecentIP";9 @! @4 |6 S/ o: @; f0 c
static const LPSTR  szdwIP="dwIP";
" E, C# ^% L5 N+ s: \3 Cstatic const LPSTR  szdwC2CIP="dwC2CIP";
- |' |' b6 K5 ~6 j* O! R+ I8 M; {( Y! a/ `DWORD GetIP(DWORD Uin)1 u. w8 X8 ~6 U+ z) I
{, n0 a  \1 L! M- o
    DWORD dwRet=0;$ ^* m% F& U5 j1 j, b
    LPVOID IQQData=NULL;
( v3 n* T! w9 Z+ I" [" h1 f" |    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;% {! Y! h4 K" ^6 x! a
    LPVOID DynamicData=NULL;
, |  L$ V- y! N  E) n    PrepareData(IQQData,&DynamicData);
: Z- H2 {& B1 r! c4 d    if (NULL==DynamicData) return dwRet;+ J6 X% D+ E0 B$ `
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
) {5 S3 n. _% A) |, o    if (dwRet) return dwRet;/ z6 z  K2 N" m9 T2 c. a
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);) J" V/ g+ b9 \3 F: J" U/ u
    if (dwRet) return dwRet;
6 x+ d4 L/ u- C# p    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);
6 ]8 j0 c9 t. j! V, A) F    return dwRet;: O+ o: x+ \9 t% _" \: Y
}+ N. X) g5 R: ]$ M( W
+ k3 ?: Q- F, g8 F( Q7 \4 l
static const LPSTR  szwRecentPort="wRecentPort";: r8 D$ b+ h$ t9 y# z3 v* Y$ t5 e6 f
static const LPSTR  szwPort= "wPort";" I4 Q( S( q6 J+ e( G3 m, R( K
static const LPSTR  szwC2CPort= "wC2CPort";
  i5 N8 {) u' [) a" UDWORD GetPort(DWORD Uin)$ g, {9 T1 G9 Y6 v/ p4 \8 j2 i9 ~4 D
{
, ^4 ]7 h$ r6 L! q4 g    DWORD dwRet=0;3 e3 w) ?0 X1 }- P$ X; l) [
    LPVOID IQQData=NULL;9 @9 o/ M7 e! Q: J
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;  m+ h- }5 Z; E% o! g$ F
    LPVOID DynamicData=NULL;: P3 e; i. Q/ `$ {
    PrepareData(IQQData,&DynamicData);+ {5 ?! Q$ d8 ?' i' b
    if (NULL==DynamicData) return dwRet;
3 V5 m6 Y7 Q  Q& X) N    dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14% H6 w+ d  M) l7 m
    if (dwRet) return dwRet;
5 ^+ D% L0 g* o    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);
- E8 `; L( f' }7 p* n  j3 T3 B    if (dwRet) return dwRet;
- c8 u2 G! \& k1 Z) f0 K- [5 E, p    dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);3 M9 i0 e% `% U8 n3 F
    return dwRet;
' T+ ?2 `( x& b' e1 s) E}
% q/ R; s9 \" Q. _- X* u- g/ ^. ~: v6 a$ M
static const LPSTR  szwProcotol = "wProcotol";
5 ?; S6 N: A5 ]6 O9 _. sDWORD GetVer(DWORD Uin)
+ e! O) O0 e# R& T{* s" x7 `: ^( |9 y. K, Y4 ^
    DWORD dwRet=0;: g. R8 l8 \' U, i
    LPVOID IQQData=NULL;
& S) M  R4 e1 j    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;2 C0 y0 b) g, E: J* f
    LPVOID DynamicData=NULL;
& T% C! X" }; D' G- X, f6 M    PrepareData(IQQData,&DynamicData);& M9 E. f/ j! t
    if (NULL==DynamicData) return dwRet;
$ d4 _* f3 t$ M    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
% Z) j- f# o' Z% O* N    return dwRet;8 b. N* W2 c% Z* h1 K# ]* ~" |' G
}7 B0 Z5 [( q  w
6 z! {# @9 p+ N$ o' B5 M
原文出处:http://www.ye-soft.net/article.asp?id=43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-15 01:28 , Processed in 0.016966 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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