自实现linker加固so防dump

对于自定义linker加固so而言,为了防止整体dump并对修复重定位表的脱壳方式(upx的脱壳),可以将一些重要的结构信息在内存中进行抹去和移动。

抹去

ELF文件头在so文件加载后就不需要使用了,所以可以在加载完so文件后直接将其抹去。

.rel.plt/.rela.plt.rel.dyn/.rela.dyn重定位表在对so文件进行链接和重定位后也不需要使用了可以抹去。

移动

对于一些在加载和链接重定位so文件之后还需要使用的结构可以将他们移动到其他位置。例如程序头表program header table,动态链接节区.dynamic,符号表 .dynsym,字符串表 .dynstr

移动时需要修复对应的虚拟地址偏移信息,符号表 .dynsym,字符串表 .dynstr的虚拟地址偏移信息保存动态链接节区.dynamic中,而动态链接节区.dynamic的虚拟地址偏移信息保存在程序头表program header table。同时还需要修复这些结构在soinfo结构体中对应的虚拟地址,这样在通过linker程序与so进行交互的时候才可以索引到正确的结构。

通过抹去elf文件头和重定位表.rel.plt/.rela.plt .rel.dyn/.rela.dyn。移动程序头表program header table,动态链接节区.dynamic,符号表 .dynsym,字符串表 .dynstr可以防止整体dump并修复so的脱壳行为,但是依然可以通过分段dump并组合成一个完整的elf文件进行脱壳(或者在壳代码对加固so进行重定位修复之前进行dump,这样就不需要对dump so的重定位表进行修正了),所以可以增加一些反调试的手段增加分析难度。

以上均为个人观点,仅供参考。

posted @ 2023-02-12 13:49  怎么可以吃突突  阅读(804)  评论(0编辑  收藏  举报