问题标签 [aslr]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
aslr - 如何在 Windows PE 二进制文件中启用 ASLR?
如何启用可执行文件的地址空间布局随机化?
注意:我没有使用 Visual Studio 或任何提供/dynamicbase
编译器选项的编译器。
出于本讨论的目的,假设我正在向编译器添加功能以启用 ASLR。
其他 PE 标志
我已经知道如何设置其他 Windows 可执行映像选项。例如,然后IMAGE_FILE_NET_RUN_FROM_SWAP
标记。您在 PE 二进制标头中设置 PE 选项:
如何启用地址空间布局随机化?是PE标志吗?它是装配清单条目吗?
奖金
如何将可执行文件选择到 NX(不执行)?
fork - 分叉新孩子时的 ASLR
在分叉一个孩子时,我看到 ASLR 是从父母那里继承的。
有没有办法 unamp 例如:来自子进程的 libc,
& 然后再次映射它,以便 ASLR 对 libc 产生影响?
我希望能够对子进程执行 ASLR,
我知道这听起来不可能,因为动态加载器应该以某种方式再次解析符号,
想知道能不能成功
谢谢
windows - MapUserPhysicalPages(AWE 重新映射)是否会影响 ASLR?
MapUserPhysicalPages
API 获取使用 VirtualAlloc 分配的地址,并将MEM_PHYSICAL
页面MEM_RESERVE
重新映射到一系列物理页框号。这旨在为流程提供 AWE 支持。
对我来说,这似乎是重新映射会导致内存放置在固定虚拟地址上的情况,从而可能导致通过定位已知内存区域来绕过 ASLR 的情况。
我在这个假设中正确吗?绕过的可能性是在用户模式 ASLR 级别还是 KASLR 级别?
gcc - -fPIC 和 -s 都使用了 - 可能是矛盾的?
在一个特定的项目中,我看到一次使用了以下编译器选项:
-fPIC
和-s
在这里一起使用是矛盾的吗?如果不是,为什么?
macos - 在 OS X 上禁用 ASLR 的记录方法?
在 OS X 10.9 (Mavericks) 上,如果您通过调用和传递 undocumented 属性来启动进程,则可以禁用单个进程的地址空间布局随机化。像这样:posix_spawn()
0x100
(这是从Apple 的 GDB 来源逆向工程的。)
像这样的未记录功能的问题在于它们往往会在没有通知的情况下消失。根据this Stack Overflow answer the dynamic linker dyld
used to identify the environment variable DYLD_NO_PIE
,但这在 10.9 中不起作用;同样,静态链接器显然曾经采用过一个--no-pie
选项,但现在情况已不再如此。
那么有记录的方法来禁用 ASLR 吗?
(我需要禁用 ASLR 的原因是为了在测试和调试时确保行为取决于对象地址的代码的可重复性,例如基于地址的哈希表和基于 BIBOP 的内存管理器。)
c++ - 如何使用 mingw 在代码块中的 exe 上启用 ASLR、DEP 和 SafeSEH?
我已经尝试在 ASLR 的链接器选项中使用-dynamicbase -pie
and -e_mainCRTStartup
,但是当我在 ollydbg 中加载它时,它总是以 400000 加载
c - 强制使用 -fPIE 编译的可执行文件的基地址
我在这里有一个有点奇怪的问题。
有没有办法让exec
程序指定应该加载的虚拟地址?
例子:
a.out
是一个 PIE,有入口点0x460
。
b.out
fork
& exec
,a.out
但告诉它,“嘿,我想让你在 加载.text
部分0x200000
,所以入口点是0x200460
”。
我查看了 POSIXexec
函数系列,ld.so
和ld-linux.so.2
,但没有看到任何可以这样做的东西。
我的直接解决方案是编写我自己的链接器,但如果有什么东西可以让我这样做,那会让我的生活更轻松。
谢谢!
c - 为什么启用 ASLR 时 glibc 的函数地址不随机化?
为了理解 ASLR,我构建了这个简单的程序:
ALSR 似乎已启用:
我使用 GCC 编译程序:
每次我运行这个程序时,它都会打印相同的地址 ( 0x400450
)。
如果 glibc 在随机地址加载,我希望该程序每次打印不同的地址。这让我感到惊讶,特别是考虑到防止返回 libc 攻击被认为是 ASLR(尤其是system()
调用)的主要动机。
我期望的地址system()
应该是随机的,我错了吗?还是我的配置可能有问题?
c - C 编译器中的地址空间布局随机化
如果我没记错的话,每次运行程序时,ASLR 都会使 C 编译器中的局部变量具有不同的地址。但是当我在 Turbo C++ 和 Dev-CPP IDE 中尝试它时,它只是返回一个类似的局部变量地址。我试过的代码:
以前,我认为局部变量的地址是相同的,因为它分配在同一个堆栈区域,因此是相同的内存地址。但是当我在 stackoverflow 中找到一个关于 ASLR 的线程时,它让我做了这些。我想这是因为编译器。任何人都可以对此有所了解吗?
编辑:
我使用的是 Windows 7。
buffer-overflow - 为什么每次关闭 ASLR 时堆栈指针的值都相同?
尽管系统上运行了许多函数,但堆栈指针(ESP)的值怎么可能每次都相同,对于堆栈上运行的每个函数(因为每个函数都有不同的地址)????尤其是当 ASLR 关闭时????