我目前正在学习 MSIL 并想尝试一下,如果我可以通过 Notepad++(使用 Hex-Editor 插件)“破解”只编辑字节码的程序集。因此,我编写了一个简单的控制台应用程序,采用一个参数,对其进行散列(SHA256),将其与已设置的散列进行比较,并将“正确”或“错误”写入控制台。我用 ildasm.exe 打开了这个小应用程序,发现我只需要更改 2 个字节就可以让我的应用程序每次都说“正确”。所以我在记事本++中打开它,改变了这两个字节,它就起作用了。现在我想尝试保护我的应用程序免受我尝试过的攻击。我遇到了强名称密钥文件,但我仍然能够将它们更改为字节 2,使我的应用程序每次都说“正确”。
所以我的问题是:有没有办法保护 .NET 程序集免于编辑操作码?我并不是说要保护它免于在 Notepad++ 中打开,而是指一种允许我的应用程序检测对可执行文件所做更改的机制(无需检查文件的修改日期)。我知道没有完全的保护,每次都会有差距,但是必须有一种方法可以给应用程序至少一点修改保护。
例如:我可以尝试从我的应用程序中生成一个散列并与给定的散列进行比较,但这不起作用,因为当我生成一个散列并将这个散列放入我的应用程序时,应用程序的散列会改变。