我正在阅读 InfoSec 研究所的这篇文章:
http://resources.infosecinstitute.com/an-introduction-to-returned-oriented-programming-linux/#gref
并且能够跟随,直到他完成了 ROP 链。
他发现 printf 和 execve 的偏移量是 328160
然后,他找到以下 ROP 小工具:
0x804886eL: add eax [ebx-0xb8a0008] ; add esp 0x4 ; pop ebx
0x804861fL: call eax ; leave ;;
0x804849cL: pop eax ; pop ebx ; leave ;;
我知道这个想法是将execve的绝对地址加载到eax中然后调用eax,但我迷路的是他这样做的方式。
小工具:
0x804886eL: add eax [ebx-0xb8a0008] ; add esp 0x4 ; pop ebx
添加 eax 和 [ebx - 0xb8a0008],然后将其存储在 eax 中以供下一个小工具调用。
现在的目标似乎是让 ebx 包含 printf@got 的绝对地址,但他将 0x138e9ff4 加载到 ebx 中,他说这是因为:
printf@got + 0xb8a0008 = 0x138e9ff4
我只是不知道他如何计算值 0x138e9ff4,因为启用了 ASLR 并且 printf@got 每次都应该不同,因此加载到 ebx 的值也应该如此。
将不胜感激你有任何意见