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

QQ IP显示的关键代码

[复制链接]
发表于 2007-10-12 14:06:56 | 显示全部楼层 |阅读模式
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.
5 p& k; O, [( a8 Z) U( Rrunjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.- Y+ a6 _7 n8 t" X' M

1 [( W( y- Q, m9 _1 tstatic const DWORD UnknownSig=0x1E3A86BA;8 C6 U5 H8 S9 y* @0 f0 k$ \$ y
static const LPSTR  szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";
) j. Y  y: \  b7 M% L1 Jtypedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);; f1 |/ I& H4 G2 a9 I" }9 m, {
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
" ]/ l- d* @6 |5 z: K{5 k' k0 q1 C( x/ E
    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);* s4 h) @: M# A& i! x$ z
    PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);4 C4 K! _9 _. M6 O* S
}9 m4 ^" ~5 a# N# G7 [

; Q: F7 l8 Y+ P6 ]* b4 t; H' r! L( gDWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)( X/ M9 ^2 p6 Y0 F) O; w
{% h. I6 |  c* _( L9 I  [
    DWORD dwRet=0;, u  N4 S9 U$ d: P
    __asm
5 K1 V# O4 R! p1 k) U3 y    {1 Q% n2 Z7 k6 `+ M/ y" G" f
        lea eax,dwRet0 l8 f. v  w2 N4 R6 H$ }+ D: y# R
        push eax
1 b: K) Y  H% {: T( ~        push szCmd
- m& _- u0 ?. o/ @) R. ~6 r0 J        mov eax, DynamicData( k& P/ Z3 p. `% c6 H
        push eax
/ ]: c. U+ j; ~" u8 w3 f        mov ecx,[eax]$ ~) V# y% n* c4 w# [# \3 ^: P
        mov eax,ecx) Z3 ^6 A. @) H) {8 q* K
        add eax,iOffset
9 r6 N5 x/ m+ O) ?# M3 z* E% a% c- e        call [eax]8 X+ |8 w( Q" B& k! d! t
    }
1 J- [% v# i% P9 W! U    return dwRet;
- l$ h6 v* p2 N$ v0 I8 G' V, w% l}
- {& ~7 B8 e2 D3 Q
+ h9 }& G2 l, x6 Sstatic const LPSTR  szdwRecentIP="dwRecentIP";
0 q9 _5 z' c8 ~6 r6 @static const LPSTR  szdwIP="dwIP";) \9 v  |- K5 m( _! I
static const LPSTR  szdwC2CIP="dwC2CIP";( S2 }! V" C( y6 @( K0 C: s
DWORD GetIP(DWORD Uin)
1 Z* h; R, c7 m& h2 ]! x{
( k9 s) d4 G; C# }, |* r2 C    DWORD dwRet=0;. @" ?; y" {8 R# U& b+ [( Y2 ^
    LPVOID IQQData=NULL;! v9 _7 P7 O# [
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
! K3 j0 X1 ?) D! _$ e1 g  f    LPVOID DynamicData=NULL;
  O, P) {3 X! c  H9 `    PrepareData(IQQData,&DynamicData);
  O4 w: [% h0 f2 q8 T, z    if (NULL==DynamicData) return dwRet;. Y0 q, i; \: N
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18; Q; E  A' f( t; m9 o6 G
    if (dwRet) return dwRet;) V8 b5 f2 i& ^
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);& u/ J* o7 m7 l/ V, X" G
    if (dwRet) return dwRet;
/ k0 ~% _) s6 W! f    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);. L) e: H  D: a. [. k+ h4 {
    return dwRet;: y6 g* c1 k  D2 X
}
9 X% a" F  F( \7 D( t( n$ D9 x  |# n6 Y6 y5 a' c. J& q
static const LPSTR  szwRecentPort="wRecentPort";
6 S: X) [' a9 e. l4 pstatic const LPSTR  szwPort= "wPort";
; b+ \0 n4 s( I- i' b8 Ustatic const LPSTR  szwC2CPort= "wC2CPort";
! `) N% Y% I+ r, o" d' Z+ A3 r2 K5 dDWORD GetPort(DWORD Uin)
0 p8 ~' o' z# N' [2 v9 p, C{
$ B$ p: W+ i- q. `/ F- G' v    DWORD dwRet=0;, I( m/ z, f6 `4 ?$ Q7 q  q# M
    LPVOID IQQData=NULL;  `) I/ o5 A: u1 {
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;2 A. r- |9 @. s* t1 H: G. S2 G
    LPVOID DynamicData=NULL;$ ^1 s8 |  ?0 E
    PrepareData(IQQData,&DynamicData);- ]- J4 B4 M- l
    if (NULL==DynamicData) return dwRet;
) ^0 _5 z! j4 L; i  {* ~4 u    dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14
' p1 H5 z. `- g) k. y, k0 u    if (dwRet) return dwRet;
5 b7 B. D$ F: K# I( F5 I    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);
7 S. ?# h8 S. l3 K' F% D    if (dwRet) return dwRet;
  k$ f7 v6 L% l+ G2 i    dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);; N8 K+ x; B+ L
    return dwRet;
) a3 e0 e" d, t% F0 {}
+ [1 A- q; v" U0 h% |* [8 t! F1 J0 h; A2 t8 D4 ?" V
static const LPSTR  szwProcotol = "wProcotol";
/ L; q4 Z: {0 B+ qDWORD GetVer(DWORD Uin)
+ d0 L3 v4 }- a+ u/ i. c7 {- }{
: m8 Q% M. V" o0 D/ @3 w9 g7 o! g5 S    DWORD dwRet=0;' P* h6 u$ q1 T+ ]0 H) ?6 y
    LPVOID IQQData=NULL;& f6 v! B! r6 ?6 Y: G' W$ U
    if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;, Q6 z( x$ L- U% ~2 b1 m6 x
    LPVOID DynamicData=NULL;, |, D# z6 ]; I) W) Q( h7 M# Q& f
    PrepareData(IQQData,&DynamicData);9 ~9 c, ]& s: l; I. o& x
    if (NULL==DynamicData) return dwRet;! B8 n+ I6 w3 K) P
    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
& B2 u, K( c0 y/ j- J: @, k    return dwRet;
/ H, s6 r* O/ {8 O}9 R) y1 n: {! L/ ?
5 l1 ?2 ^: W/ ^; g' l$ c- f: Z- d
原文出处:http://www.ye-soft.net/article.asp?id=43
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-14 23:52 , Processed in 0.016893 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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