2

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

为什么?我有一个CrackMe,要破解它,我不允许使用 Reflector 进行修改(太容易了 - 但我可以阅读它的源代码)。我也必须这样做。(这就是这个crackme的挑战)

问题是源被控制流混淆了,我不允许使用任何自动工具来解决它,所以手动操作会很长而且很痛苦。

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

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

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

4

1 回答 1

6

您可以使用 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 程序集

于 2013-07-18T10:57:17.293 回答