Android中使用”hacker”方式解决ServiceManager的权限限制问题(1)

缘由 有一个系统,需要我们的解决方案,但是却没有提供BSP的源码。 我们的方案有一个So文件,并在其中有注册service,但是启动后发现service并没有注册成功,查询log发现是:

看起来是我们不具备权限,然后确定了一下SElinux的状态,发现是没有开启的,而servicemanager对添加service的权限的检查是位于其代码中的。 关于ServiceManager是如何检查权限的可以参考一下stackoverflow中的答案,或者自己看看servicemanager的源码。 参考的链接为这个,从这里面我们可以得知权限的检查写死在了对应的source code中(Android 4.4),暂时没有配置文件,这个和SeLinux不一样。 判断逻辑 ServiceManager的判断逻辑为: 1. uid判断是否为system 2. 是否在可信任的表格中 如果两个都不是,那么就认为没有权限,然后打印出前面的话来。这个对应的代码为:

另外这个allowed的数组为:

从里面的注释可以看出,以后这个可能会变成使用通配符方式,或者是配置文件的方式,但是现在还是直接写死了。

Continue reading »

Android JNI DETECTED ERROR IN APPLICATION的解决

在APK中使用了jni 的so shared library,运行的运行的时候出现如下的错误:

从里面可以看到,其应该到

中去调用对应的native函数,但是jni反过来查找java class的时候不对:

因此可以判断是jni代码中写的查找被调用的java class path不正确。将其更正即可。

Continue reading »

为小米4与小米3 Mi3 Mi4编译Cyanogenmod 12.1与13.0 (CM12与CM13) 的步骤以及错误解决

小米4是Cyanogenmod官方支持的Device,所以编译无需我们做Device specific适配,我们只需要提取代码(Android 与Kernel),获取proprietary binary files即可编译。  小米4以及小米3的设备名字都是cancro,CM对于这两款设备的WIki位于: https://wiki.cyanogenmod.org/w/Build_for_cancro 步骤与错误解决 1. breakfast VS proprietary files 先获取proprietary binary files然后再breakfast,否则会出现错误。 2. 提取proprietary file的错误解决 提取有两种方法:

Continue reading »