文章图片
《论道篇》
一天,戈戈来到江边静坐凝思,一手放着风筝,一手钓着鱼。微风徐徐,水面粼粼,柳枝招摇。
戈戈:《论语》读了许多天可有心得?
狄狄:错误要么是“过了”,要么是“不及”,重要的就是把握住度。
戈戈:程朱理学常说格物致知。那些红绿线平时可格出了些什么?
狄狄:随机漫步的傻瓜,价值,习惯没时间看。
戈戈:你未看此花时,此花与汝心同归于寂。你来看此花时,则此花颜色一时明白起来。便知此花不在你的心外。
狄狄:修道了嚒,神神叨叨的…
戈戈:稻盛心学教人一心一意磨炼心灵,到达真我,瞬间明白一切真理。可对?
狄狄:适度鸡汤也可以的,不要刻意。
狄狄:最近累死了。
戈戈:丁元英告诉年轻人不要轻易说这个词,说完就真的马上要倒下。想干成点事,别把别人看得太轻,别把自己看得太重。
戈戈:我想找个井沿扒着看看,哪有?
狄狄:农村!
狄狄:这盘菜不是人人都能吃得,扒上了饱了眼福,再掉下去可就跌入了地狱。
狄狄:大佬您再写一篇经文大概需要几个时辰?
戈戈:佛曰: 不可说,不可说,一说就得背锅。
戈戈:放假前交代的功课做了没?
狄狄:说不清,道不明,杂事一堆。
戈戈:人不立志,天下无有可成之事。
狄狄:师父今天很闲啊。
戈戈:最近大家都在说躺平。
狄狄:其实我也想。
戈戈:有人说,最后孙悟空头上的有形紧箍内化为他心里的无形紧箍了。
狄狄:师父,我先回去了。
幕落。
文章目录
- 1、dotPeek
- 2、ILSpy
- 3、dnSpy
- 4、.NET Reflector
- 5、ildasm
- 6、获取.Net程序依赖项(C#代码实现)
- 后记
1、dotPeek 官网地址:https://www.jetbrains.com/decompiler/
dotPeek 是 JetBrains 开发的一款.Net反编译工具,是.Net工具套件中的一个。
- 将 .NET 程序集反编译为 C#
这款反编译器支持包括库 (.dll)、可执行文件 (.exe) 和 Windows 元数据文件 (.winmd) 在内的多种格式。
- 将反编译代码导出至 Visual Studio 项目
- 下载源代码并调试第三方代码
dotPeek 还可以作为符号服务器运行,为 Visual Studio 调试器提供调试程序集代码所需的信息。
文章图片
文章图片
以下是使用dotPeek反编译作者写的C#程序的.exe(ProjectManager.exe):
文章图片
下面来一张动图来简单说明一下反编译的整个流程:
2、ILSpy 官网地址:https://github.com/icsharpcode/ILSpy
ILSpy is the open-source .NET assembly browser and decompiler.
.NET Decompiler with support for PDB generation, ReadyToRun, Metadata (&more) - cross-platform!
文章图片
以下是使用ILSpy反编译作者写的C#程序的.exe(ProjectManager.exe):
文章图片
3、dnSpy 官网地址:https://github.com/dnSpy/dnSpy
dnSpy is a debugger and .NET assembly editor. You can use it to edit and debug assemblies even if you don’t have any source code available.
dnSpy是一款开源的基于ILSpy发展而来的.net程序集的编辑,反编译,调试神器。
主要功能:1、程序集编辑; 2、反编译器; 3、调试工具; 4、Tabs及tabs分组; 5、提供多主题。
文章图片
以下是使用dnSpy反编译作者写的C#程序的.exe(ProjectManager.exe):
文章图片
4、.NET Reflector 官网地址:https://www.red-gate.com/products/dotnet-development/reflector/
Decompile, understand, and fix any .NET code, even if you don’t have the source.
文章图片
- Look inside any .NET code
Debug your application
Follow bugs through your application to see where the problem is – your own code, third-party libraries, or components used by your application.
- Understand how applications work
Inherited an application with no documentation and no comments? Use .NET Reflector to understand how the code runs and avoid bugs.
- Look inside APIs, SharePoint, and other third-party platforms
Third-party platforms aren’t always well-documented. Use .NET Reflector to look inside their assemblies, and see how they work and which APIs you can call.
文章图片
5、ildasm 官网地址:https://docs.microsoft.com/zh-cn/dotnet/framework/tools/ildasm-exe-il-disassembler
IL 反汇编程序是 IL 汇编程序 (Ilasm.exe) 的配套工具。 Ildasm.exe 可利用包含中间语言 (IL) 代码的可移植可执行 (PE) 文件,并创建适合输入到 Ilasm.exe 的文本文件 。
此工具会自动随 Visual Studio 一起安装。 若要运行该工具,请使用 Visual Studio 开发人员命令提示或 Visual Studio 开发人员 PowerShell。
以下是使用ildasm反编译作者写的C#程序的.exe(ProjectManager.exe):
文章图片
查看C#的dll或exe所依赖.Net版本。
Microsoft SDK自带的ildasm.exe工具, 是一个反编译工具, 可以查看编译好后的dll的文件。
双击ildasm.exe, 把你要识别的.dll文件拖进来, 就会反编译了. 接着在ildasm里, 双击第一行的MANIFEST, 前面五行会类似如下显示, 注意一定要是mscorlib。
当你看到.ver 1:0:5000:0, 说明它是在.net1.1的版本下编译的;
如果看到的是.ver 2:0:0:0, 说明它是.net2.0版本下编译的。
这里看到的是.ver 4:0:0:0,说明它是.net4.0版本下编译的。
【C#.NET|【JetBrains系列】C#逆向反编译工具(dotPeek)】
文章图片
6、获取.Net程序依赖项(C#代码实现) 这里提供一段测试代码片段如下:
/*************************************************************************************
*
* 文 件 名:Test_GetReferencedAssemblies.cs
* 描述:获取当前程序引用的所有程序集
* 版本:V1.0
* 创 建 者:爱看书的小沐
* 创建时间:2022-02-28
*************************************************************************************/
using System;
using System.Reflection;
namespace ConsoleApp1
{
class Program
{
///
///加载指定路径上的程序集文件的内容。
///
/// 要加载的文件的完全限定路径。
static public Assembly LoadAssemblyFromFile(String filename)
{
try
{
return Assembly.LoadFile(@filename);
}
catch (Exception e)
{
Console.WriteLine("An exception occurred: {0}", e.Message);
}return null;
}
///
///打印指定程序集的所有依赖项的信息。
///
/// 要打印的指定程序集。
static public void PrintReferencedAssemblies(Assembly assemblyUser)
{
if (assemblyUser == null)
{
return;
}try
{
AssemblyName[] assemblies = assemblyUser.GetReferencedAssemblies();
if (assemblies.GetLength(0) > 0)
{
foreach (var assembly in assemblies)
{
Console.WriteLine(assembly);
}
}
}
catch (Exception e)
{
Console.WriteLine("An exception occurred: {0}", e.Message);
}
}static void Main(string[] args)
{
Console.WriteLine("\nAssembly.GetEntryAssembly:");
PrintReferencedAssemblies(Assembly.GetEntryAssembly());
Console.WriteLine("\nAssembly.GetExecutingAssembly:");
PrintReferencedAssemblies(Assembly.GetExecutingAssembly());
Console.WriteLine("\nAssembly.GetCallingAssembly:");
PrintReferencedAssemblies(Assembly.GetCallingAssembly());
Console.WriteLine("\nLoad .Net Dll:");
PrintReferencedAssemblies(LoadAssemblyFromFile(@"d:\\DH.dll"));
Console.WriteLine("\nLoad .Net Exe:");
PrintReferencedAssemblies(LoadAssemblyFromFile(@"d:\\ProjectManager.exe"));
Console.WriteLine("\nLoad Not .Net Dll:");
PrintReferencedAssemblies(LoadAssemblyFromFile(@"d:\\glew.dll"));
}
}
}
文章图片
后记
如果你觉得该方法或代码有一点点用处,可以给作者点个赞、赏杯咖啡;╮( ̄▽ ̄)╭
如果你感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进。o_O???
谢谢各位童鞋们啦( ′ ▽′ )? ( ′ ▽′)っ!!!
推荐阅读
- 极客日报|iOS 15.4发布,支持戴口罩解锁;JetBrains(无限期暂停在俄罗斯的销售和研发活动;Swift 5.6 发布|极客头条)
- C语言|追GIRLFRIEND(不认识的查字典),让我学会了分支,循环语句。
- 深入浅出|五分钟带你速通Spring IOC
- 数据分析必经之路|用pycham,你还在单个安装项目依赖库()
- python学习小技巧|简单的python项目fastapi在云服务器的部署
- JVM|JVM垃圾回收的分代收集思想
- JVM|内存溢出和内存泄露
- C++语言程序设计基础|第3章 函数
- 31日打卡|蓝桥真题31日冲刺 | 每日三题题解报告 第二天