我刚开始学习代码注入的工作方式和各种防御措施 我理解ASLR是如何以及做什么的,但是我正在努力寻找它的实际行动。
通过劫持执行,我在mspaint.exe,calc.exe和winword.exe中添加了功能(启动时的消息框)。在WinXP上,这些按需执行。在Windows 7上,前两个执行所需,但winword.exe运行到我认为是ASLR:
[1]对另一个可执行部分中的地址进行调用或jmp调整并正确执行。
[2]新部分(call或jmp)中的类似指令也正确调整
[3] DLL API的说明,例如'call LoadLibraryW',或简单的内存访问,例如'mov dword [esp],40402d',不会被调整,因此指向无效的地址空间。
当我将这些指令直接添加到.text部分时,数字[3]似乎也会发生,正好与现有的相同指令一起正确调整。
例如:
使用winword.exe,300010f0的指令是'call [30001004]'(调用GetProcAddress)。
在ollydbg下运行,这表明它已被调整为'call [04106b2f]'
但是,如果我将入口点指令(300010cc)更改为“call [30001004]”,则根本不会对此进行调整。
有人可以解释或指出一些关于控制指令调整的时间和地点的规则的启示吗? (或者,如果我是一个完整的numpty,将会赞赏指向一些有用的进一步阅读)
非常感谢。