BackTrack与虚拟机

(警告:这是一篇没有任何用处的文章,本文所有讨论均已过时,请勿模仿。)

基础知识:

系统:BackTrack 4 R2
  一款目的在于“渗透测试”的Linux发行版。或许我的中文不够好,原文是这样写的:
  BackTrack Linux – Penetration Testing Distribution
默认账号:root
默认密码:toor

测试用虚拟机:
以VirtualBox为主,VMWare略微写点儿结果

测试用网卡:
GW-USMicroN Planex公司 2009年购买
GW-USNano2-G Planex公司 2011年购买
盟区战卡 盟区官方 2010年购买

第一部分:BackTrack在VirtualBox里的安装

VirtualBox配置
其实默认配置就很好,系统类型选上Linux 2.6,内存分配2G左右,硬盘动态8G
唯一要注意的是要勾中Settings里一个选项(非Preference),System->enable IO APIC
安装系统前还是后勾上都可以,不勾的话在安装系统完毕后重启时会出现以下错误

ERROR: unable to locate IOAPIC for GSI 1
ERROR: unable to locate IOAPIC for GSI 12
ERROR: unable to locate IOAPIC for GSI 7

VirtualBox配置完以后可以直接安装BT4R2系统,其实只要在加载系统的iso后启动,
然后点next、next、next就可以了,我好像就改过时区而已。

系统安装完毕后,需要加载Guest Additions,这里简单写下:
Linux下载入CD镜像的方法,也就是mount,很奇怪的是这玩意要mount到/media而不是/mnt

mount /dev/hdc /media/cdrom0

接下来安装

cd /media/cdrom0
./VBoxLinuxAdditions.run

然后重启即可

bashreboot

VMWare下的安装则简单的多,直接文件->打开,然后选择一个vmx文件就可以了,VMWare镜像官方有下载
无须刷新VMWare Tools,startx以后,鼠标就正常了。

第二部分:看不见无线网卡?
首先要说的内置网卡肯定是没有办法直接用的,我的三块测试网卡都是usb外置网卡。
查看一下无线网卡

iwconfig

我相信很多人看到的结果是这样的:

lo        no wireless extensions.

eth0      no wireless extensions.

无线网卡呢?好吧,它无法被识别出来……

手头三个网卡的情况:
GW-USMicroN 无法识别
GW-USNano2-G 无法识别
盟区战卡 识别为wlan0,但是一启用就Network is down!!!,然后死机

VMware,结果和VirtualBox一样……无法识别/无法识别/死机

我相信第三块网卡是因为个体原因无法使用的,被我踩过一脚……-_-
所以开始调试另外两块网卡,伟大的战斗开始了……

GW-USMicroN 对应芯片 rt2870
GW-USNano2-G 对应芯片 rtl8192cu
不要相信任何一篇网志,在嵌入式领域,专用设备太多,自己去确认最好。
(网上有把GW-USMicroN 对应芯片写成rt3070usb的。)
如果你有windows版驱动的话,在硬件管理器->网卡->属性->详细信息->服务,这个位置可以确认到真正的芯片型号。

拿到芯片型号以后就可以去下驱动了
rt开头是Ralink公司:
http://www.ralinktech.com.tw/support.php?s=2
rtl开头是Realtek公司:
http://218.210.127.131/downloads/downloadsView.aspx?Langid=4&PNid=21&PFid=48&Level=5&Conn=4&DownTypeID=3&GetDown=false

先说说rtl8192cu的驱动。
直接解压安装,很方便、方便……但是!
安装完了也使用不能,或许太新了,5月2日刚更新的驱动,再等等或许比较好。

然后看一下rt2870的驱动,是源码形式的,需要编译
修改过config.mk里的参数后,我们make、make install
然后正如大多数软件一样,编译器华丽地告诉我们Error……

编译rt2870相关的网志很多很多,网上一搜一大把,不过真正有用的不多。
简单归纳一下,主要是以下几个部分
0.修改config.mk参数,就是把几个需要编译的模块从n改成y

# Support Wpa_Supplicant
HAS_WPA_SUPPLICANT=y

# Support Native WpaSupplicant for Network Maganger
HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y

1.linux版本导致的函数名冲突

