这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.

static const DWORD UnknownSig=0x1E3A86BA;
static const LPSTR szQQUSER_DYNAMIC_DATA=”QQUSER_DYNAMIC_DATA”;
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);
……

INPUT { behavior: url(http://localhost:81/blog/admin/FCKeditor/editor/css/behaviors/hiddenfield.htc) }
TABLE { behavior: url(http://localhost:81/blog/admin/FCKeditor/editor/css/behaviors/showtableborders.htc) }
INPUT, TEXTAREA, SELECT, .FCK__Anchor, .FCK__PageBreak { behavior: url(http://localhost:81/blog/admin/FCKeditor/editor/css/behaviors/disablehandles.htc) }
来源:http://www.ye-soft.net/article.asp?id=43
作者:morning

这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.

static
const DWORD UnknownSig=0x1E3A86BA;
static const LPSTR 
szQQUSER_DYNAMIC_DATA=”QQUSER_DYNAMIC_DATA”;
typedef void(
*pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID*
pDynamicData);
VOID PrepareData(LPVOID IQQData,LPVOID*
pDynamicData)
{
    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG
*)(*(LONG *)IQQData+0x54);
   
PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);
}

DWORD
GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)
{
    DWORD
dwRet=0;
    __asm
    {
        lea eax,dwRet
        push
eax
        push szCmd
        mov eax, DynamicData
        push
eax
        mov ecx,[eax]
        mov eax,ecx
        add
eax,iOffset
        call [eax]
    }
    return
dwRet;
}

static const LPSTR  szdwRecentIP=”dwRecentIP”;
static
const LPSTR  szdwIP=”dwIP”;
static const LPSTR  szdwC2CIP=”dwC2CIP”;
DWORD
GetIP(DWORD Uin)
{
    DWORD dwRet=0;
    LPVOID IQQData=NULL;
   
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
    LPVOID
DynamicData=NULL;
    PrepareData(IQQData,&DynamicData);
    if
(NULL==DynamicData) return dwRet;
   
dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
    if (dwRet) return
dwRet;
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
    if (dwRet)
return dwRet;
    dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);
   
return dwRet;
}

static const LPSTR 
szwRecentPort=”wRecentPort”;
static const LPSTR  szwPort= “wPort”;
static
const LPSTR  szwC2CPort= “wC2CPort”;
DWORD GetPort(DWORD Uin)
{
   
DWORD dwRet=0;
    LPVOID IQQData=NULL;
    if
(!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
    LPVOID
DynamicData=NULL;
    PrepareData(IQQData,&DynamicData);
    if
(NULL==DynamicData) return dwRet;
   
dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14
    if (dwRet)
return dwRet;
    dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);
    if
(dwRet) return dwRet;
   
dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);
    return
dwRet;
}

static const LPSTR  szwProcotol = “wProcotol”;
DWORD
GetVer(DWORD Uin)
{
    DWORD dwRet=0;
    LPVOID IQQData=NULL;
   
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
    LPVOID
DynamicData=NULL;
    PrepareData(IQQData,&DynamicData);
    if
(NULL==DynamicData) return dwRet;
   
dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
    return dwRet;
}

版权声明:本文为qiuyi21原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/qiuyi21/articles/1089565.html