Linux 与 Windows 中的 ASLR

逆向工程 拆卸 视窗 linux
2021-06-13 18:38:11

我对二进制开发很陌生。我在这里做了很多初学者练习。我对 ASLR 感到困惑。我在 Linux 中尝试了一些二进制开发的东西。建议我在分析二进制文件之前停止 Linux 中的 ASLR。这是命令 -->echo 0 > /proc/sys/kernel/randomize_va_space 我在这儿吗?我要关闭我的 ASLR(随机堆栈地址)吗?

但是当我进行 Windows 10 二进制开发(vulnserver)时。我不得不将我的有效载荷放入堆栈地址。我注意到堆栈地址 ( jmp esp) 是不变的,不会改变。ASLR 在不同操作系统中的工作方式不同吗?我不知道我是否在问写作问题。如果你知道,请告诉我。

2个回答

通过使用Didier Stevens 的这个工具,您可以检查/设置/取消设置文件的 DEP/ASLR 特征。像这样检查文件:

setdllcharacteristics.exe yourfile.exe

如果输出说,DYNAMIC_BASE = 0那么您可以使用+d选项来启用DYNAMICBASE您的文件:

setdllcharacteristics.exe +d yourfile.exe

您可以-d再次使用取消设置。

  1. 是的,该命令echo 0 > /proc/sys/kernel/randomize_va_space会禁用 ASLR。这里

显示的值将是以下值之一:

0 = 禁用

1 = 保守随机化

2 = 完全随机化

  1. Windows 和 Linux 之间 ASLR 的实现有一些差异,您可以在线搜索它们,但是对于您的问题:在 Windows 中,可以使用或不使用 ASLR 来编译 EXE 或 DLL(DEP - 数据执行保护也是如此) )。出于利用目的,我们搜索没有保护的代码(例如,您可以通过 WinDBG 使用mona 模块narly找到它),以尝试跳转到它并运行我们选择的代码。因此,您可能看到的是跳转到没有 ASLR 的代码,并且地址是固定的(没有 ASLR!)。如果您可以控制堆栈,该jmp esp命令将跳转到堆栈,您可以在那里放置任何您想要的代码。