我对我正在阅读的论文有疑问,这是对使用自散列机制攻击某些防篡改软件的演示。这种自我散列是有效的,因为作者假设执行的代码与散列代码相同,除了针对处理器操作内存的方式的某些操作之外,这是正确的。
在论文中,有以下句子让我感到困扰:" Aucsmith的IVK和采用网络的校验和系统中的散列的关键(隐含)假设是处理器操作使得D(x)= I (x),其中D(x)是“数据读取”的位串结果 从内存地址x开始,I(x)是从x开始的相应长度的“指令获取”的位串结果。"
你如何说明D(x)和I(x)之间的区别?数据读取和取指令有什么区别?
感谢您的帮助
答案 0 :(得分:1)
这些操作的不同之处在于它们发生时以及数据在使用前的存储位置。大多数处理器都有dedicated caches for instructions。这可能意味着数据从主存储器中取出两次:一次进入数据高速缓存以计算散列并再次进入指令高速缓存。
我现在找不到它,但一年前我读到了通过在这两个缓存之间导致缓存不兼容而在英特尔处理器上隐藏恶意代码的方法。处理器将执行恶意代码,但是读取与纯数据相同的内存的任何其他工具都会看到良好的代码。 Here is a means of accomplishing this on an ARM chip