gpt4 book ai didi

c++ - 我需要帮助开发多态引擎 - 指令依赖树

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:56:04 26 4
gpt4 key购买 nike

我目前正在尝试用 C++ 编写一个多态引擎来玩弄我的一个巧妙的反黑客保持事件检查想法。然而,编写多态引擎被证明是相当困难的——我什至还没有确定我应该如何去做。这个想法是将可执行代码流式传输给用户(即我正在保护的应用程序),偶尔向他们发送一些代码,这些代码在内存镜像上运行一些校验和并将其返回给服务器。问题是我不希望有人简单地劫持或以编程方式破解存活检查;相反,每个都将在服务器上生成,使用简单的代码 stub 并通过多态引擎运行它。每个保持事件检查都会返回一个值,该值取决于数据的校验和,并且随机算法潜入保持事件检查中。如果 stub 返回错误,我就知道存活检查已被篡改。

我必须处理的事情:

*可执行镜像 PDB 文件。*汇编器和反汇编器引擎,我在它们之间实现了一个接口(interface),允许重新定位代码等...

以下是我正在考虑执行的步骤以及我可能如何执行这些步骤。我在 Windows PE 可执行文件上使用 x86 指令集

我计划采取的步骤(我的问题是第 2 步):

  1. 展开说明

    • 找到像 mov 这样的简单指令,或者推送并用一些指令替换它们,这些指令虽然有更多指令,但可以达到相同的目的。在此步骤中,我还将添加大量垃圾代码。
    • 我打算通过使用数据库中的一系列翻译表来完成这项工作。这应该不是很难做到。
  2. 洗牌

    • 这是我遇到最多麻烦的部分。我需要将代码隔离到函数中。然后我需要建立一系列的指令依赖树,然后我需要根据一个依赖另一个来重新定位它们。我可以通过解析 pdb 文件找到函数,但创建指令依赖树是我完全迷失的棘手部分。
  3. 压缩指令

    • 压缩指令并在此过程中执行一系列不常见和晦涩的指令。而且,就像第一步一样,通过使用代码签名数据库来执行此操作。

再次澄清一下,我需要帮助来执行第 2 步,但我什至不确定我应该如何开始。我尝试制作一些图表,但它们变得非常难以理解。

OH:显然, protected 代码不会是最佳选择 - 但这只是我想在学校玩的一个安全项目。

最佳答案

我认为您所追求的“指令依赖树”是 data flow analysis .这是经典的编译器技术,它为每个代码元素(编程语言中的原始操作)确定从其他代码元素向它传递的信息。完成后,您最终会得到一个图形,其中节点是代码元素(在您的情况下是单独的指令),它们之间的有向弧显示必须流动的信息,以便后面的元素可以执行由“图中较早的"元素。

可以看到some examples of such flow analysis在我的网站上(专注于执行程序分析的工具;此工具可能不适合二进制分析,但示例应该有所帮助)。

编译器书籍中有大量关于进行数据流分析的文献。请参阅任何编译器教科书。

您需要处理许多问题:

  • 解析代码以提取代码元素。您听起来好像已经可以访问所有说明。

  • 确定每个代码元素所需的操作数和产生的值。这对于“ADD 寄存器,寄存器”来说非常简单,但您可能会发现这对于生产 x86 CPU 来说令人望而生畏,因为它具有惊人的大而疯狂的指令集。您必须为 CPU 可能执行的每条指令收集此信息,这几乎意味着所有指令。尽管如此,这只是汗水和大量时间花在查看说明引用手册上。

  • 循环。值可以从一条指令流出,通过其他指令,返回到同一指令,因此数据流可以形成循环(复杂循环有很多循环)。数据流文献将告诉您如何根据计算图中的数据流弧来处理这个问题。我不知道这些对您的保护方案意味着什么。

  • 保守分析:您无法获得理想的数据流,因为实际上您是在分析任意算法(例如,图灵机);指针非常严重地加剧了这个问题,机器代码中充满了指针。因此,当无法确定“x feeds y”时,数据流分析引擎经常做的是简单地假设“x(可能)feed y”。数据流图在概念上从“x(必须)喂y”转变为实用的“x(可能)喂y”类型弧;因此,文献实际上充满了“必须”和“可能”的算法。同样,文献告诉您进行 [保守] 流分析的许多方法(大多数具有不同程度的保守性;事实上,最保守的数据流分析只是说“每个 x 提供每个 y”!)。我不知道这对您的方案在实践中意味着什么。

有很多人对二进制代码分析感兴趣(例如 NSA),他们对机器指令进行数据流分析并完成指针分析。您可能会发现此演示文稿很有趣:http://research.cs.wisc.edu/wisa/presentations/2002/0114/gogul/gogul.1.14.02.pdf

关于c++ - 我需要帮助开发多态引擎 - 指令依赖树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10670985/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com