C# 从可执行文件获取程序集

C# 从可执行文件获取程序集,c#,.net-assembly,C#,.net Assembly,我正在寻找一个可以从指定的.exe读取汇编代码的程序。我试图做的是读取可执行文件的汇编代码,以便找到可以用等效指令替换的指令,以便获得不同的字节码 这通常被称为源加扰器/签名加扰器,它修改汇编代码以获得不同的字节码,从而产生不同的签名 我阅读了有关C#中的汇编类的内容,但没有找到任何可以返回类似IEnumerable这样的内容的内容,该IEnumerable包含.exe中的汇编代码 有人能教我这方面的知识吗?这可能吗?不同的方法?.NET实际上并不处理字节码。所有.NET程序都被转换成一种称为M

我正在寻找一个可以从指定的.exe读取汇编代码的程序。我试图做的是读取可执行文件的汇编代码,以便找到可以用等效指令替换的指令,以便获得不同的字节码

这通常被称为源加扰器/签名加扰器,它修改汇编代码以获得不同的字节码,从而产生不同的签名

我阅读了有关C#中的汇编类的内容,但没有找到任何可以返回类似IEnumerable这样的内容的内容,该IEnumerable包含.exe中的汇编代码


有人能教我这方面的知识吗?这可能吗?不同的方法?

.NET实际上并不处理字节码。所有.NET程序都被转换成一种称为MSIL的东西,由.NET运行时执行,然后才转换成字节码。整个过程与Java字节码的工作原理非常相似

因此,您可以完全访问任何内容的名称。您甚至可以像.DLL文件一样使用.NEt可执行文件。但除了继承或替换文件之外,替换内容并不容易


您可能需要的按位操作需要使用裸指针。而.NET开发人员则不遗余力地使用裸指针。你仍然可以使用unsFACK代码,但是这听起来像是你的程序的主要用途,你最好从类似于C++的东西开始。实际上,taht使用裸指针作为默认值,而不是备用指针。

哦,好了,明白了。您是否有任何链接或库可以包含在C++项目中从EXE读取?如果不是,你从可执行文件中读取数据的方法是什么?@Weirdrandom:我没有例子。然而,强调这一点很重要。C++具有.NET所具有的.NET限制。我谈到了C++的C++——C++从STL进化而来,它用裸机指针来表示数组。我可能已经找到了解决办法。我可以做的一件事是生成一个asm.c文件,该文件保存.cpp文件中的汇编代码。然后我可以从中阅读,也许可以将它重新编译回.cpp?@Weirdrandom。现在看来,你是在要求反编译、自动修改和重新编译。这是非常先进的。尤其是mdidle部分要么是“简单地复制一个预先修改过的文件”,要么是“您需要一个AGI来完成这个”硬拷贝。问这个问题的合适人选是黑客和黑客,但这方面的答案显然超出了本论坛的范围。啊,oki!是的,这就是我所处的领域。我不相信我会做出任何超级先进的东西,只是一些修改它的东西。我想的是基本上有一个相当简单的指令列表。因此,当我读取一行,并且该行存在于我的列表字典中的某个位置时,我将从该键的值对中取出一条指令并替换它。像这样的。但你是对的,这比我想象的要难。我已经看到,可以通过命令行将C++分解为ASM,这样就可以生成我的汇编文件,只需说“汇编代码”,但它似乎是指.NET。你能澄清一下你想要解码哪种类型的可执行文件吗?它是否包括非.NET可执行文件?我这样问是因为.NET可执行文件不包含“汇编代码”,它们包含中间语言IL。对于本机编译的模块可以这样做。如果您只需要一个更改,那么可能就不难找到(比如)可以在不影响结果的情况下交换的两条指令序列,只要您有调试符号或映射文件。但是,要做到这一点,通常需要做大量的基础工作。我正在尝试解码的可执行文件是一个由我自己的C++项目构建的.exe。所以我相信它是一个.Net可执行文件?顺便说一句,读过这篇文章的人知道类似“等效指令集生成器”的东西吗?。因此,如果我要输入“mov eax,0”,那么我需要一个与该指令等价的所有指令集的列表,例如,与“mov eax,0”等价的“xor eax,eax”:)几乎没有任何指令对具有完全相同的语义-为什么会有?-这只会浪费指令编码中的空间,而这些空间可以用于其他有用的指令鉴于
xor eax,eax
mov eax,0
都将
eax
寄存器设置为零,一个更改标志,而另一个不更改。如果下面的代码不依赖于现有的船旗国,那么使用哪个船旗国并不重要,但需要深入分析以确定是否是这样。