自实现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 @   怎么可以吃突突  阅读(1134)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
点击右上角即可分享
微信分享提示
主题色彩