不失严谨性,这里再强调一下芯片驱动与系统的版本
驱动:2010_0709_RT2870_Linux_STA_v2.4.0.1
系统:BackTrack 4 R2(linux 2.6.35.8)

第一次编译的错误是这样的

error: implicit declaration of function ‘usb_buffer_alloc’
/root/2010_0709_RT2870_Linux_STA_v2.4.0.1/os/linux/../../common/cmm_mac_usb.c:

解决这个问题得依赖搜索引擎,如果你有丰富的linux内核版本知识我也没话说。
这个原因是因为linux 2.6.35换了俩函数名:
usb_buffer_alloc() is renamed to usb_alloc_coherent()
usb_buffer_free() is renamed to usb_free_coherent()

然后修改此文件/include/os/rt_linux.h
第1077和1078行,替换两个函数名就好

2.USB_DEVICE_ID没有具体指定

USB_DEVICE_ID的列表一般会被写成一个USB_DEVICE类型数组,最后以{}结尾,形如

USB_DEVICE_ID rtusb_dev_id[] = {
#ifdef RT2870
	{USB_DEVICE(0x148F,0x2770)}, /* Ralink */
	{USB_DEVICE(0x148F,0x2870)}, /* Ralink */
	{USB_DEVICE(0x07B8,0x2870)}, /* AboCom */
	{USB_DEVICE(0x07B8,0x2770)}, /* AboCom */
……
#endif // RT2870 //
	{ }/* Terminating entry */
}

在这个列表里,我们需要确认自己的usb设备的id在里面

首先要知道自己usb设备的id

lsusb

下面那个PLANEX GW-USMicroN的id就是我们要的了

Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 003: ID 2019:ed14 PLANEX GW-USMicroN
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

很显然,原来的表里是没有的,于是我们需要添加这样一行
{USB_DEVICE(0x2019,0xED14)}, /* Planex Communications, Inc. */

这段代码在哪里呢
2008_0925_RT2870_Linux_STA_v1.4.0.0版本在/include/rt2870.h
2009_0820_RT2870_Linux_STA_V2.2.0.0版本在/os/linux/usb_main_dev.c
2010_0709_RT2870_Linux_STA_v2.4.0.1版本在/common/rtusb_dev_id.c
坑爹啊,这种代码重构让人绝望啊!!!

以上就是USB_DEVICE_ID相关的解决方案的,其它设备类似吧,至少我在rtl8192cu的源码里也找到了类似的东西。

  1. 设备驱动模块加载之间的冲突
    这真是最最最坑爹的问题,解决方案是依赖blacklist
    编辑器打开 /etc/modprobe.d/blacklist
    你看到了啥?
    blacklist r8187
    blacklist rt3070sta
    blacklist rt2870sta
    坑爹啊!!!我努力这么久,就是为了编译rt2870sta!,你丫直接给我黑名单掉,你想死啊!!

具体需要black掉哪些模块,哪些模块又不能被black需要测试,这用到以下几条指令

#dmesg是查看系统错误信息;grep可以过滤出想要看到的部分,具体参数自查
dmesg | grep -e rt28 -e rt38
#修改blacklist表
emacs /etc/modprobe.d/blacklist
#重启,我不确认插拔网卡或者重载mod是否有效,这牵连到依赖性问题,我想BT重启还是蛮快的
reboot
#查看网卡信息
iwconfig

总之偶调了很久,black掉了很多parts,最终成功了

blacklist rt28xx
blacklist rt2x00usb
blacklist rt2x00lib
blacklist rt2800usb
blacklist rt3070sta

测试结果

lo        no wireless extensions.

eth0      no wireless extensions.

ra0       Ralink STA  ESSID:""  Nickname:"RT2870STA"
          Mode:Monitor  Frequency=2.467 GHz  Access Point: Not-Associated
          Bit Rate:1 Mb/s
          RTS thr:off   Fragment thr:off
          Encryption key:off
          Link Quality=100/100  Signal level:0 dBm  Noise level:0 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0 

第三部分:网卡可以正常运行却看不到无线信号

这里可以正常运行具体指:
1.iwconfig中网卡被正常识别
2.airodump-ng可以正常启动

暂时无法解决,不过第二部分中的内容相信U盘版BT4也是可以参照的,具体要靠再实验了