Closed gttiankai closed 5 years ago
经过最近的测试进一步的发现了问题: 第一种模拟器:使用 google SDK 中的 Android4.4(Google APIs)的 image 创建的虚拟机,hook 是不成功的。 第二种模拟器:使用 google SDK 中的 Android4.4 (不是 Google APIs)的 image 创建的虚拟机,是可以 hook 成功的。 经过反汇编分析,发现两种 image 的 libandroidfw.so的导出表不一致。第一种模拟器是的libandroidfw.so 的导入表中是没有这个函数的。第二种模拟器中的libandroidfw.so的导入表中存在这个函数。
所以问题的根源就出在Google SDK 提供这两种模拟器的不同上。
有人知道这两种模拟器镜像有什么不同吗?
inflateBuffer
是libandroidfw.so库的内部函数:http://androidxref.com/4.4.3_r1.1/xref/frameworks/base/include/androidfw/ZipFileRO.h#168
内部函数一般是不会通过PLT/GOT来调用的,所以用PLT hook的方式是无法hook到inflateBuffer
函数的。
有些rom中的系统库为了能在调试时获取到更多的信息(符号,backtrace等),可能会将此类内部函数放到PLT/GOT中,代价是牺牲一些执行效率和flash空间。
@caikelun 对的 应该是这样子的,只能说 Android 系统这边情况比较乱。
使用了xhook 尝试去hook /frameworks/base/libs/androidfw/ZipFileRO.cpp中的inflateBuffer函数,在日志中显示成功。但是在调用该函数是,并没有打印相应的日志,也就是hook没有真正的起作用。请问这个怎么解决啊?
日志信息如下:
hook的关键代码如下: