首页
社区
课程
招聘
[原创]解决ilasm.exe无法编译 IL代码一例
2009-9-5 15:05 16699

[原创]解决ilasm.exe无法编译 IL代码一例

2009-9-5 15:05
16699
众所周知,ildasm.exe和ilasm.exe是破解DONET常用工具之一,但是有时候我们会发现有的程序可以用ildasm反编译,却无法用ilasm编译回去。其中部分是由于包含非托管代码而引起的,这种混合类的程序用ilasm是100%不会成功的,本文也不会讨论这种情况。或许更多的时候你会遇到这样的情况:

错误是:Failed to open managed resource file 'xxx.resource'这类程序大多是被{SA}混淆过的。为什么会找不到这些资源文件呢?结果我们发现这些资源文件根本没有被反编译程序导出来,于是我们用Reflector手动来导出看看。

结果提示无效的文件名。原来程序经过混淆后,将资源名更改成了windows不支持的文件名,那么当然无法导出这些文件了。那么解决此问题的办法就是我们可以在导出的时候将其更改为一个合法的新资源文件名就行了。但是不要忘了,我们同时还应该在导出后的IL代码中将调用的旧资源名的地方也要修改成新的资源文件名。代码方面可以通过GetManifestResourceNames()和GetManifestResourceStream(xxxx)实现。但是为了把傻瓜精神进行到底,我特别写了一个程序来方便大家。

第一个选项是自动导出,自动修改IL代码,正常情况下,被导出的IL代码是可以被直接编译成功的,但是程序毕竟是程序,不可能预见到所有的突发情况。那么大家可以使用第二或者第三个选项自己导出资源文件,自己修改IL代码了。
耳听为虚,眼见为实,我们拿刚才那个无法编译回去的程序试一试。
导出IL代码后,我们再用ilasm.exe编译回去看看。

怎么样,还不错吧。

用Reflector打开看看。资源名已经被修正了。

附件提供了不能被反编译回去的crackme。
如果有更好的意见,欢迎一起讨论。另外这个程序是用WPF写的,需要安装DONET Framework3.5 SP1或以上版本。

http://bbs.pediy.com/attachment.php?attachmentid=33525&d=1256485356

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
  • 1.JPG (42.63kb,560次下载)
  • 3.JPG (24.53kb,549次下载)
  • 4.JPG (27.29kb,549次下载)
  • 5.JPG (40.54kb,553次下载)
  • 6.JPG (6.39kb,548次下载)
  • 7.JPG (13.61kb,553次下载)
收藏
点赞7
打赏
分享
最新回复 (21)
雪    币: 291
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
leking 2009-9-5 20:31
2
0
有字有图,好文章
雪    币: 370
活跃值: (15)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
快雪时晴 4 2009-9-5 20:36
3
0
刚回来,开机,就顶好文
雪    币: 370
活跃值: (15)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
快雪时晴 4 2009-9-5 20:40
4
0
程序GUI中选项那一栏都看不清哦

终于有dotnet好文好工具了,赞一个
雪    币: 7276
活跃值: (2481)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
logkiller 2009-9-5 21:54
5
0
收藏了先,谢谢楼主
雪    币: 83
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
atrm 2009-9-6 07:06
6
0
谢谢大师,好工具
雪    币: 716
活跃值: (162)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
elance 6 2009-9-6 11:56
7
0
图文直播,支持
啥是WPF?
雪    币: 93
活跃值: (11)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
tease 2009-9-6 19:41
8
0
感谢大家支持。
WPF是Windows Presentation Foundation的缩写,微软的下一代显示系统,用于生成能带给用户震撼视觉体验的 Windows 客户端应用程序。支持动画脚本,使用DirectX 显示技术。
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
dotNetSafe 2009-9-6 23:49
9
0
tease大师又发飙了 !! 呵呵

改天发个我混过的程序, 看看能不能 编译??  呵呵

不错, 顶了!!!!!
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
yingyue 2009-9-7 00:51
10
0
对 .net 完全不懂的收下了,谢
雪    币: 83
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
atrm 2009-9-23 17:23
11
0
如果支持直接修改,那就好,希望能改进,谢谢
雪    币: 83
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
atrm 2009-9-23 17:29
12
0
目前被 Smart Assembly 最新版本混淆的程序,转存后,不能使用ilasm编译后去,不要说资源,被混淆的模块和方法都提示错误,所以希望能直接修改就好
雪    币: 149
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cnlcg 2009-9-27 12:53
13
0
能做成个像reflexil 插件那样直接修改资源名的工具就好了
不过这个工具也相当不错了
代码方面可以通过GetManifestResourceNames()和GetManifestResourceStream(xxxx)实现


用mono也可以修改程序集的资源名
另外修改#string中的资源名字也行
雪    币: 83
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
atrm 2009-9-27 16:46
14
0
遇到Smart Assembly混淆,起不了作用了
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
dotNetSafe 2009-9-27 17:59
15
0
修改资源名 是不是修改元数据的资源名就可以了?
雪    币: 172
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wangshen 2009-10-2 22:04
16
0
不错 顶..
雪    币: 83
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
atrm 2009-10-2 23:09
17
0
.NET的最高是优秀主题了,发现楼主已经很久不发言,与这个有一定关系吗?
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zphlx 2009-10-3 08:17
18
0
学习了,谢谢
雪    币: 93
活跃值: (11)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
tease 2009-10-25 23:47
19
0
更新一下版本:
1、正确的资源名不会被替换,只替换错误的资源名。
2、增加了一个选项,可以替换包含#号的类名、方法名。注意默认没有选中。
3、更改了字体显示,非法的文件名显示结果和Reflector一样。

上传的附件:
雪    币: 93
活跃值: (11)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
tease 2009-10-25 23:48
20
0
说明一下,直接修改可以做,我尝试了一下mono的Cecil。可惜,有些软件加壳后用Cecil无法调用成功。个人感觉还是微软的东西兼容性好一些。大家还是这样凑合着用吧......
雪    币: 83
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
atrm 2009-10-26 09:54
21
0
谢谢更新,大师真好人
雪    币: 199
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mazhaozi 2017-7-12 20:49
22
0
好人谢谢
游客
登录 | 注册 方可回帖
返回