我正在寻找一种方法来更改.NET exe中引用的DLL。
为什么呢?我有一个CrackMe,为了破解它,我不允许使用Reflector 修改 (太容易了 - 但我 am允许阅读其来源)。此外,我必须这样做。 (这就是这个问题的挑战)
问题是源被控制流混淆了,我不允许使用任何自动工具来解决它,因此手动操作将是漫长而痛苦的。
crackme使用嵌入其自身的开源库来工作,所以我可以下载库的源代码,用一些“转储”代码修改它(因为CrackMe使用它的API并且还提供了该API的序列,我将修改为dump),将它放回crackme中,运行它并在我的桌面上获取密钥。
应该(但不是强制性的)使用ILDASM。
所以,问题是:有没有办法用我自己的“更新”引用的DLL?
答案 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程序集