在前面的文章提到了,glibc为了防止injectso,做了一些补丁,来判断调用的地址必须来自libdl。采用injectso的方法,如果调用glibc的函数是可以,前面已经做过运行mtrace的例子。但是这样的用处不大。
只有能够自己形成so文件,并且调用,这样才能做很多事情。
有两个想法:
1 有的程序编译过程中直接包含了libdl库,那么我们争取使用调用dl_open的方法,来启动so库。那么我们必须找到libdl的源码,来查看它是如何传参数的。
2 如果上面的方法成功,那么对于没有包含libdl的库,我们可以通过修改elf文件的方式,使之具有libdl库,将没有用的sectiion header修改成libdl。然后再运行该程序。之后便可以使用1所提到的方法。待实际检验。