自实现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的重定位表进行修正了),所以可以增加一些反调试的手段增加分析难度。
以上均为个人观点,仅供参考。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探