如果这个二进制文件是分布式的,那么每个c程序都会被转换成机器码。既然计算机的指令集是众所周知的,那么有可能恢复C语言的原始程序吗?
发布于 2010-02-16 11:48:13
您永远不能返回到完全相同的源,因为没有与编译后的代码一起保存的有关该源的元数据。
但是您可以从汇编代码中重新创建代码。
如果你对这些东西感兴趣,可以看看这本书:Reversing: Secrets of Reverse Engineering。
编辑
有些编译器-101在这里,如果你用另一个词来定义一个编译器,而不是像“编译器”那样技术性,它会是什么呢?
答案:Translator
编译器将您编写的语法/短语翻译成另一种语言,而C编译器则翻译成汇编语言,甚至机器码。将C#代码转换为IL,依此类推。
你拥有的可执行文件只是原始文本/语法的翻译,如果你想“反转它”,因此“翻译回来”,你很可能不会得到与开始时相同的结构。
一个更真实的例子是,如果你从英语翻译到德语,再从德语翻译回英语,sentance的结构很可能会有所不同,可能会使用其他单词,但含义和上下文很可能没有变化。
同样的道理也适用于编译器/翻译器如果你从C到ASM,逻辑是一样的,只是读取它的方式不同(当然它是经过优化的)。
发布于 2010-02-16 11:48:26
这取决于你对原始C程序的理解。例如局部变量名称、注释等。都不包含在二进制文件中,因此无法获得与用于生成二进制文件的源代码完全相同的源代码。诸如IDA Pro之类的工具可以帮助您反汇编二进制文件。
发布于 2010-02-16 13:10:58
我估计一个真正熟练的黑客每天大约有1千字节的机器代码的转换率。以西方的普通工资计算,比如说,一个100KB的可执行文件的价格约为25,000美元。在花了这么多钱之后,所得到的只是一大块C代码,它们的功能与您的完全相同,减去了注释和诸如此类的好处。它不可能与你的版本竞争,你将能够更快地提供更新和改进。反向工程这些更新也不是一件微不足道的事情。
如果这个价格标签没有给你留下深刻的印象,你可以通过添加更多的代码来任意提高转换成本。请记住,能够处理像这样的大型程序的熟练黑客有更好的事情要做。他们编写自己的代码。
https://stackoverflow.com/questions/2272581
复制