解决ilasm.exe无法编译 IL代码一例

众所周知,ildasm.exe和ilasm.exe是破解DONET常用工具之一,但是有时候我们会发现有的程序可以用ildasm反编译,却无法用ilasm编译回去。其中部分是由于包含非托管代码而引起的,这种混合类的程序用ilasm是100%不会成功的,本文也不会讨论这种情况。或许更多的时候你会遇到这样的情况:
名称:  1.JPG
查看次数: 524
文件大小:  42.6 KB
错误是:Failed to open managed resource file 'xxx.resource'这类程序大多是被{SA}混淆过的。为什么会找不到这些资源文件呢?结果我们发现这些资源文件根本没有被反编译程序导出来,于是我们用Reflector手动来导出看看。
名称:  7.JPG
查看次数: 522
文件大小:  13.6 KB
结果提示无效的文件名。原来程序经过混淆后,将资源名更改成了windows不支持的文件名,那么当然无法导出这些文件了。那么解决此问题的办法就是我们可以在导出的时候将其更改为一个合法的新资源文件名就行了。但是不要忘了,我们同时还应该在导出后的IL代码中将调用的旧资源名的地方也要修改成新的资源文件名。代码方面可以通过GetManifestResourceNames()和GetManifestResourceStream(xxxx)实现。但是为了把傻瓜精神进行到底,我特别写了一个程序来方便大家。
名称:  3.JPG
查看次数: 521
文件大小:  24.5 KB
第一个选项是自动导出,自动修改IL代码,正常情况下,被导出的IL代码是可以被直接编译成功的,但是程序毕竟是程序,不可能预见到所有的突发情况。那么大家可以使用第二或者第三个选项自己导出资源文件,自己修改IL代码了。
耳听为虚,眼见为实,我们拿刚才那个无法编译回去的程序试一试。
导出IL代码后,我们再用ilasm.exe编译回去看看。
名称:  4.JPG
查看次数: 522
文件大小:  27.3 KB
怎么样,还不错吧。
名称:  5.JPG
查看次数: 526
文件大小:  40.5 KB
用Reflector打开看看。资源名已经被修正了。
名称:  6.JPG
查看次数: 521
文件大小:  6.4 KB
附件提供了不能被反编译回去的crackme。
如果有更好的意见,欢迎一起讨论。另外这个程序是用WPF写的,需要安装DONET Framework3.5 SP1或以上版本。


http://bbs.pediy.com/attachment.php?attachmentid=33525&d=1256485356
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值