首页
社区
课程
招聘
[分享]记录某数字壳.init_array都为0的解决办法
发表于: 2025-10-24 10:30 912

[分享]记录某数字壳.init_array都为0的解决办法

2025-10-24 10:30
912
逆向小白,新人新帖,轻喷

首先IDA打开so库,IDA正常加载,没有异常。

没有看到.init .init_array


好家伙,import,export都是空的


那就看看DYNAMIC段吧

找到INIT_ARRAY了,跳转过去


都是0

好家伙,触及到知识盲区了

.init_array表都是空的,那程序是怎么跑的,人很懵


用unidbg模拟运行以下,dump出6dcd0的内存看看。嗯?怎么这里又有数据,难道还有更早执行的函数吗?

翻阅ELF标准,和AOSP的Linker源码之后,没有比.init_array更早执行的函数了。


把数据转成16进制是F0171、80A0、10A0,在010中搜索,发现他们的位置在4660

这个位置指向的是so库的重定向表

我恍然大悟,原来是壳利用linker的重定向,把.init_array的地址放在重定向表中,在linker加载的时候自动把地址补回去。

接下来就是写脚本,把重定位表里隐藏的函数都填回壳中就可以静态分析了


传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 10
支持
分享
最新回复 (3)
雪    币: 179
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
666666
2025-11-4 10:08
0
雪    币: 54
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
666
2025-11-4 10:14
0
雪    币: 758
活跃值: (879)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
4
既然是运行时回填,那么使用内存dump把so弄出来的话是否能够显示?
2025-11-5 23:49
0
游客
登录 | 注册 方可回帖
返回