我使用带集成汇编程序的IDE为公司的微控制器编写代码,该公司也生产我刚才提到的IDE和汇编程序。 因为带有硬件在线编程器的开发套件非常昂贵,所以我想反向设计他们将编写的源代码组装成文件格式的方式,然后通过编程设备将其传送到控制器。
所以基本上我所做的就是编写一个非常基本的汇编程序(像这样):
mov a, 0x01
并且变化很小(像这样):
mov a, 0x02
然后我看了二进制格式的生成文件。我的期望与实际发生的情况甚至没有关系:
不仅改变了一个字节(我希望改变),而且改变了总共2300个字节的2000个字节!
可以执行此操作的方法可以是加密或压缩,也可以两者合并。
即使我不知道他们使用的是什么算法,是否可以解密或解压缩文件?
答案 0 :(得分:2)
不要假设对你的问题最复杂的答案;相反,总是寻找你所看到的最简单的解释。当供应商的低市场份额和缺乏文档在保密方面做得差不多时,为什么要一直加密加密?添加加密(以及硬件中的解密!)将耗费供应商(大量)资金。
可能只是您使用的两条指令非常不同,而且您的工具计算差异也不正确。
mov a, 0x1
可以编码为inc a
,这可能是,让我们想象,一个字节长,mov a, 0x2
可以表示为双字节机器指令。之后,所有后续字节将偏移到被比较文件中的一个位置,并且,如果您的比较工具无法满足这些要求,它们将报告巨大差异。
一般来说,可以扭转局面。这将是非常耗时的,一项与指令集大小成比例的事务以及您正在研究的二进制格式的功能数量。
基本上,您需要重建二进制格式的布局和机器编码方案。提供最低限度的不同输入和查看输出是正确的第一件事;但是在一次实验之后你就无法得出结论。收集的数据还不够。
如果你真的决定加入这个,我建议你从研究人们用来解决类似病例的论文,工具和方法开始。 Hackme教程,关于倒车的论文等。准备好你需要至少几个月才能获得第一批成绩。这很有趣,但并不总是高薪。