gpt4 book ai didi

c - 随机化寄存器

转载 作者:太空宇宙 更新时间:2023-11-04 01:24:22 25 4
gpt4 key购买 nike

如果不满足某些条件,我想通过跳转到一个随机位置来使我的程序崩溃。我还想通过类似的语句随机化寄存器

asm("rdtsc \n");
asm ("movq %rax, %r15 \n");
...
asm ("xor %rbp, %r13 \n");
...

有没有更好/更隐蔽的方法来做到这一点?我很担心,因为 rdtsc 不是程序中的频繁语句。不断调用它也会产生类似的结果。除此之外,我还能以某种方式清除/随机化堆栈内容吗?

最佳答案

如果您只是想崩溃,您随机选择的目的地可能会跳到合法的地方。只需运行 ud2 指令 (0F 0B),这肯定会在未来的每个 x86 CPU 上导致无效指令异常(导致 SIGILL)。即它是保留的,因此 future 的指令集扩展不会在指令的开头使用该两字节序列。

如果您关心高质量的随机性以阻止任何潜在的回溯或核心转储,则调用随机数生成器来填充随机数据缓冲区(或仅重复一个 32 位随机值)。用该垃圾数据填充所有寄存器。在 32 位代码中,您可以使用 popa 指令用该垃圾数据填充所有寄存器。在 64 位模式下,您必须手动加载它们。

然后用该数据在堆栈上涂鸦,这样当您尝试写入未映射的地址时(因为您已经超出了堆栈区域),您的程序最终会因段错误而停止。

你可以用 rep stosd 或其他东西来做那个涂鸦。

就“更隐蔽”而言,您需要更详细地说明您的威胁模型是什么,以及您试图阻止任何人学习/做的事情。即防止有人修改您的二进制文件以免以这种方式崩溃?

关于c - 随机化寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33938494/

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