APK安装时的过滤方式:包名白名单、证书认证
1.定义一些全局变量,文件位置:
Build.java (frameworks\base\core\java\android\os)
- /**
- * 包管理方式名称<br>
- * whitelist: 白名单方式
- * certificate: 证书认证方式
- * none: 不进行管理
- */
- public static String packageManage = "none";
- /**
- * 允许 Launch 显示的 APP 及 APP 白名单
- */
- public static String[] packageAllow = new String[]{ "com.baidu.searchbox",
- "com.thinta.product.thintazlib",
- "com.thinta.product.x4usertool"};
- /**
- * 允许 Launch 显示的 APP的 证书存放路径
- */
- public static String certificatePath = "/system/etc/security/media.zip";
2.修改安装APK过程,在安装过程添加验证
修改文件的位置:
PackageManagerService.java (frameworks\base\services\core\java\com\android\server\pm)
首先添加一个函数:
- private static HashSet<X509Certificate> getTrustedCerts(File keystore)
- throws IOException, GeneralSecurityException {
- HashSet<X509Certificate> trusted = new HashSet<X509Certificate>();
- if (keystore == null) {
- return trusted;
- }
- ZipFile zip = new ZipFile(keystore);
- try {
- CertificateFactory cf = CertificateFactory.getInstance("X.509");
- Enumeration<? extends ZipEntry> entries = zip.entries();
- while (entries.hasMoreElements()) {
- ZipEntry entry = entries.nextElement();
- InputStream is = zip.getInputStream(entry);
- try {
- trusted.add((X509Certificate) cf.generateCertificate(is));
- } finally {
- is.close();
- }
- }
- } finally {
- zip.close();
- }
- return trusted;
- }
修改的函数:private void installPackageLI(InstallArgs args, PackageInstalledInfo res)
- 第一处修改:
if(Build.ThintaCust.packageManage.equals("certificate"))- tmp_flags = PackageManager.GET_SIGNATURES;
- final int parseFlags = mDefParseFlags | PackageParser.PARSE_CHATTY
- | (forwardLocked ? PackageParser.PARSE_FORWARD_LOCK : 0)
- | (onSd ? PackageParser.PARSE_ON_SDCARD : 0) | tmp_flags;
- 第二处修改:
- if(Build.ThintaCust.packageManage.equals("none")){
- Log.d("XYP_DEBUG", "packageManage = none \n");
- }else if(Build.ThintaCust.packageManage.equals("whitelist")){
- Log.d("XYP_DEBUG", "packageManage = whitelist \n");
- List<String> list = Arrays.asList(Build.ThintaCust.packageAllow);
- if(list.contains(pkg.packageName)){
- Log.d("XYP_DEBUG", "can install \n");
- }else{
- Log.d("XYP_DEBUG", "forbid install \n");
- res.setError(PackageManager.INSTALL_FAILED_USER_RESTRICTED, "installPackageLI, forbid install");
- return;
- }
- }else if(Build.ThintaCust.packageManage.equals("certificate")){
- int verify_pass = 0;
- try{
- File file = new File(Build.ThintaCust.certificatePath);
- HashSet<X509Certificate> trusted = getTrustedCerts(file);
- CertificateFactory cf = CertificateFactory.getInstance("X.509");
- for (X509Certificate c : trusted) {
- String tmp_public_key = c.getPublicKey().toString();
- for(Signature sig : pkg.mSignatures)
- {
- X509Certificate cert = (X509Certificate)cf.generateCertificate(new ByteArrayInputStream(sig.toByteArray()));
- String tmp_key = cert.getPublicKey().toString();
- if(tmp_public_key.equals(tmp_key)){
- verify_pass = 1;
- break;
- }
- }
- if(verify_pass == 1)
- break;
- }
- if(verify_pass != 1){
- Log.d("XYP_DEBUG", "forbid install \n");
- res.setError(PackageManager.INSTALL_FAILED_USER_RESTRICTED, "installPackageLI, forbid install");
- return;
- }
- }catch(FileNotFoundException e){
- Log.d("XYP_DEBUG", e.toString());
- }catch(CertificateException e){
- Log.d("XYP_DEBUG", e.toString());
- }catch(IOException e){
- Log.d("XYP_DEBUG", e.toString());
- }catch(GeneralSecurityException e){
- Log.d("XYP_DEBUG", e.toString());
- }
- }
3.证书的压缩方式:
zip -r media.zip media.x509.pem
直接用命令把*.x509.pem 打包成zip文件,然后放到目标板的合适位置;
用第一步中的certificatePath指向存放该zip文件的位置。
APK安装时的过滤方式:包名白名单、证书认证的更多相关文章
- 解决chrome插件安装时出现的“程序包无效”问题信息:程序包无效。
https://blog.csdn.net/bluexuemei/article/details/35213117 2014-06-27 09:00:51 bluexuemei 阅读数 14374更多 ...
- android .apk安装时遇到NSTALL_FAILED_CONTAINER_ERROR错误
在一台酷派上装apk时遇到问题: android Installation error: INSTALL_FAILED_CONTAINER_ERROR 遇到问题后baidu google修改为andr ...
- Oozie安装时放置Mysql驱动包的总结(网上最全)
不多说,直接上干货! 对于在oozie里放置Mysql驱动包的总结 根据网上的参考以及我个人经验安装的使用 (1)放一份到$OOZIE_HOME/libext下 (是 mysql-connector- ...
- 解决Chrome插件安装时出现的“程序包无效”问题
问题原因,新版的插件头部文件的修改,导致旧版的插件包无法使用,解决方式:解压. 1.把下载后的.crx扩展名的离线Chrome插件的文件扩展名改成.zip或者.rar(如果看不到Chrome插件的扩展 ...
- Android apk安装时出现“解析软件包错误”
有时候在安装apk的时候会出现解析软件包出错 (Android studio)解决方法如下: 关闭Instant Run功能: File-Settings-...看下图: 将红色框内的勾取消. 如果还 ...
- R安装时出现辑程包不存在,解决方法
R > -------------------------------------------------[解决方案]1.使用命令单独安装caret,安装的时间很长.install.packag ...
- android-获得".apk"文件的相关信息。包名、版本号等等
String filePath = "/sdcard/feijiedemo.apk"; PackageManager packageManager = getPackageMana ...
- CloudStack 安装时需要的第三方包
1.mysql-connector-java 2.jakarta-commons-daemon-jsvc 3.jsvc rpm -ivh cloudstack-common-4.1.1-0.el6 ...
- php7 安装时需求的依赖包
php70 php70-bcmath php70-cli php70-common php70-devel php70-fpm php70-gd php70-json php70-mbstring p ...
随机推荐
- 2013 Esri全球用户大会之元数据支持
1.1 是否支持FGDC CSDGMArcGIS是否支持FGDC CSDGM和North American Profile (NAP)元数据标准?如何支持? 支持,从ArcGIS forDesktop ...
- Memcached 学习笔记(二)——ruby调用
Memcached 学习笔记(二)——ruby调用 上一节我们讲述了怎样安装memcached及memcached常用命令.这一节我们将通过ruby来调用memcached相关操作. 第一步,安装ru ...
- 文件对话框WPF(5)----文件浏览对话框
废话就不多说了,开始... WPF中文件浏览对话框的实现可以利用Windows API Code Pack,它是一个用于访问Windows Vista/7 特性的托管代码函数库,但并没有包含在.NET ...
- mongodb两次被黑后......
先说说事情的经过...... 2017年1月8号星期天,在家翻头条无意中看到一条新闻说很多用户的mongodb被黑了,数据都被删了.当时想着公司的爬虫用的也是mongodb做存储,应该不会被黑吧,不可 ...
- 前端MVC学习笔记(四)——NodeJS+MongoDB+AngularJS+Bootstrap书店示例
这章的目的是为了把前面所学习的内容整合一下,这个示例完成一个简单图书管理模块,因为中间需要使用到Bootstrap这里先介绍Bootstrap. 示例名称:天狗书店 功能:完成前后端分离的图书管理功能 ...
- Docker集群实验环境布署--swarm【4 管理组件--manager】
主机分配如下,支持双活,中断其中1台,primary会通过consul自动重新选举 10.40.100.141 docker-manager0.venic.com 10.40.100.142 do ...
- [pinyin4j] java版汉字转换拼音(大小写)
pinyin4J 是一个可以将汉字转换成拼音的lib,非常实用,其maven地址为:http://mvnrepository.com/artifact/com.belerweb/pinyin4j/2. ...
- HDU 2045 不容易系列之(3)—— LELE的RPG难题(递归/动态规划)
不容易系列之(3)—— LELE的RPG难题 Problem Description 人称“AC女之杀手”的超级偶像LELE最近忽然玩起了深沉,这可急坏了众多“Cole”(LELE的粉丝,即" ...
- 2014 ACM/ICPC Asia Regional Beijing Site
1001 A Curious Matt 1002 Black And White 1003 Collision 1004 Dire Wolf 1005 Everlasting L 1006 Fluor ...
- Thymeleaf 3与Spring MVC 4 整合配置
Thymeleaf 3与Spring MVC 4 整合配置 Maven 依赖配置 Spring 相关依赖就不说了 <dependency> <groupId>org.thyme ...