更新参考而不反编译源代码?

use*_*365 2 c#

我正在寻找一种方法来改变.NET exe中引用的DLL.

为什么?我有一个CrackMe,为了破解它,我不允许使用Reflector进行修改(太简单了 - 但我可以阅读它的来源).我也必须这样做.(这就是这个裂缝的挑战)

问题是源被控制流混淆了,我不允许使用任何自动工具来解决它,因此手动操作将是漫长而痛苦的.

crackme使用一个嵌入其自身的开源库来工作,所以我可以下载库的源代码,用一些"转储"代码修改它(因为CrackMe使用它的API并且还提供了该API的序列,我会修改转储),把它放回到crackme中,运行它并在我的桌面上获取密钥.

它应该(但不是强制性的)与ILDASM一起完成.

所以,问题是:有没有办法用我自己的"更新"引用的DLL?

小智 6

您可以使用ildasm将程序集拆分为IL代码.您可以使用以下命令:

ildasm.exe <YourAssembly> /output:YourAssemblyILCode.il
Run Code Online (Sandbox Code Playgroud)

现在,您可以在IL代码中更改程序集引用(版本和公钥标记).IL代码中对外部程序集的引用如下所示:

.assembly extern System
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         
  .ver 2:0:0:0
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用ilasm.exe将更正的IL文件组装到.NET程序集