1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > .net core Winform程序反编译 dnSpy和ilSpy双剑合璧

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

时间:2018-10-07 02:11:03

相关推荐

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

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

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

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

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

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

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

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

引用自:利用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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。