由于工作需要,想实现不调用任何函数获取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都行),请大牛们给点思路……
[课程]FART 脱壳王!加量不加价!FART作者讲授!