首页
论坛
课程
招聘
雪    币: 532
活跃值: 活跃值 (15)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝

[分享]获取IP地址的另一种方法

2009-8-17 09:36 4592

[分享]获取IP地址的另一种方法

2009-8-17 09:36
4592
由于工作需要,想实现不调用任何函数获取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都行),请大牛们给点思路……

[公告]看雪论坛2020激励机制上线了!多多参与讨论可以获得积分快速升级?

最新回复 (8)
雪    币: 486
活跃值: 活跃值 (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
slore 活跃值 2 2009-8-17 09:55
2
0
注册表有。。。
不过硬件不同子项名称序列不一样,你可以枚举然后比较显示名。
本机和ADSL的外网可以看到。

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\
下面是GUID的的项是本地的

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters\Interfaces
下面有很多。。。包括本地和ADSL的外网。。。
但是如何区分没自己研究过。
雪    币: 532
活跃值: 活跃值 (15)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
Fypher 活跃值 4 2009-8-17 10:43
3
0
谢谢了!!
不过MS不调用函数读取注册表依然有难度……
雪    币: 251
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
leftup 活跃值 2009-8-17 11:08
4
0
我感觉不调用API是不可能的,除非IP地址存在于用户态虚拟地址空间的某个地方
最多隐蔽一点调用
雪    币: 532
活跃值: 活跃值 (15)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
Fypher 活跃值 4 2009-8-17 15:58
5
0
哇哈哈哈,终于成功了~!兴奋一下
雪    币: 116
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bswdylwsw 活跃值 2009-8-17 16:04
6
0
LZ 成功了啊。。那分享下啊。。可以不!!
雪    币: 132
活跃值: 活跃值 (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
冬祭 活跃值 2009-8-22 10:24
7
0
恭喜楼主~ 可不可以简单说下思路?~
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
鸣人 活跃值 2009-8-24 00:24
8
0
cmd命令也可以的.呵呵.暗地里调用.获取参数就可以了.
雪    币: 246
活跃值: 活跃值 (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hbu任我行 活跃值 2009-8-24 01:19
9
0
咋用?详细说说
游客
登录 | 注册 方可回帖
返回