电脑重装系统怎么重新分配硬盘空间,如果游戏没了,硬盘空间会不会自动让出来?

重装电脑系统会不会对电脑有伤害呢?
我的图书馆
重装电脑系统会不会对电脑有伤害呢?
01-23 20:55
你好,很高兴为你回答这个问题。装系统就像刷机,平时手机用烦了,就想刷个其他的系统,但是手机因为硬件种类驱动比较多,所以刷机包都是不同的,而电脑系统可以随心所遇的刷!刷!刷!95,98,xp,w7,w8,w10,各种系统界面不同,用的也是各有千秋,刷系统就要知道,装系统就是像很新,安装软件那样,对电脑一般都没有损坏的,因为装系统,不是说的那样装,而是刻录一下光驱到c盘的过程,,,,现在有机械硬盘,像光盘一样转动(代表有西部,希捷等),固态硬盘,像储存卡类似,(代表有闪迪,三星)我自己的电脑,有一天一次做了5回系统,没有出现过什么损伤,一般做系统都不会出问题,对电脑也没有什么损伤,这里说明一下做系统的个别小问题,安装重启时,直接进入系统,没有安装界面,启动项设置问题,笔记本的话有alt+1-12或者fn+1-12,,,,安装一半或者刚刚完成重启了,断电或者系统有问题一般可以在装一次,或者下载新的系统,这两个是最常见的,,,,,,我们不是为了装系统而装系统,而是为了装系统那段时间的快乐,自信,惊喜,享受,祝各位自己动手装系统的小伙伴快乐!
02-07 11:13
有些用户朋友电脑卡顿运行缓慢,,但是叫他重装系统又不敢,怕损坏电脑硬件。到底重装系统会不会对电脑产生影响呢?其实经常做系统会对硬盘造成一些轻微的损害,不过问题不大,做20次系统远远比停一次电的害低得多。重装系统的原理首先我们先了解下电脑重装系统的内部操作过程是什么,了解了这个那么答案就很明显了。不管是使用光盘装法,U盘装法,又或者使用得得一键装机大法,其实原理都是一样也很简单。对于GHOST系统,都是调用GHOST这个程序来还原GHO镜像文件来重装系统的。GHOST这个软件会先高级格式化掉系统盘,然后重建磁盘PBR,然后再把GHO文件解压到系统盘去。而对于微软原版ISO镜像文件,其实操作过程也是一模一样的,只是使用微软自带的工具,高级格式化掉系统盘。然后也是解压文件到系统盘。重装系统其实就是做的这三步。1.高级格式化硬盘是绝对不会减短硬盘的使用寿命的。格式化硬盘的时候,只是对硬盘进行读写,而读写过程中,磁头和硬盘磁碟是没有接触的,因此不存在破坏磁碟的可能。这不会影响其使用寿命。2.重建磁盘PBR,这个也不会对硬盘损伤,只是把磁盘PBR先删除然后再重新写入。3.把GHO文件解压到系统盘去。其实这个就只是对磁盘的写操作而已。难道复制文件也会对硬件有损伤?写到最后首先可以肯定的说定期重装系统对电脑根本谈不上损害,相反还有益处,也许有人会说会对硬盘加速损耗,但是我认为那些基本可以忽略不计!因为现在的硬盘更新快,质量佳。一键还原一般也只是对C盘进行还原操作,备份是个好习惯,如果不是特殊情况使用最初备份还原系统和不格式化全盘重装系统效果没有两样。定期重新分区格式化整个硬盘安装操作系统,绝对有好处。1:可以清楚病毒和垃圾文件。2:可以恢复硬盘最初读写速度,让系统运行更为流畅。3:可以避免逻辑坏道的产生,因为硬盘永久了会产生很多的文件碎片这些是严重影响系统流畅运行和产生逻辑坏道的主要原因。所以说定期重装完全没有问题,想要好好爱护你的电脑,还是定期的重装一下,每一次都有新的感受。可以使用市面上最好的快启动一键重装系统,快启动pe一键装机来实现操作,看完记得关注快启动,有什么问题都可以来问小编哦。
02-03 20:52
首先,重装系统对电脑是不会有伤害的。一般来说,我们不会选择重装系统,装系统一般都是因为系统崩溃,或者严重卡顿影响使用或者有新版本出现。我们才会选择重装系统。而电脑的系统是软件层面,并非硬件层面,我们相当于抹去以前的系统并向电脑刷入一个支持硬件的一个新的操作系统而已,对硬件没有任何的影响。当然,一些系统不够纯净,自带许多的启动后台运行程序,可能刷进去之后,系统自带启动过多。CPU的压力大,长期超负荷运转,长此以往或许会使电脑使用寿命变短。总之来说,转系统这一个过程不会对电脑造成损伤,但是之后由于系统的不同就不好说了,主要和自己使用习惯有关。
01-10 15:35
win系统因它自身的特殊性,在不断更新,同时为保证系统的稳定性和完整性,win还做了备份。两者相加再加上应用过程中产生的垃圾,系统盘不断增大,需要在一年左右的时间重装系统,以提高电脑的运行速度。一般来说,重装系统不会对电脑有伤害,只有灰尘、湿气以及对硬盘进行低级格式化、经常运行较大的数据库、游戏等等,致cpu、内存、硬盘频繁读写,容易致坏。
01-26 21:28
说伤害的话有点严重了,重装系统无非就是格式化和安装,就想平时的删除文件和解压文件差不多,都是在对硬盘进行读写,14年装了块固态硬盘,到现在重装系统也不下20多次了,有点卡的感觉就重做,自带的检测软件显示现在的硬盘健康程度97%,C盘读写超过20G,所以说大大方方用不需要刻意的关注硬盘,硬盘只要没有严重的敲击或者摔到了,一般是没有问题,就算出现坏道什么的,软件这么多覆盖掉就好了~
01-04 23:53
硬件伤害没有什么,重装电脑系统,其实就是文件的解压过程,把一个电脑系统文件重新解压到你的C盘,对于你的其他盘符是没有影响的,但是要注意的是,你之前安装过的软件需要重新安装!
02-04 14:30
重装系统说伤害电脑是有根据地,但是在实际应用中不必要考虑。他的伤害主要集中在对硬盘的伤害,但是很微乎其微,一般来说日常注意电脑不要强烈振动,突然断电等极端操作,等你淘汰这台电脑时,他的硬件出问题的几率也会几乎为零。
02-03 22:40
重装系统不就是对硬盘进行擦除和写入吗 就相当于你删除一些文件 又从网上下载了一些新的文件 要说伤害当然有 毕竟硬盘也是有寿命的 (什么东西都有使用寿命 就是一块石头 时间长了表面也会有变化)
喜欢该文的人也喜欢电脑硬盘游戏安装在哪个盘比较好
答案长度必须超过10个字,请勿发布无效或违法言论。
(共有1个回答)
你得说说自己的硬盘总共有多大,分了几个区,各区容量多少。
一般不要装在C盘了,常识。C盘一般只装操作系统就行了,分区时分给C盘10G就可以了。
一般游戏以及其他工具软件不要和他们的安装包放在同一个分区中,以免分区出问题时同时失去。
现今,主板硬盘接口均为SATA规格标准,无 IDE时代的主、从盘之分一说,而是每盘都使用独立通道。IDE规格的老硬盘,才有需要认盘之说。  1、只要在BIOS中
只要不放在系统盘就行如果你电脑是3个区建议C:系统D:个人E:工作学习
连接上手柄后,电脑在右下角会自动显示新连接硬件。在开始菜单里选择控制面板,XP的控制面板有游戏控制器选项。点击此选项,选择你的手柄,调试。就可以使用了。
你好,系统是装到硬盘上的。如果直接用硬件安装,你的硬盘里面必须有系统安装文件,或者备份文件,可以直接拷贝或者从网上镜像文件。若果没有,是不能直接安装的。得借用光
拿一块硬盘装在机箱里,主板上不是有好几个硬盘接口吗,顺着插上接口就行,和安装第一款硬盘是一样的,可以使用系统自带的磁盘管理器来分区,控制面板-&管理工具-
1,光盘镜像管理软件简体中文版附有效注册码
2。用UltraISO打开准备安装的操作系统光盘镜(ISO)。(安装原版XP系统不要尝试此方法。Ghost
1.先系统映像文件,UltraISO软件。
2.打开UltraISO的窗口后依次点击左上角的“文件”-“打开”,然后打开的系统映像文件。
3.打开后映像文件
处理方法,你要先用软件处理一下。处理之后,电脑就会把这个U盘认为是光驱,或者硬盘。(要看你用什么软件处理了)。我建议你用通用PE1.9.我一直用这个很好用。首先
电脑用u盘win7系统安装方法:首先,将U盘插在电脑上,然后重启,在bios中设置为U盘启动,然后进行windows &&pe系统。
u盘的系统安装到电脑
1、首先你的U盘,要做成启动盘,并且最好在U盘中好你想安装WIN7或者XP系统。
2、其次进BIOS设置U盘启动优先,或者用功能键选择
大家都关注
(C)2017 列表网&琼ICP备号-12&增值电信业务经营许可证B2-&电脑重装系统后硬盘没了怎么办_大番茄一键重装系统
电脑重装系统后硬盘没了怎么办
  有的同学在电脑重装系统后发现硬盘没了或者少了,这很可能是在在装系统时忘记给空闲的磁盘分配盘符了,可以在磁盘管理中进行新建操作。  右键计算机,打开管理界面,点击磁盘管理就能看到电脑识别出来的硬盘,其中绿色的空间就是可用空间。  右键绿色的空间新建简单卷,根据提示设置盘符和大小,完成后这部分磁盘就可以使用了。  若是有两块硬盘,其中一块没有显示也可在这里进行分配,若是系统没有识别出硬盘,请查看连接线和BIOS设置。在硬盘留下后门,重装系统都没辙 - 文章 - 伯乐在线
& 在硬盘留下后门,重装系统都没辙
OHM(Observe Hack Make)是一个专为黑客、制造者和那些有探究精神之人举办的国际户外露营节,为期 5 天。今年 7月31日在荷兰 Geestmerambacht 举办,有 3000 人参与。
这篇文章相关内容已在 OHM2013 公开。原理是利用硬盘的一些智能机制,在某个位置嵌入一些信息(比如:登录信息),然后操作系统验证用户登陆时,会不自主地读取黑客预留下的用户名和密码。
硬盘:如果你在看这篇文章,我肯定你起码用过一两个硬盘。硬盘很简单,基本就是一些512字节的扇区,由递增的数字标明地址,称之为 LBA,也就是“逻辑块寻址”。电脑可以向连接的硬盘的扇区中读写数据。通常会有个文件系统把这些扇区抽象成文件或文件夹。
如果你从这个幼稚的角度看硬盘,你会认为硬件应该也很简单:你需要的就是个能连接SATA接口的东西,然后可以定位读写头,从盘片上读写数据。但是可能不止这么简单:硬盘不是还有处理坏块、S.M.A.R.T.属性的功能么?不是还有什么缓存需要管理的么?
以上这些意味着硬盘中有些智能的东西,有智能就意味着可以黑掉它。我就喜欢可以黑的东西,于是我决定要看看硬盘是如何在非机械层面上工作的。这种研究以前在很多硬件上做过:从笔记本的PCI扩展模块到嵌入式控制器,甚至是苹果的键盘。通常这些研究都是为了证明这些硬盘可以被破解,导致其受到软件的影响,于是我决定达到同样的目标:我要在这次破解中让硬盘绕过软件安全机构。
PCB上的部件
要想知道硬盘是否可以被破解,我需要更了解它们。如你们大多数一样,我也有一摞或坏或旧的硬盘来一看究竟:
当然了,我们都知道硬盘的机械结构应该是好用的,我对那些部分也不感兴趣。我的兴趣在于大多数硬盘背面都有的那一小块PCB板子,上面有SATA接口和电源接口。这种PCB看起来是这样的:
可以看见PCB上有四块芯片。接下来说说这些芯片:
这是一块DRAM(动态随机存储器)。这块很好处理,芯片手册很好找。这些芯片的容量一般在8MB到64MB之间,对应的就是硬盘标称的缓存容量。
这个是电机控制器。这不是个标准器件,数据手册不好找,但是这些控制器一般都有容易找的差不多的同系列产品。ST Smooth控制器大概是最常用的一种了;除了驱动电机,它还能进行电源整流,还带一些A/D变换通道。
这是一块串行闪存。这个也好处理,容量一般在64KB到256KB之间。看起来这个是用来存储硬盘控制器的启动程序。有些硬盘没有这个芯片,而是在控制器芯片内部有闪存来存储程序。
这些小东西不是芯片,而是压电震动传感器。当硬盘受到撞击时,它们可以把磁头移到安全的地方,但是更有可能它在某个地方标记一个值,表示你的保修无效,因为是你自己摔的硬盘。
这里才是奇迹将要发生的地方:硬盘控制器。多是由Marvell、ST或者其他的LSI公司制造。有些硬盘厂商自己做控制器:我见过三星和西数就有自己的控制芯片。因为其他的部分都很好处理,这一块才是我的兴趣所在。
不幸的是,这些芯片都没有文档。话说这些制造控制器的厂商不公开文档有些不厚道真是说轻了:他们甚至在自己的网站上都不提这些芯片!更不幸的是,整个互联网也帮不了我:搜这些芯片手册只能找到没有手册的手册网站,和卖芯片的中国厂商……
那么,没有最重要的芯片手册,就意味着我们的计划搁浅了么?
幸运的是,总有些办法找到除了芯片手册以外的有用信息。我就搜到这么一个。
我找的是HDDGuru论坛上一个叫Dejan的人做的。Dejan不知怎么把他硬盘控制器的内部闪存废掉了,然后想知道有没有办法,要么从外部闪存启动控制器,要么重写一下内部闪存。过了五天,没人回应他,但是这哥们很有创造力:他又发了个帖子说他找到了JTAG口的管脚。这真是个重大发现:JTAG接口可以用来控制控制器。你可以用它启动控制器、重启、修改内存、设置断点等等。然后Dejan发现了如何关掉控制器的启动ROM,找到了硬盘一个串口,然后试图恢复他的闪存ROM。后来他又提了一些关于更新闪存的过程,最后消失在茫茫人海中了。
这些都是有用的信息:至少我知道了西部数据的控制器是ARM内核的,有JTAG接口。这些硬盘通常有串口,虽然没有使用但是可以用来调试程序。有了这些,我应该有足够的信息可以开始破解了。
嗯,这些是我的准备工作:
那个红色的是一块FT2232H的小板,大概30欧元,很便宜,可以用来进行JTAG调试,串口,还有SPI通信。把它连到硬盘的JTAG口,还有串口上。硬盘直接连到我电脑主板的SATA口上,还有外部ATX电源。我用OpenOCD来驱动JTAG接口。
现在的问题是:这玩意真能工作么?Dejan用的是88i6745控制器的2.5” 250G硬盘,他检测到的是ARM9内核。我找的是88i6745控制器的3.5” 2TB硬盘,有不同的格式因素,而且有点新。幸运的是,OpenOCD可以自动检测JTAG连接的设备。如下所示:
这我就有点搞不懂了……我本来估计会有一个tap,就是单独的ARM内核……可这里竟然有三个tap……难道这个片子有三个ARM内核?
一番研究后,我发现这个芯片真的是有三个内核。两个是Feroceon的内核,是比较牛逼的类似ARM9的内核,还有一个是Crotex-M3内核,比较小,相比更像微控制器的核心。鼓捣了一阵(以及后来的研究)发现这些控制器各自有不同的功能:
Feroceon 1 处理对磁盘的物理读写操作
Feroceon 2 处理SATA接口
Feroceon 2 同时处理缓存以及将逻辑块寻址翻译成柱面/磁头/扇区
Cortex-M3 貌似啥都不管?我给他关掉硬盘也没啥问题。
现在从哪个核心开始破解呢?我的目标是通过使用修改的硬盘固件来影响系统的安全。最简单的方法,同时也可能是最难检测的方法就是直接修改数据。这种方法不需要修改磁盘上的数据,固件可以使自己隐身不可见。为此,我需要找到一个合适的核心来进行监听:我需要一个能在从硬盘到SATA线的传输过程中接触到数据的核心,同时可以被操纵在磁盘和SATA线缆之间修改数据。
现在,数据是如何从硬盘盘片上送到SATA借口上的呢?凭黑客的直觉我推测:
如果处理器工作在150MHz,使用标准的内存复制,它们就只能达到150*23/2=2.4Gbp的速率,而实际情况要比这个少很多。硬盘的速度是6Gbps,所以肯定有些加速硬件参与其中。最可能的加速硬件应该就是使用DMA(直接访问内存)。那就意味着数据直接从磁头读回来放进内存,没有处理器的参与。SATA口也是一样:处理器只指明数据在哪里,DMA会直接从内存中读数据。
如果是这样的话,DMA引擎指向的内存会在哪呢?硬盘的缓存是个好地方:数据从磁盘读出来总是要放进缓存的,所以当读取磁盘的时候马上去那里复制也就说的通了。我之前发现第二个Feroceon负责管理缓存;于是它就成了我的首选目标。
就这样,我推断数据通过DMA来读写,不需要任何CPU动作。现在的问题是:既然CPU不会在正常操作中接触数据,那么CPU能不能(非正常地)接触到数据呢?为了解答这个问题,我首先使用JTAG连接,用了一些反汇编,来看看Feroceon2号的内存。
如你所见,内存图有些零碎。RAM中有一些小块散落着,还有一些IO空间和IRQ空间,以及一块内部启动的ROM。还有一块64MB的数据段,我猜这个是用作缓存的DRAM。一起来看看是不是这样。首先,我把硬盘加载到我的电脑上,在硬盘上的一个文件里写入「Hello world」。现在看看我是否能从64MB的内存中找到这个字符串。
没错,找到了!看起来Feroceon2号可以读取缓存,并对这块64MB的DRAM进行了地址映射。
当然了,如果我想要在缓存里修改数据,我可不能每次都完全扫描整个64MB的缓存:我需要知道缓存是如何工作的。为此,我需要进行反汇编并理解硬盘的固件,至少要明白缓存的函数。
对固件进行反汇编,可不是个简单的活。首先,代码混合了ARM和Thumb指令,如果你没有自动切换两种指令的反汇编器就很令人抓狂了。而且,没有那些能使反汇编更简单的信息了:一般程序都被写好了,当有东西出错总会弹出类似「Couldn’t open logfile!」的信息。这些信息对于了解代码功能有很大帮助。而这个固件,一条信息都没有:你得自己看代码来知道代码在做什么。代码库好像有点老,而且有些时候反汇编的感觉就像给代码加了很多特性,把所有事情都搞得更复杂。
当然,也有几件事使得反汇编相对简单些。首先呢,西部数据没有故意混淆代码:没有在指令中间用些跳转的招数。还有,因为JTAG接口的存在,你可以干预代码的执行,设置断点,或者直接修改,让你非常容易地知道程序在做什么。
我看了很久代码,试着去理解,有时候用调试器验证我猜的对不对,最后我找到了缓存系统的核心代码:在RAM中的一个表,我称之为「缓存描述符表」。
缓存描述表的每一项描述了缓存中的一个块。它包含了可能在缓存中的磁盘扇区的起始LBA、缓存中存有多少硬盘数据、一些标明了缓存项的状态标志符,还有一个标明了缓存数据在内存中未知的数。
现在,缓存描述符表的秘密还没有被揭开,我能否在数据送出SATA口之前截断磁盘读取码?为此,我需要在磁盘控制器上执行我自己的代码。不仅如此,我还需要确定代码能否在正确的时间运行:如果它修改缓存太早,数据还没进去;如果太晚的话,数据已经送到PC了。
我的方法是绑定在一个已存在的任务上。我破解的是Feroceon2号,这个CPU负责所有的SATA传送,所以肯定有个服务是负责设置SATA硬件去缓存中读取数据。如果我找到这个服务,我就可能在它之前运行我的代码。
在看了很多代码,设置了很多断点,修改了很多次之后,我最终找到了某个符合条件的服务。我通过连接让这个服务在执行前先运行我的代码。这是原来的代码:
000167BE ; r0 - slot in sata_req
000167BE sub_0_167BE:
{R4-R7,LR}
R1, R0, #4
R0, =sata_req
SP, SP, #0x14
R6, R1, R0
R1, [R6,#0xD]
R2, =stru_0_40028DC
R1, [SP,#0x28+var_1C]
R0, [R6,#(off_0_FFE3F108+2 - 0xFFE3F0FC)]
R5, [R6,#(off_0_FFE3F108 - 0xFFE3F0FC)]
R0, R0, #4
1234567891011121314
000167BE ; r0 - slot in sata_req000167BE sub_0_167BE:000167BE&&&&&&&&&&&&&&&& PUSH&&&&{R4-R7,LR}&&&&&&&&&&&&&&&& MOVS&&&&R7, R0&&&&&&&&&&&&&&&& LSLS&&&&R1, R0, #4&&&&&&&&&&&&&&&& LDR&&&& R0, =sata_req&&&&&&&&&&&&&&&& SUB&&&& SP, SP, #0x14&&&&&&&&&&&&&&&& ADDS&&&&R6, R1, R0000167CA&&&&&&&&&&&&&&&& LDRB&&&&R1, [R6,#0xD]000167CC&&&&&&&&&&&&&&&& LDR&&&& R2, =stru_0_40028DC000167CE&&&&&&&&&&&&&&&& STR&&&& R1, [SP,#0x28+var_1C]&&&&&&&&&&&&&&&& LDRB&&&&R0, [R6,#(off_0_FFE3F108+2 - 0xFFE3F0FC)]&&&&&&&&&&&&&&&& LDRB&&&&R5, [R6,#(off_0_FFE3F108 - 0xFFE3F0FC)]&&&&&&&&&&&&&&&& LSLS&&&&R0, R0, #4
这是改成连接到我的代码之后:
000167BE ; r0 - slot in sata_req
000167BE sub_0_167BE:
{R4-R7,LR}
R6, =hookedAddr
checksumFix
hookedAddr
R2, =stru_0_40028DC
R1, [SP,#0x28+var_1C]
R0, [R6,#(off_0_FFE3F108+2 - 0xFFE3F0FC)]
R5, [R6,#(off_0_FFE3F108 - 0xFFE3F0FC)]
R0, R0, #4
{R0-R12, LR}
changeThingsInCache
{R0-R12, LR}
R1, R0, #4
R0, =sata_req
SP, SP, #0x14
R6, R1, R0
R1, [R6,#0xD]
1234567891011121314151617181920212223
000167BE ; r0 - slot in sata_req000167BE sub_0_167BE:000167BE&&&&&&&&&&&&&&&& PUSH&&&&{R4-R7,LR}&&&&&&&&&&&&&&&& MOVS&&&&R7, R0&&&&&&&&&&&&&&&& LD&&&&&&R6, =hookedAddr&&&&&&&&&&&&&&&& BX&&&&&&R6&&&&&&&&&&&&&&&& .dw&&&& checksumFix&&&&&&&&&&&&&&&& .dd&&&& hookedAddr000167CC&&&&&&&&&&&&&&&& LDR&&&& R2, =stru_0_40028DC000167CE&&&&&&&&&&&&&&&& STR&&&& R1, [SP,#0x28+var_1C]&&&&&&&&&&&&&&&& LDRB&&&&R0, [R6,#(off_0_FFE3F108+2 - 0xFFE3F0FC)]&&&&&&&&&&&&&&&& LDRB&&&&R5, [R6,#(off_0_FFE3F108 - 0xFFE3F0FC)]&&&&&&&&&&&&&&&& LSLS&&&&R0, R0, #4...FFE3F000&&&&&&&&&&&&&&&& PUSH&&&&{R0-R12, LR}FFE3F004&&&&&&&&&&&&&&&& BX&&&&&&changeThingsInCacheFFE3F008&&&&&&&&&&&&&&&& POP&&&& {R0-R12, LR}FFE3F00C&&&&&&&&&&&&&&&& LSLS&&&&R1, R0, #4FFE3F010&&&&&&&&&&&&&&&& LDR&&&& R0, =sata_reqFFE3F014&&&&&&&&&&&&&&&& SUB&&&& SP, SP, #0x14FFE3F018&&&&&&&&&&&&&&&& ADDS&&&&R6, R1, R0FFE3F01C&&&&&&&&&&&&&&&& LDRB&&&&R1, [R6,#0xD]FFE3F020&&&&&&&&&&&&&&&& BX&&&&&&0x167CC
如你所见,原来的指令被跳转到的新代码替代了,新代码放在本来没用到的地址0xFFE3F000,然后又加了一句,保证代码域的校验和有效。如果没这么做的话,硬盘会尝试从盘片上读取备份,那可不是我想要的。跳转的代码执行了一个服务,叫做「changeThingsInCache」然后执行修改代码本该做的指令。最后接着执行本来的服务好像什么也没发生过一样。
现在我要写的就是修改缓存数据的服务。首先做个测试,我决定用一个下面的用伪代码写的服务:
void hook() {
foreach (cache_struct in cache_struct_table) {
if (is_valid(cache_struct)) {
foreach (sector in cache_struct.sectors) {
sector[0]=0x;
void hook() {&&foreach (cache_struct in cache_struct_table) {&&&&if (is_valid(cache_struct)) {&&&&&&foreach (sector in cache_struct.sectors) {&&&&&&&&sector[0]=0x;&&&&&&}&&&&}&&}}
这一小段代码会在每次调用的时候用0x代替缓存中每个扇区的前四个字节,所以如果我把这个上传到硬盘的话,我在我看到的每个扇区前面都会看到这个数字。我通过JTAG上传了代码……
然后你看:
当然了,我可以将固件完全破解,但是每次硬盘启动都需要用JTAG修改RAM,这就得不偿失了。我得让它保持不变,也就是说,我要把我的修改存在某个地方,每次硬盘启动都会带上这段修改程序。
我选的地方是闪存。我大概也可以放在磁盘本身的保留扇区上,但是如果我一旦弄错的话,我就没法恢复我的硬盘了。闪存芯片只是一个八个脚的标准件,所以我可以轻松地摘下来,刷掉闪存再装回去。为此,我把它焊下来然后放到万用板上,这样我就可以在编程器和硬盘之间轻松切换了。
现在,应该在闪存里写什么呢?很幸运的是,芯片中存储的格式已经找到了:它包含了多块数据,还有一个表在最开始描述了这些数据。这个表描述了闪存中代码块的位置,如何压缩的(如果压缩了的话),代码块应该在放在RAM的什么位置,而且在最后的地址中是一个执行指针,标记了启动器应该跳到什么地方去执行程序。
不幸的是,我不能修改闪存中的代码;我想加钩子的地方的数据被某种不知道的压缩算法压缩了,我就不能修改了。然而我能做的是增加一个额外的代码块,修改执行地址这样这个代码块就可以在其他之前执行了。这样一来就简单多了。当我的代码块执行的时候,我就可以在已经解压的代码中加入我的钩子了。
当然,我得反汇编,再重编译闪存的二进制代码。我为此做了个小工具,非常俗地起名为「fwtool」。这个小工具可以读出闪存中的很多数据块,并把头翻译成文本文件以方便修改。接着你就可以修改,删除或者加上代码,然后重新编译成一个固件,准备刷回去。我用它把我的代码加到镜像中,再刷回到芯片里,把芯片装回硬盘,启动备份的文件,然后:
结果并不新鲜:就是我之前做过的。唯一的变化就是我不用JTAG就能办到了。
虽然闪存这边有了很大进展,我还是不能开始我的黑客脚本:我相信不会有任何一个服务器公司会接受这些带有反汇编又重汇编的芯片的硬盘。我需要想个办法能让芯片不从板子上摘下来就可以刷固件,最好是能直接在硬盘安装的电脑上刷。
西部数据的固件升级工具为此提供了可能性:这个工具简单地在DOS环境下的把新固件写进闪存和服务区——也就是保留扇区。根据网上资料,这个工具使用的所谓「Vendor Specific Commands」命令。也有一些其他的工具可以修改固件:比如,有一种概念验证性的,可以使用未使用的保留扇区来隐藏数据。最后有一组工具叫做「」可以通过修改固件中的字节来修改硬盘的闲置行为。这个代码同样使用VSC,通过Linux系统的SCSI(小型计算机系统接口)直通IOCTLS(输入输出控制系统)这种「正式」的途径来修改代码。我需要「借用」它的源代码,修改一下然后整合到我的fwtool里面。在胡乱猜了一阵VSC参数之后,fwtool突然可以读写电脑上硬盘的闪存芯片了。
有了这个工具,我的攻击基本完成了,如果一个黑帽子黑客获得了一个带有这样硬盘驱动器的服务器的最高权限,他就可以使用fwtool远程获取硬盘闪存,修改然后刷回去。最终,主机的主人会发现我用他的主机为非作歹,然后可能会重装系统,断掉黑客原来进入主机的路。
但是有了这个破解了的固件,攻击者可以操纵硬盘在新安装的系统里继续为非作歹。首先他需要触发行为,这需要事先在硬盘里写入一个破解固件需要的某个特定字符串。这个字符串可以在任何一个文件中:攻击者可以向服务器上传一个带有代码的.jpeg文件。他也可以通过向服务器发送在URL中追加了特定代码的文件请求来实现。这最终会在服务器的记录文件中结束,触发利用。
接下来,被破解的硬盘固件就开始捣乱了。比如,他会等待主机读出/etc/shadow中的文件,其中存储了Unix/Linux的所有密码,然后立即修改成攻击者之前写进去的一些东西。当攻击者之后尝试用他自己的密码登入系统的时候,主机会根据修改过的/etc/shadow判断密码,攻击者就可以再次轻松登录。
这是我做的演示。你可以看见我没能成功登录主机的根用户。然后我启动破解,给它一个代替密码的哈希值,也就是密码「test123」。因为Linux系统把影子文件缓存了(如同所有最近存取的文件),我需要制造很多硬盘活动把缓存清出去;这样,当我再次登录的时候,Linux系统会再次读取磁盘上的影子文件。最终,缓存已清空,我可以用假的「test123」密码登录根用户了。
当然了,恢复服务器中清除的隐秘登录方法并不是我研究成果的唯一用法。这同样可以用于防御目的。
例如,你可以做一个不可复制的硬盘:如果扇区的读取模式是随机的话,像正常的操作系统读取文件系统,硬盘会正常工作。如果硬盘是有序的读取,像硬盘复制设备那样的话,硬盘会篡改数据,无法复制出原来的内容。
硬盘控制器作为一个通用控制器也是有的玩的。你手里的是三个性能不错的CPU核心,连着一个相当大的RAM。还有一个UART作为串口,至少两个SPI接口:一个连接到闪存ROM,一个连到电机控制器。你可以通过升级外部闪存芯片来给处理器加载代码,或者甚至在启动加载器上用串口加载。为了演示芯片的能力,我在硬盘上移植了一个相当普及的软件。这个demo只是概念验证性的,串口是唯一工作的外围设备,而且没有用户空间。虽然如此, 我还是很骄傲的宣称我在我的硬盘控制器上装了一个Linux。在顶端,是标准的命令行(硬盘加载在/mnt下),低端是我在硬盘串口上的输出。
在此多解释一下这是怎么工作的:内核和启动都封装成每块大小都是一个扇区的一个个的包,包的前面带有特殊字符串和编号数字。通过从磁盘读取数据,内核和启动最终会进入缓存。写入特殊字符串「HD, Inx!」最终触发了修改过的固件,在缓存中搜索所有扇区,重编译内核然后启动。但是一个没有内存控制单元的内核也需要特殊格式的用户空间。我不能把这个也编译了,所以内核最终因为找不到init来执行而崩溃。
是的,就是这样。虽然硬盘控制器如同一个不知其究竟的野兽,它仍能通过逆向工程加以了解,并为其写出代码以执行。对控制器的未知,使得通用破解充满难度,令我怀疑这东西是不是永远不会出现一个恶意的固件补丁:相比对每个服务器的每个硬盘固件进行逆向工程加以破解,还是找一个0day漏洞更加简单吧。
我还希望证实一个坏掉的硬盘仍然能够使用。当硬盘的机械部分坏掉的时候,PCB仍然带有可用的嵌入式系统,其性能相当不俗,尤其是坏的硬盘基本都不要钱就能拿到。
开放安全工程的源代码什么的太恶劣了。我想开放代码,但是我不想为由此产生的大量的「永久破解」的服务器负责……我决定做个妥协:你可以在下载代码,但是我移除了影子替代部分的代码。注意:反正我不负责让整个过程完全可运行;黑客,你自己来吧。
关于作者:

我要回帖

更多关于 电脑自己怎么重装系统 的文章

 

随机推荐