如何仅打桩指定进程的系统API函数
我们知道,所有kernel32.dll 和user32.dll 中的函数在所有的进程中的地址均一致。
因此如果在进程A中对以上的系统函数进行了打桩,显然其他的进程也会受到牵连,如何才能做到仅仅在指定的进程中对系统API函数进行打桩替换呢?
修改的只是你自己虚拟内存中的。不会涉及其它进程。
而且自从有了ASLR(地址空间随机化)后,这些一成不变的DLL的地址,已经改变了。
2个进程中的 GetTickCount函数,只有被打桩的进程才发生变化,而非两个进程中的 GetTickCount函数 被同时打桩。这样我就有一个疑惑,难道每个进程加载的系统动态库在各个进程中有独立的一份?如果这样的话,动态库最初的设计目的,减少内存使用又是如何实现的?
DLL链接库中的代码段应该只保留一个。但数据段,应该是根据需要,每个进程中有一份的。
但是函数打桩,修改的就是代码段的内容。毕业论文
具体做法:将函数开头几个字节的内容修改为一个跳转 语句
有修改的话,就会拷贝一份。
因为你没有修改物理文件。
ASLR(Address Space Layout Randomization),地址空间格局的随机化,就是用来防范Ret2libc攻击手段的另一个重要的安全特性。该方法只是说 系统DLL在系统每次启动的时候被随机设定的,其加载地址不再固定而已。但是动态库本身在内存中应该是仍旧共享一份的。