.net core Winform程序反编译 dnSpy和ilSpy双剑合璧

        今天做了一个.Net Core Winform程序的反编译工作,由于代码量较大,工作量也有些大,起初我使用ilspy反编译,但对于窗体的编译不够理想,它把前端设计代码(from.Designer.cs)和后置代码合并了,并且部分窗体打不开;

其优点也很突出,就是代码反编译的效果比较好,更接近源代码。

于是再次找到dnSpy反编译,查看其两者的差异。

dySpy反编译窗体,会将Designer.cs文件和后置代码文件分开,这正是我想要的。

并且dnSpy的反编译有form.resources文件,我们需要把这个文件转换为resx文件,这里需要使用Resgen工具,但我发现,在现有的vs中,比如vs2019,它是不需要手动把resources文件转换为resx文件的,当双击窗体文件,会自动生成resx文件。

如果没有生成,请参考官方Resgen的用法,手动操作。只是官方只介绍到了resources到resx的转换,不能批量操作。实现批量操作,需用一段批处理脚本,保存在项目某个目录下,和大量的窗体文件在同一目录,保存为一个bat文件(Converter.bat),比如:

@echo off &setlocal enabledelayedexpansion
rem echo 当前目录:%~dp0
set DestPath=%~dp0
rem 查找的扩展名
set DestExt=*.resources
rem 不提示删除之前生成的问题,不存在也不提示
del /Q /F /A list.csv 2>nul
rem 循环文件目录里所有的文件(包括子文件夹里的文件)
for /f "usebackq delims=" %%i in (`dir /b/a-d/s  "%DestPath%\%DestExt%"`)  do (
   rem 输出文件路径及文件名到list.csv文件里
   rem echo %%i,%%~nxi>>list.csv
   ResGen.exe %%i %%~ni.resx
)
%%~ni 代表文件名
%%~xi代表文件扩展名
%%~nxi 代表文件名和扩展名

引用自:利用Bat批处理文件将.resources转换为.resx文件_批量resources转换resx 具_大可山人的博客-CSDN博客

然后在VS中,点击工具->命令行->开发者命令提示

在命令窗口中cd到bat文件所在的目录(也是窗体文件所在的目录)

然后直接输入bat文件,Converter.bat,回车执行!

看到提示:“正在写入资源文件...  完成。”,即OK

资源还原后,还需要继续反编译代码,dnSpy的反编译代码,看起来似乎过于标准!

比如:

左边是dnSpy,右边是ilSpy。可读性来看,自然是ilSpy的更舒服。且dnSpy有部分页面还原的会有代码错乱,比如class的代码结束了,后边又插出来一段其他的代码,神鬼也编译不了。

最终,我想尽量保留源代码的样子,而又要恢复窗体的设计代码及后置代码。所以,采用dnSpy和ilSpy配合使用,双剑合璧!

重点:

如果你对恢复窗体的内容比较熟悉的话,单用ilSpy也够了,在XXX.Designer.cs窗体设计代码中,以下是默认的内容。ilSpy虽然把前后代码合并,但不影响手动拆分出来,控件的布局和事件绑定等内容都在方法InitializeComponent()中,再往下放置的是控件类,比如Lable、Button等等

其他的代码,都是后置代码!!!如果你理解这些,我想不用多说了。U Can Do It!

最后:

反编译的过程中,可能还会有其他问题,比如资源没弄完整、类库版本等,类库版本需要注意下,比如.net core版本的,反编译后vs打开,类库的csproj文件中记载了以下...很多的东西,大致包含了,类库的版本信息、类库中存在的类、引用了哪些其它类库.....

.net core中哪用这么多内容!改为以下就行了,VS中重新加载下完事儿

参考:

Resgen.exe(资源文件生成器) - .NET Framework | Microsoft Learn

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1、无需设置 由于它是一个便携式工具,它不需要您将其安装在目标计算机上,因为只需拆包其存档并启动可执行文件即可完全访问其功能。 您还可以从可移动存储介质(如USB闪存驱动器或外部HDD)运行它。此外,它不会修改系统中的注册表项,也不会在您的PC上生成其他文件或文件夹,但未经您的明确许可。 2、综合界面 dnSpy配备了一个时尚,全面的用户界面,包含广泛的有用功能,它们整齐地组织在主窗口的标准菜单中。 更重要的是,它具有标准配置窗口,您可以在其中调整各种组件的设置,如其反编译器,调试器或十六进制编辑器,但也可以修改显示或其他参数。 3、.NET反汇编程序 如果您需要一个高效的工具,可以通过为您提供各种有用的工具来帮助您反编译.NET程序集,您可以转到dnSpy。它配有一个反编译器,一个调试器,一个十六进制编辑器和一个程序集编辑器,让你以有效的方式处理程序集。 主窗口附带了一个Assembly Explorer窗格,您可以在其中访问所需程序集的树视图。您可以通过从计算机指定适当的文件或使用“从GAC打开”选项打开程序集,该选项为您提供全局程序集缓存中可用的条目列表。 4、.NET程序集的可靠反向工程工具 所有考虑的事情,dnSpy是一个方便的应用程序,使您能够以有效的方式逆向工程.NET程序集,为您提供广泛的有用工具,包括反编译器,程序集编辑器和调试器。它不需要安装,具有全面,平滑的用户界面,并为您提供了一个标准配置窗口,您可以在其中调整各种组件的设置。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Boogaloo-Jer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值