如何崩溃的.NET公共语言运行库(CLR)在纯.NET(How to crash the .NET common language runtime (CLR) in pure .net)

   IT问题网   2019-08-21 00:00:00

问 题

有针对 java虚拟机了类似的问题,但我的天堂" t上找不到的。net的问题(请关闭并标记为重复的,如果我失去了一些东西)。

所以 - 这可能不讨厌的非托管互操作?并与崩溃我的意思是一个真正的"xxx.exe已停止工作"不是一个stackoverflow-或outofmemoryexception异常。

我认为这是不可能的,打在虚拟机本身的错误时除外。

解决方案

嗯...你如何定义"纯.net"?我打了clr2 /代理/的gchandle /阵列时,我读了"如何崩溃jvm"的帖子,并提出了这样的事情:

 使用系统;
使用的system.reflection;
使用了system.runtime.interopservices;

命名空间testclr2crash {
静态无效的主要(字串[] args){
//声明一个委托,它指的是一个静态方法,
//在这种情况下,它是从所生成的静态方法
//匿名委托。
动作动作=委托(){};

//"生成"code到uint的数组
var fakedelegate =新的uint [] {
//虚值
00000000,00000000,
//假_methodptraux
00000000,
//本地code /串
0x6aec8b55,0x2fd9b8f5,0xd0ff7c81,0x006a006a,
0x00e81f6a,0x83000000,0x50102404,0x81cc5dba,
0x8bd2ff7c,0x47c35de5,0x74656572,0x73676e69,
0x6f726620,0x6567206d,0x6172656e,0x20646574,
0x65646f63,0x00000a21
};

//填写假_methodptraux,
//使其指向fakedelegate的code区
var手柄= gchandle.alloc(fakedelegate,gchandletype.pinned);
变种addr = handle.addrofpinnedobject();
const int的sizeofuint32 = sizeof的(uint); // 4
const int的的indexof code = 3;
fakedelegate [2] = convert.touint32(addr.toint32()+ sizeofuint32 *的indexof code);

var targetinfo = typeof运算(动作)
.getfield("_target",bindingflags.nonpublic可| bindingflags.instance);
targetinfo.setvalue(动作,fakedelegate);
行动( ); //将产生code问候!
console.writeline("问候管理code!");

handle.free();
}
}
}
 

这只是知道在x86工作在32位的windows xp clr2;也可称为不与vista和windows 7等,其中,dep + aslr是在默认情况下工作。

有趣的关于code上面的一点是,它并没有明确使用不安全code(虽然gchandle.alloc(...,gchandletype.pinned)要求的安全权限),但它管理伪造一个数组委托实例,并调用数组中的x86机器code。 c本身的$ c $是纯c#,如果不计算嵌入式x86 code一些"外语";-) 基本上,它利用的clr2的静态方法的委托内部实现,这代表了一些私有成员实际上是内部指针。我酿86 code到一个数组,被分配在托管堆上。因此,为了使这项工作,dep不能启用,否则我们将不得不寻找其他方式来获得内存页的执行权限。

在86 code是这样的:(伪masm语法)

55推送ebp
8bec mov ebp,esp
6a f5推-0b; / devtype = std_output_handle
b8 d92f817c mov eax,kernel32.getstdhandle; |
ffd0调用eax; \ getstdhandle
6a 00推0; / preserved = null
6a 00推0; | pwritten = null
6a 1f推1f; | charstowrite = 1f(31)
e8 00000000电话&安培; next_instruction ; |
830424 10加dword ptr ss:[esp],10; |缓冲器
50推eax; | hconsole
ba 5dcc817c mov edx,kernel32.writeconsolea; |
ffd2呼叫edx; \ writeconsolea
8be5 mov esp,ebp
5d弹出ebp
c3 ret
 

这是不是通过命令行指定的行为,不会对其他cli实施如单工作。还有其他的方法,使单上的类似的逻辑来看,虽然,已经尝试过,对ubuntu的9.04 w /单声道2.4和工作。

我在这里写了一篇博客吧: http://rednaxelafx.javaeye.com/blog/461787

这是在中国,而且有足够的code有哪些应该解释我做了什么。使用同样的伎俩,在博客文章的最后,我表现出了几个例子你如何能调整上面的code键使出问题,如获取一个sehexception。

标签:如何崩溃公共语言运行



分享:

  • 微信
  • QQ好友
  • QQ空间
  • 新浪微博


热门推荐

类/模型级别验证(而不是属性级别)? (ASP.NET MVC 2.0)(Class/Model Level Validation (as opposed to Property Level) (ASP.NET MVC 2.0))

problem basically, what the title says. i hav ...

为了避免出现InvalidOperationException最佳实践:集合已修改?(Best practice to avoid InvalidOperationException: Collection was modified)

problem very often i need something like that: foreach ...

为什么在C#4.0的可选参数需要编译时常?(Why do optional parameters in C# 4.0 require compile-time constants)

problem also is there a way to use run-time v ...

不能添加欣赏到EDMX(cannot add view to the edmx)

problem when trying to add a view to the edmx ...

目前已经在IP端点0.0.0.0:13000监听器。 ? (TCP使用WCF)(There is already a listener on IP endpoint 0.0.0.0:13000. (TCP using WCF))

problem i'm trying to figure out why the port is being us ...

这是使用System.Security.Principal.WindowsIdentity的合理的安全?(Is this use of System.Security.Principal.WindowsIdentity reasonably secure)

problem is system.security.principal.windowsidentity reas ...

C#拖放放大器;从列表框中下降到TreeView控件(C# Drag & drop from listbox to treeview)

problem i have a winform with a listbox and a treeview. ...

C#检查远程服务器(C# Check Remote Server)

problem can anyone advise what the best way to check (usi ...

如何获取数字HTTP状态codeS在PowerShell中(How to obtain numeric HTTP status codes in PowerShell)

problem i know of a few good ways to build web clients in ...

反映从基类的私人领域(Reflecting a private field from a base class)

problem here is the structure: myclass : superclass2 su ...

除通过JavaScript来本地磁盘作为.png文件渲染SVG图像(Save svg image rendered by a javascript to local disk as .png file)

problem i am new to svg and not an advanced user of javas ...

单元测试System.Timers.Timer的(unit testing system.timers.timer)

problem i've been reading over the questions about unit t ...

为什么String.IsNullOrEmpty比string.length减得快?(Why is String.IsNullOrEmpty faster than String.Length)

problem ilspy shows that string.isnullorempty is implemen ...

ASP.NET例外"正在中止线程"导致方法退出(ASP.NET exception "Thread was being aborted" causes method to exit)

problem in the code below, sometimes somefunc ...

如何通过在磁盘上真正大文件扫描?(How to scan through really huge files on disk)

problem considering a really huge file(maybe more than 4g ...

字符串和垃圾收集(Strings and Garbage Collection)

problem i have heard conflicting stories on this topic an ...

在C#中如何蚕食(半字节)字节?(How can you nibble (nybble) bytes in C#)

problem i am looking to learn how to get two ...

ASP.NET网站内存使用率相当高(ASP.NET Website Memory Usage quite high)

problem i have an asp.net website that will h ...

在.NET 4.0中,什么是对的Equals值类型的默认实现?(In .NET 4.0, What is the default implementation of Equals for value types)

problem the two documentation pages seem to contradict on ...

如何确定文件是否在.NET中的图像文件?(How can I determine if a file is an image file in .NET)

problem i don't want to rely on the file exte ...