-
-
[分享]记录某数字壳.init_array都为0的解决办法
-
发表于:
2025-10-24 10:30
912
-
[分享]记录某数字壳.init_array都为0的解决办法
逆向小白,新人新帖,轻喷
首先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加载的时候自动把地址补回去。

接下来就是写脚本,把重定位表里隐藏的函数都填回壳中就可以静态分析了
传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!