查看完整版本: IP显示的关键代码

似水年华 2007-10-14 06:41 PM

IP显示的关键代码

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

static const DWORD UnknownSig=0x1E3A86BA;
static const LPSTR  sz[url=http://www.ye-soft.net/][color=#800080]QQ[/color][/url]USER_DYNAMIC_DATA="[url=http://www.ye-soft.net/][color=#800080]QQ[/color][/url]USER_DYNAMIC_DATA";
typedef void( *pPrepareDynData)(LPVOID I[url=http://www.ye-soft.net/][color=#800080]QQ[/color][/url]Data,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);
VOID PrepareData(LPVOID I[url=http://www.ye-soft.net/][color=#800080]QQ[/color][/url]Data,LPVOID* pDynamicData)
{
    pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)I[url=http://www.ye-soft.net/][color=#800080]QQ[/color][/url]Data+0x54);
    PrepareDynData(I[url=http://www.ye-soft.net/][color=#800080]QQ[/color][/url]Data,sz[url=http://www.ye-soft.net/][color=#800080]QQ[/color][/url]USER_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 I[url=http://www.ye-soft.net/][color=#800080]QQ[/color][/url]Data=NULL;
    if (!GetFriend[url=http://www.ye-soft.net/][color=#800080]QQ[/color][/url]Data(g_I[url=http://www.ye-soft.net/][color=#800080]QQ[/color][/url]Core,Uin,&I[url=http://www.ye-soft.net/][color=#800080]QQ[/color][/url]Data)) return dwRet;
    LPVOID DynamicData=NULL;
    PrepareData(I[url=http://www.ye-soft.net/][color=#800080]QQ[/color][/url]Data,&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 I[url=http://www.ye-soft.net/][color=#800080]QQ[/color][/url]Data=NULL;
    if (!GetFriend[url=http://www.ye-soft.net/][color=#800080]QQ[/color][/url]Data(g_I[url=http://www.ye-soft.net/][color=#800080]QQ[/color][/url]Core,Uin,&I[url=http://www.ye-soft.net/][color=#800080]QQ[/color][/url]Data)) return dwRet;
    LPVOID DynamicData=NULL;
    PrepareData(I[url=http://www.ye-soft.net/][color=#800080]QQ[/color][/url]Data,&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 I[url=http://www.ye-soft.net/][color=#800080]QQ[/color][/url]Data=NULL;
    if (!GetFriend[url=http://www.ye-soft.net/][color=#800080]QQ[/color][/url]Data(g_I[url=http://www.ye-soft.net/][color=#800080]QQ[/color][/url]Core,Uin,&I[url=http://www.ye-soft.net/][color=#800080]QQ[/color][/url]Data)) return dwRet;
    LPVOID DynamicData=NULL;
    PrepareData(I[url=http://www.ye-soft.net/][color=#800080]QQ[/color][/url]Data,&DynamicData);
    if (NULL==DynamicData) return dwRet;
    dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
    return dwRet;
}

sttper 2008-6-15 12:01 AM

看不懂是什么yct01

hziming 2008-9-3 02:34 PM

yct10 yct10 很好 !!!!!!!!!!!!!

netohall 2008-9-11 11:53 AM

谢谢分享。。。。。yct06
页: [1]
查看完整版本: IP显示的关键代码
Google