我继承了一个使用遗留文件格式存储数据的项目,我可以访问进入该文件格式的数据,以及生成的文件,但我无法访问该模板,而且我需要重新创建它。
什么是对二进制文件进行逆向工程的最佳方法?如何确定使用的语言/加密,或者我甚至需要?一旦我做了,最好的程序(免费,首选)是什么来获取信息?这是在Windows系统上,但是我运行的是一个OpenSUSE linux框,我并不反对用它来帮助解决这个问题。
答案 0 :(得分:5)
大约一年前的评论是我所做的核心,也就是对行为格式进行逆向工程。将旧程序视为黑盒子。我假设你仍然能以某种方式运行遗留系统。首先,将整个遗留程序转换为可以某种方式调用的子程序。这可能意味着编写脚本,在VM中运行,模拟和/或模拟设备等;什么工作。如果您不知道如何执行此操作,请针对您的具体情况单独提问。不过,目标是自动化使用旧版软件,以便您可以针对它运行探测和测试套件。
您可以使用加密。首先处理这个问题。 Strongs密码具有所谓的雪崩属性:改变输入的单个位会改变输出的50%位,这相当于伪随机位翻转。您希望使用avalanche属性来(1)测试是否存在加密,以及(2)找出加密结构。例如,如果数据库一次加密一行,则在任何地方更改存储行的一位将改变加密行的平均一半比特。显然,如果改变一位改变整个文件,那么你会遇到一种不同的问题,而不是只有几位改变(例如校验和,等。)。如果您有任何形式的加密,您可能需要在调试器下运行遗留并以这种方式计算算法;这可能不值得。
正如您所看到的,所有这些意味着对遗产的大量调用以探测其行为。你不想手工做这件事;见第一段。为了解决另一个问题,你不太可能找到现成的代码来提取数据;这是一个自定义代码工作。现在您的自动化正在运行,您需要设置单元测试,调用遗留代码以查看应该预期的内容。
这不是一个快速的过程,也不容易。始终将预期的成功成本与以其他方式获取数据的成本进行比较,包括支付手动数据输入费用。