如果我可以写一个会破坏我的操作系统(不是我的应用程序)的用户程序,我该怎么做?
我正在考虑以某种方式将我的usermode程序切换到内核模式并导致内存损坏。有可能吗?
注意:我没有创建病毒。只是好奇心。
答案 0 :(得分:8)
KeBugCheck是获得BSOD的记录方式。
您还可以尝试使用 native NT API在Windows XP中删除 root 注册表项(\REGISTRY
)。
答案 1 :(得分:7)
编写并加载调用panic()或实现其等效的内核模块。
或者只是执行shutdown或halt命令或实现它的系统调用。
答案 2 :(得分:6)
如果操作系统恰好是Windows,请创建一个取消引用NULL指针的假驱动程序。崩溃!
答案 3 :(得分:4)
操作系统的整体思想是用户程序在正常情况下不会崩溃。当然,你仍然可以做一些事情,比如耗尽用于交换文件的分区上的磁盘空间,这会损害许多操作系统,或者你可能会发现一个已知的漏洞,但没有一种非常简单的方法可以使它崩溃。
答案 4 :(得分:3)
在Linux中,Alt-SysRq-C将崩溃/重新启动内核。
在Windows中,请参阅:http://www.dailygyan.com/2008/09/some-methods-to-crash-your-windows.html
答案 5 :(得分:2)
对于Windows,一种可能性是编写内核模式驱动程序,该驱动程序锁定进程拥有的一些内存页,然后终止该进程。将导致BSOD“进程已锁定页面”。
答案 6 :(得分:1)
Linux:即使没有严格地破坏操作系统,你也可以很容易地通过分配大量内存(以及读取/写入分配实际上变得有效并使操作系统交换很多)并通过分叉来使其无法使用进程“Fork bomb”是关键字,甚至可以在shell脚本中完成。
答案 7 :(得分:1)
我认为您想要崩溃操作系统的原因在这里是相关的。您是在尝试模拟测试条件,还是只是好奇?
如果您希望为了容错而重新创建和自动崩溃,这里有两个选项。
如果您希望在操作系统内部崩溃,其他众多建议都很好。这些软件崩溃可以帮助重现错误的过程。一组类似的硬件相关崩溃也可以起作用(例如降低可编程风扇的速度和CPU过热)。
您的请求背后的原因实际上非常重要,因为所有不同的错误都会产生稍微不同的结果。
答案 8 :(得分:0)
尝试分配内存块,直到没有可用内存为止:
int alloced = 0;
for(;;)
{
char *alloc = malloc(10*1024*1024); // alloc 10 MB
if(alloc != NULL)
{
alloced += 10;
// edit: you have to memset the memory otherwise the system will give it back to you next time
memset(alloc, 0xab, 10*1024*1024);
printf(" alloced %d MB\n", alloced);
}
}
修改强>: 我实际上现在尝试使用64位Linux,2GB内存和3.3GB交换:屏幕已冻结,我可以分配4950MB内存,但随后该过程被系统杀死,并且linux重新站起来优雅,所以,不,这不起作用:=)
答案 9 :(得分:0)
使用纯用户模式应用程序崩溃操作系统意味着内核容易受到攻击。 如果操作系统经过充分测试,则不应发生这种情况。
您可以通过向他们发送垃圾IO-CONTROL来攻击错误的第三方驱动程序来尝试BSoD Windows。
DeviceIoControl功能(Windows) http://msdn.microsoft.com/en-us/library/aa363216(VS.85).aspx