在Android 11及以上且在arm32模式下运行,会产生即使无任何hook行为,也会出现so文件与so内存中.text段不一致的问题。
在这里再做一个详细的分析:
2023-02-02_153347.png (48 KB, 下载次数: 0)
下载附件
2023-2-2 15:37 上传
这里以libc.so为例,在内存中有三段,分别是:
e7da2000-e7dcd000
e7dcd000-e7e55000
e7e55000-e7e5a000
libc.so在内存中的一些参数我已经打印出来了(以memory字符开头),比如.text段的大小、偏移等等。我们可以
发现libc.so的.text段的大小为543936 B(531 KB),libc.so的.text段在内存中的开始地址为:0xe7dccd80,
也就是在第一段e7da2000-e7dcd000这个区间里面加载了e7dcd000 - e7dccd80 = 640 B的大小,那么在第二段
e7dcd000-e7e55000区间中,加载了e7e51a40 - e7dcd000 = 543296 B的大小,640 B + 543296 B = 543936 B(531 KB)。
所以libc.so的.text段分布在了内存的两个区间段,在这里我校验第一个区间段的640 B的代码数据crc值时是正常的,
第二个区间段就不一致了。我特地去比较了libc.so的.text段第二个区间段前20 B数据和文件上此偏移位置的20 B的数据,
发现也不一样,如果有大佬做出了解答,这里表示十分感谢。如果后续我解决了,也会在此回复,感谢大家的支持。
这里做so .text段crc校验所用到的示例apk:
https://www.123pan.com/s/lN7UVv-pbYJ
Screenshot_2023-02-01-18-07-54-352_com.ysh.hookap.jpg (87.42 KB, 下载次数: 0)
下载附件
2023-2-2 15:53 上传
IMG_20230202_155441.jpg (175.14 KB, 下载次数: 0)
下载附件
2023-2-2 15:55 上传