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

时间:2013-07-18 10:25:26

标签: c#

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

为什么呢?我有一个CrackMe,为了破解它,我不允许使用Reflector 修改 (太容易了 - 但我 am允许阅读其来源)。此外,我必须这样做。 (这就是这个问题的挑战)

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

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

应该(但不是强制性的)使用ILDASM。

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

1 个答案:

答案 0 :(得分:5)

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

ildasm.exe <YourAssembly> /output:YourAssemblyILCode.il

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

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

然后,您可以使用ilasm.exe

将更正的IL文件组装到.NET程序集