【发布时间】:2018-12-12 09:35:56
【问题描述】:
是否可以让 .NET CLR 忽略某些异常?例如,throw 将被简单地跳过,函数继续执行,就好像什么都没发生一样?
是否可以在不修改代码从哪里抛出的情况下做到这一点?该软件是.NET 4.6.1 WinForms。
原因是由于对某些具有数千个校验和例程的恶意软件进行逆向工程,我需要修改 MSIL 代码并因此更改校验和,通过 dnlib 脚本删除所有例程将是非常耗时的任务。如果我可以阻止特定的异常,我可以避免这个耗时的任务。
编辑:我记得在某些 WinForms 应用程序中看到“发生异常,您要继续还是退出?”如果我能有效地拒绝异常并继续,就好像它从未发生过一样,这当然是我所需要的。
示例: 请注意,我不是在编写代码。我正在用 dnspy 编辑一个已编译的 exe,所以我不能轻易更改代码,我必须手动编辑 MSIL 字节码。
public void Test(){
throw new ArgumentException("ignore this");
MessageBox.Show("Successfully ignored exception");
}
【问题讨论】:
-
如果您能提供minimal reproducible example,那就太好了。
-
是否可以通过添加一个异常处理程序来以某种方式返回到原始抛出?
-
对不起,我不明白你的意思...
REing是什么?还有malware which has thousands of checksum routines是什么意思?虽然这听起来像是对异常进行全局忽略的错误方法(即使你能做到,我认为你做不到) -
REing = 逆向工程。我有一个 .net 恶意软件样本,我正在尝试对其进行逆向工程。我需要修改 MSIL 代码以使其运行,但这会破坏内置的校验和例程。我可以修改所有 2000 个校验和例程,但这会很耗时。如果我可以简单地禁用未处理的特定异常,那么我可以很容易地“禁用”所有校验和例程。这个或修改大量例程是我可以修改代码并运行它的唯一方法。
-
这些总是相同的例外吗?然后你可能只是 nop 出相应的字节模式。
标签: c# .net exception clr reverse-engineering