c# - 在没有源代码的情况下编辑 C# 程序集的 IL 不反射(reflect)执行时的更改

标签 c# reverse-engineering decompiling

好吧,我有一个应用程序,我的任务是编辑该源不可用,并且由于保密性,我无法共享该应用程序/代码 - 我意识到这使得这类问题具有挑战性,但因为我之前已经这样做过相信这是我忽略的简单事情。

我过去曾执行过此操作,唯一的区别是这是使用 4.5 和最新的 C# 编译器等构建的新版本。

场景如下:

我可以打开应用程序,正确读取它并编辑 IL。事实上,我可以在 Reflection 桌面(最新)、Telerik(我通常使用的)中使用 reflexil 毫无问题地编辑它,也使用更新的 reflexil,然后我还尝试了 dnSpy latest nightly 3.0.1。

哎呀,以为我疯了我什至使用旧的GreyDragon打开它,还编辑了一些IL,保存了exe程序集,甚至直接在入口点main中的IL仍然没有按更改执行,而是像之前未更改的原始文件一样执行,但在所有这些工具中,如果我重新打开以前编辑和保存的程序集 exe,它在所有情况下都会正确显示更改,包括反编译的 C# 和相应的 IL 指令。

我唯一可以指出的可能再次不同的是较新的目标 dotnet 版本,它是在较新的 C# 编译器/版本中编译的。

那么,是否有任何原因导致最新版本的 C# Rosylyn 等会阻止以前工作的 IL 编辑方法(以及几乎所有可以进行 IL 编辑的工具)现在工作,几乎就像一个二级指令备份表等. 拥有将要执行的未经编辑的原始副本?

或者,程序集重新生成的特定“设置”是否会导致此行为?

在我开始尝试描述更精细的细节之前,让我们先了解一下我可能遗漏的一些基本障碍。

再次抱歉没有实际的代码可以分享,但希望真正的大师会知道发生了什么并有想法。谢谢!

最佳答案

发布我自己的答案不敢相信我错过了这个。

答案是即使它没有作为程序集安装在 GAC 中,这个应用程序的行为发生了变化,我错过了一个进程以某种方式运行 NGEN.EXE 以将 NI native 镜像编译为 native 镜像并安装它 -然后包含有问题的 friggin 机器代码的缓存版本 - 正是我的直觉所说正在发生的事情我只需要找到那个“备份副本”。

关于c# - 在没有源代码的情况下编辑 C# 程序集的 IL 不反射(reflect)执行时的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42543297/

相关文章:

java - 了解 Dalvik 代码的反汇编?

java - 修改Java字节码中的一个字符串(jar)

java - 字节码序列反编译

c# - 如何在已编译的 DLL 中编辑硬编码字符串?

C# Sql 客户端 - 无法插入名称以数字开头的参数化列

c# - 如何检查 C# 中的库 (dll) 是否可用?

c# - 如何根据其值在 AutoGeneratingColumn 事件期间设置数据网格单元格的背景?

android - 寄存器的类型为 Long(High Half)但预期为 Long(Low Half)

c# - 是否可以反编译整个 .NET 应用程序?

c# - 为一个键反序列化具有多种数据类型的 JSON 文件