首页 > 解决方案 > 是否可以获取 C# 程序集二进制文件

问题描述

我的教授想让我告诉他我是否可以获得汇编二进制文件的代码。对我来说这是不可能的。该文件可以通过以下方式调用:https : //docs.microsoft.com/en-us/dotnet/api/system.reflection.methodbase.invoke ?view=net-5.0#System_Reflection_MethodBase_Invoke_System_Object_System_Object__

((Assembly)obj).EntryPoint.Invoke((object)null, (object[])null);
//object was defined before

谢谢!

[编辑]

感谢大家的回答,我已经尝试过 dotpeek,ildasm .. -> 不工作

该文件不是 dll。

file_read = Path.Combine(Application.StartupPath, "testfile");
bytes = File.ReadAllBytes(string.Concat(file_read));
bytes2 = Memrestore((byte[])bytes);
objAssembly = Assembly.Load((byte[])bytes2);
((Assembly)objAssembly).EntryPoint.Invoke(null, null);

我的教授帮了我一点忙,bytes2 包含了测试文件中的所有字节。

在 Visual Studio 上,如果我观看此变量并右键单击->转到反汇编,我会得到:

0000000012E5F082  mov         edx,9B4000Eh  
0000000012E5F087  int         21h  
0000000012E5F089  mov         eax,21CD4C01h  
0000000012E5F08E  push        rsp  
0000000012E5F08F  push        70207369h  
0000000012E5F094  jb          0000000012E5F105  
0000000012E5F096  jb          0000000012E5F0FA  
0000000012E5F099  ins         dword ptr [rdi],dx  
0000000012E5F09A  and         byte ptr [rbx+61h],ah  
0000000012E5F09D  outs        dx,byte ptr [rsi]  
0000000012E5F09E  outs        dx,byte ptr [rsi]  
0000000012E5F09F  outs        dx,dword ptr [rsi]  
0000000012E5F0A0  je          0000000012E5F0C2  
0000000012E5F0A2  ?? ?????? 
0000000012E5F0A3  and         byte ptr gs:[rdx+75h],dh  
0000000012E5F0A7  outs        dx,byte ptr [rsi]  
0000000012E5F0A8  and         byte ptr [rcx+6Eh],ch  
0000000012E5F0AB  and         byte ptr [rdi+rcx*2+53h],al  
0000000012E5F0AF  and         byte ptr [rbp+6Fh],ch  
0000000012E5F0B2  ?? ?????? 
0000000012E5F0B3  ?? ?????? 
0000000012E5F0B4  or          eax,240A0Dh  
0000000012E5F0BA  add         byte ptr [rax],al  
0000000012E5F0BC  add         byte ptr [rax],al  
0000000012E5F0BE  add         byte ptr [rax],al  
0000000012E5F0C0  push        rax  
0000000012E5F0C1  add         byte ptr [r8],r8b  
0000000012E5F0C4  add         qword ptr [rbx],r8  
0000000012E5F0C7  add         byte ptr [rsi],dl  
0000000012E5F0C9  cmp         dl,dh

(这是文件的摘录)

我的问题是:可以将此汇编代码还原为 c# 吗?

标签: c#assemblyreverse-engineeringdisassemblydecompiling

解决方案


程序集不包含您的源代码- 所以不,您不能完全理解它;.NET 程序集包含已编译的 IL - 通常可以对 IL 进行逆向工程以获取与原始代码非常相似的代码。它的准确性取决于很多因素 - 例如,async代码被大量重写,“迭代器块”也是如此,并且存在混淆器工具故意使 IL 更难破译。


推荐阅读