获取IP地址的另一种方法(逆向GetIpAddrTable习得)

2009-8-17 Nie.Meining Coding

由于工作需要,想实现不调用任何函数获取IP地址,于是把GetIpAddrTable函数逆了,发现它是向\device\tcp查询ip实现的,进一步逆向进行不下去了(水平有限)。
模拟其实现写了段获取IP的代码,虽然不知道有什么用,还是跟大家分享一下吧:

#include <windows.h>

#include <stdio.h>

//By Fypher

//http://hi.baidu.com/nmn714

int main() {

    HANDLE hDevice = CreateFile(

        TEXT("\\\\.\\Tcp"),

        GENERIC_READ | GENERIC_WRITE,

        FILE_SHARE_READ | FILE_SHARE_WRITE,

        0,

        OPEN_EXISTING,

        0,

        0

        );

    if (hDevice == INVALID_HANDLE_VALUE) {

        return 0;

    }

    BYTE pInBuffer[36] = {

        0x01, 0x03, 0x00, 0x00, 0x00, 0x00,

        0x00, 0x00, 0x00, 0x02, 0x00, 0x00,

        0x00, 0x01, 0x00, 0x00, 0x02, 0x01,

        0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

        0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

        0x00, 0x00, 0x00, 0x00, 0x00, 0x00

    };

    BYTE pOutBuffer[296];

    DWORD len;

    if (!DeviceIoControl(hDevice,

        0x00120003, 

        &pInBuffer,

        sizeof(pInBuffer),

        &pOutBuffer,

        sizeof(pOutBuffer),

        &len,

        NULL))

    {

        return 0;

    }

    CloseHandle(hDevice);

    ULONG a = *(PULONG)pOutBuffer & 0x000000FF;

    ULONG b = (*(PULONG)pOutBuffer & 0x0000FF00)>>8;

    ULONG c = (*(PULONG)pOutBuffer & 0x00FF0000)>>16;

    ULONG d = (*(PULONG)pOutBuffer & 0xFF000000)>>24;

    printf("ip:%d.%d.%d.%d\n", a, b, c, d);

    system("pause");

    return 0;

}

 

但是我的问题依然没有解决。尝试过暴力搜索,发现内存中没有一个跟系统版本相关的固定地址存放IP地址。
不调用任何函数获取IP地址(Ring0/Ring3都行),路过的高手们给点思路……

发表评论:

Powered by emlog