让我们假设我有一个程序可以执行一些众所周知的加密例程,例如 AES、RSA 或其他什么。我想检测此类算法何时运行,在哪些关键材料上运行,以及可能在哪些输入和输出数据流上运行。
这个想法是在虚拟机中运行整个程序,然后检测虚拟机本身来研究程序的行为。例如,我可能会实施试探法来检查是否计算了 AES S-box(当您看到某些字节和一些时钟周期之后,S-box 中的相应字节出现在某个寄存器中,那么您可能会知道 S-box正在运行)。追踪这些字节之前是如何在内存中移动的,可能会让我知道加密密钥的存储位置。
在虚拟机中执行所有这些操作的目的是我可以组成环境,以便程序无法检测到我试图监视他。通过这种方式,我想避免与保护者之类的所有混乱,看看它的表现如何。
是否已经以类似的方式尝试过逆向工程程序?“类似方式”是指在虚拟机中运行程序并查看它如何在内存和寄存器上移动数据,以便找到可以帮助我追踪我正在寻找的信息的模式。
如果有帮助,我想使用的架构是 x86,而实际的程序是我上面描述的程序:拦截已知密码程序。