[踩坑记录] C# 源代码被误删, 通过反编译之前编译好的文件来拯救这一切, 三款反编译工具对比

35 篇文章 1 订阅
23 篇文章 0 订阅

事件:

首先, 语言是C#, 然后我把代码给删了… 但是在删之前, 我编译过一次, 所以… 我就想着使用反编译工具来搞了.

我知道的反编译工具, dnSply, ILSpy, dotPeek

dnSpy是ILSpy的一个分支(dnSpy is a .NET assembly editor, decompiler, and debugger forked from ILSpy)

dotPeek 是 JetBrains 的反编译工具, 在这之前我还没使用过.

开始吧:

> 首先, 是 dnSpy 上场:


乍一看, 没啥问题, 但是, 会有很多毛病哦~ 一一道来吧:

  1. dnSpy 的反编译结果, 似乎不会吧字段和方法放在一起, 我也没找到它反编译的字段定义跑哪去了…
  2. 会有一大堆奇怪代码, 跟我们想要的源代码完全不一致, 即便导出为项目, 也会有无数个错误
  3. 总之, dnSpy是个反编译的好工具, 但还不能够完全获取源代码…

总之先导出一下吧, 选中你的项目, 然后程序左上角, 文件(File) -> 导出为项目(Export to project)

然后就是… 惨不忍睹… 左下角的错误数量 99+ 了已经, 完全没有纠错的必要.

> 然后, 就是 ILSpy 上场了:


嗯好吧, 我承认 ILSpy 没有 dnSpy 好看, 但这可不是决定实力的第一要素.

  1. 你看到了, 枚举, 字段, 方法, 一切都井然有序
  2. 仔细看看, 中间的那个 switch 语句, 瞧瞧! 这不是 C#8 的新语法嘛! (我当初没有使用这个语法哦)
  3. 完全没有任何奇怪的变量名

那么我们尝试导出项目吧! 在左侧选中项目, 右击, 选择 Save Code 以导出项目

感动世界!!! 没有任何错误! 非常非常非常完美~

> 再试试 dotPeak:

哦豁, 看样子, 也不错啊.

  1. dotPeek 没有像 ILSpy 那样将 switch 还原为 C#8 的语法, 而是使用的旧的语法
  2. 没有奇怪的变量名, 奇怪的语法
  3. 出现了我没有写过的东西, 标签

导出项目咯, 直接右击项目, 然后 Export to Project

唔, 一开始就与众不同呢… 跟普通的项目完全不一样, 少了一些文件夹…

嘛, 总之先试着打开吧.
果然在VS里面一眼就能看出错误了!

它居然在本地方法的前头中加了static… 好吧好吧, 我知道它们本质上是静态的, 但你这么弄, 我可就不能编译了呀. (假设我很懒, 懒到连这仅有的一个错误也不愿意改)

总结:

如果说我平常使用, 我肯定会用 dnSpy (颜值高), 毕竟平常还是很少改源代码甚至导出为项目滴, 如果是像这次的特殊情况, 我就会用 ILSpy, 很强大的有木有? 至于 dotPeek, 打入冷宫了, 而且加载速度慢的一批, 等它启动完, 黄花菜都凉了.

也算是大成功了, 所以, 如果想要通过反编译来挽回删掉的文件, 那么请使用 ILSpy 吧! 经过这一次使用, 我也是爱上 ILSpy了, 毕竟一开始我没报有这么大希望.







如果你觉得有什么改进的, 或者有什么下期文章的建议, 评论区见ovo

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值