[讨论]通过修改Mach-O中Load Commands进行全局进程劫持
[讨论]通过修改Mach-O中Load Commands进行全局进程劫持
Mach-O格式, 是Mach object文件格式的缩写,是一种可执行文件、目标代码、共享程序库、动态加载代码和核心DUMP(摘自度娘),类似于Win环境的PE、Linux环境的ELF。
Load Commands数据位于Mach Header数据之后,顾名思义为加载器命令。
Structure overview
|--------------------------------
| Mach Header
|--------------------------------
| Load Command 1
| Load Command 2
| Load Command n
|--------------------------------
| Data
|--------------------------------
Load Command定义有诸多,比如LC_SEGMENT、LC_SYMTAB、LC_SYMSEG等等,更多的LC定义可在<mach-o/loader.h>头文件中找到。利用otool -l命令可以查看一个mach-o文件的Load Commands。
利用Load Commands进行进程劫持的大致思路如下:
1.找一个任意进程启动都会加载的dylib;
2.为dylib写入自定义shellcode;
3.修改/添加此dylib的LC_ROUTINES命令,指向shellcode;
4.替换原dylib。
每步骤原理:
1.找到一个任意进程都会加载的dylib,比如/usr/lib/dyld,这样就达到了全局范围的效果。
2.写入shellcode,比如执行一段dlopen的代码,打开指定动态库,或是什么。
3.当链接器加入-init选项时,LC_ROUTINES就会被加入到Load Commands中,描述该dylib的入口。如此我们将原入口替换为shellcode的地址,在shellcode执行完再跳回原入口来运行自定义代码。
4.替换后开启任意进程看效果
。
以上是本人的假设,还没经过实践。欢迎大家讨论~
注意:任意进程都会加载的dylib一般都是进程严重依赖的系统库,无十足把握,切莫随意操作,否则后果自负。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课