更新引用而不反编译源
本文关键字:编译 引用 更新 | 更新日期: 2023-09-27 18:23:40
我正在寻找一种方法来更改.NET exe中引用的DLL。
为什么?我有一个CrackMe,要破解它,我不允许使用Reflector来修改(这太容易了,但我允许读取其源代码)。而且我必须这样做。(这就是这个疯子的挑战)
问题是,源代码被控制流弄糊涂了,我不允许使用任何自动工具来解决它,所以手动操作会很长时间,也很痛苦。
crackme使用嵌入其自身的开源库来工作,因此我可以下载该库的源代码,用一些"转储"代码对其进行修改(因为crackme使用其API,还将序列号提供给API,我会将其修改为转储),将其放回crackme中,运行它并在桌面上获取密钥。
它应该(但不是强制性的)用ILDASM来完成。
所以,问题是:有没有办法用我自己的"更新"引用的DLL
您可以使用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程序集