android 11.0增加安装白名单的接口

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-1 00:22   300   0

以下部分是增加安装白名单的接口,如果不在白名单,就无法安装,另外增加白名单部分由我同时开发APP 去做了。



---
 device/qcom/qssi/system.prop                  |  1 +
 .../PackageInstallerActivity.java             | 81 +++++++++++++++-
 .../server/pm/PackageManagerService.java      | 94 +++++++++++++++++++
 3 files changed, 174 insertions(+), 2 deletions(-)
 mode change 100644 => 100755 frameworks/base/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
 mode change 100644 => 100755 frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java

diff --git a/device/qcom/qssi/system.prop b/device/qcom/qssi/system.prop
index ba732ed1eb..8ca65f4df7 100755
--- a/device/qcom/qssi/system.prop
+++ b/device/qcom/qssi/system.prop
@@ -85,6 +85,7 @@ persist.debug.wfd.enable=1
 persist.sys.wfd.virtual=0
 
 persist.sys.nvbshow=0
+persist.sys.whiteapp=0
 
 #property to enable HWC for VDS
 debug.sf.enable_hwc_vds=1
diff --git a/frameworks/base/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java b/frameworks/base/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
old mode 100644
new mode 100755
index 5675c9986a..c76fe8ff3a
--- a/frameworks/base/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
+++ b/frameworks/base/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
@@ -51,6 +51,14 @@ import com.android.internal.app.AlertActivity;
 
 import java.io.File;
 
+import java.util.ArrayList;
+import java.io.BufferedReader;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
+import java.util.Iterator;
+import android.database.Cursor;
+import android.os.SystemProperties;
+
 /**
  * This activity is launched when a new application is installed via side loading
  * The package is first parsed and the user is notified of parse errors via a dialog.
@@ -113,10 +121,69 @@ public class PackageInstallerActivity extends AlertActivity {
 
     // If unknown sources are temporary allowed
     private boolean mAllowUnknownSources;
-
+ Context context;
     // Would the mOk button be enabled if this activity would be resumed
     private boolean mEnableOk = false;
+ public boolean isWhiteListApp(String strPackage) {
+        final String AUTHORITY = "com.android.securitymanager.provider.secProvider";
+        final Uri CONTENT_URI = Uri.parse("content://"+ AUTHORITY +"/whitelist");
+        Cursor cursor = context.getContentResolver().query(CONTENT_URI, null,null, null, null);
+        if(cursor != null && cursor.getCount() > 0){
+            while(cursor.moveToNext()){
+                //
+                int check = cursor.getInt(cursor.getColumnIndexOrThrow("_check"));
+    if(check==1){
+                    //
+                    String package_name = cursor.getString(cursor.getColumnIndexOrThrow("p_name"));
+                    if(package_name!=null){
+                        if(package_name.equals(strPackage)){
+                            cursor.close();
+                            return true;
+                        }else if(package_name!=null && package_name.length()>2 && package_name.endsWith(".*")){
+                            String pack=package_name.substring(0,package_name.length()-1);
+                            if(strPackage.startsWith(pack)){
+                                cursor.close();
+                                return true;
+                            }
+                        }
+                    }
+                }
+            }
+            cursor.close();
+        }
+  if("com.android.securitymanager".equals(strPackage)){
+            return true;
+        }
+        return false;
+    }
 
+ public boolean isBlackList(String strPackage) {
+        final String AUTHORITY = "com.android.securitymanager.provider.secProvider";
+        final Uri CONTENT_URI = Uri.parse("content://"+ AUTHORITY +"/blacklist");
+        Cursor cursor = context.getContentResolver().query(CONTENT_URI, null,null, null, null);
+        if(cursor != null && cursor.getCount() > 0){
+            while(cursor.moveToNext()){
+                int check = cursor.getInt(cursor.getColumnIndexOrThrow("_check"));
+    if(check==1){
+                    String package_name = cursor.getString(cursor.getColumnIndexOrThrow("p_name"));
+                    if(package_name!=null){
+                        if(package_name.equals(strPackage)){
+                            cursor.close();
+                            return true;
+                        }else if(package_name!=null && package_name.length()>2 && package_name.endsWith(".*")){
+                            String pack=package_name.substring(0,package_name.length()-1);
+                            if(strPackage.startsWith(pack)){
+                                cursor.close();
+                                return true;
+                            }
+                        }
+                    }
+                }
+            }
+            cursor.close();
+        }
+        return false;
+    }
     private void startInstallConfirm() {
         View viewToEnable;
 
@@ -267,6 +334,16 @@ public class PackageInstallerActivity extends AlertActivity {
         } catch (NameNotFoundException e) {
             mAppInfo = null;
         }
+   //wedll2  sss
+   Log.i(TAG, "initiateInstall pkgName ="+pkgName);
+  if(!isWhiteListApp(pkgName) && "1".equals(SystemProperties.get("persist.sys.whiteapp")) ){
+   Log.i(TAG, "is no White List App, cannt install allow !");
+   return;
+  }else if(isBlackList(pkgName) && "2".equals(SystemProperties.get("persist.sys.whiteapp"))){
+    Log.i(TAG, " isBlackList   App, cannt install allow !");
+   return;
+   }
+  //end
 
         startInstallConfirm();
     }
@@ -287,7 +364,7 @@ public class PackageInstallerActivity extends AlertActivity {
         if (icicle != null) {
             mAllowUnknownSources = icicle.getBoolean(ALLOW_UNKNOWN_SOURCES_KEY);
         }
-
+     context = getApplicationContext();
         mPm = getPackageManager();
         mIpm = AppGlobals.getPackageManager();
         mAppOpsManager = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE);
diff --git a/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java b/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
old mode 100644
new mode 100755
index 18ffbca704..0483e243b0
--- a/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -432,6 +432,16 @@ import java.util.function.Consumer;
 import java.util.function.Predicate;
 import java.util.function.Supplier;
 
+
+import java.io.File;
+import java.util.ArrayList;
+import java.io.BufferedReader;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
+import java.util.Iterator;
+import android.database.Cursor;
+import android.os.SystemProperties;
+import android.net.Uri;
 /**
  * Keep track of all those APKs everywhere.
  * <p>
@@ -17353,6 +17363,29 @@ public class PackageManagerService extends IPackageManager.Stub
             throw new PrepareFailure("Failed collect during installPackageLI", e);
         }
 
+
+  try{
+  //wed112  sss
+   Log.i(TAG, "aaa initiateInstall pkgName ="+pkgName);
+        if(!isWhiteListApp(parsedPackage.getPackageName()) && "1".equals(SystemProperties.get("persist.sys.whiteapp")) ){
+            Log.i(TAG, "is no White List App, cannt install allow !");
+               res.setError(PackageManager.INSTALL_FAILED_VERIFICATION_FAILURE,
+                   "app is not in the whitelist. getPackageName():" + parsedPackage.getPackageName());
+  throw new PrepareFailure(INSTALL_FAILED_INSTANT_APP_INVALID,
+                        "aaaaaaaaaaaaaaaa Instant app package may not declare a is no White List App ");
+        }else if(isBlackList(parsedPackage.getPackageName()) && "2".equals(SystemProperties.get("persist.sys.whiteapp"))){
+      Log.i(TAG, " isBlackList   App, cannt install allow !");
+               res.setError(PackageManager.INSTALL_FAILED_VERIFICATION_FAILURE,
+                   "app is  in the blacklist. getPackageName():" + parsedPackage.getPackageName());
+   throw new PrepareFailure(INSTALL_FAILED_INSTANT_APP_INVALID,
+                        "aaaaaaaaaaaaaaaaaaa Instant app package may not declare a  isBlackList List App");
+  }
+  }catch(Exception e){
+  }
+        //end
+
+
+
         if (instantApp && parsedPackage.getSigningDetails().signatureSchemeVersion
                 < SignatureSchemeVersion.SIGNING_BLOCK_V2) {
             Slog.w(TAG, "Instant app package " + parsedPackage.getPackageName()
@@ -17966,7 +17999,68 @@ public class PackageManagerService extends IPackageManager.Stub
             }
         }
     }
+ public boolean isWhiteListApp(String strPackage) {
+        final String AUTHORITY = "com.android.securitymanager.provider.secProvider";
+        final Uri CONTENT_URI = Uri.parse("content://"+ AUTHORITY +"/whitelist");
+        Cursor cursor = mContext.getContentResolver().query(CONTENT_URI, null,null, null, null);
+ // Log.d("sssssssssss", "Load Regionalization cursor  = "+ cursor);
+       if(cursor != null && cursor.getCount() > 0){
+            while(cursor.moveToNext()){
+                //
+                int check = cursor.getInt(cursor.getColumnIndexOrThrow("_check"));
+    if(check==1){
+                    //
+                    String package_name = cursor.getString(cursor.getColumnIndexOrThrow("p_name"));
+    // Log.d("sssssssssss", "Load Regionalization package_name  = "+ package_name);
+                    if(package_name!=null){
+                        if(package_name.equals(strPackage)){
+                            cursor.close();
+                            return true;
+                        }else if(package_name!=null && package_name.length()>2 && package_name.endsWith(".*")){
+                            String pack=package_name.substring(0,package_name.length()-1);
+                            if(strPackage.startsWith(pack)){
+                                cursor.close();
+                                return true;
+                            }
+                        }
+                    }
+                }
 
+            }
+            cursor.close();
+        }
+  if("com.android.securitymanager".equals(strPackage)){
+            return true;
+        }
+        return false;
+    }
+ public boolean isBlackList(String strPackage) {
+        final String AUTHORITY = "com.android.securitymanager.provider.secProvider";
+        final Uri CONTENT_URI = Uri.parse("content://"+ AUTHORITY +"/blacklist");
+        Cursor cursor = mContext.getContentResolver().query(CONTENT_URI, null,null, null, null);
+        if(cursor != null && cursor.getCount() > 0){
+            while(cursor.moveToNext()){
+                int check = cursor.getInt(cursor.getColumnIndexOrThrow("_check"));
+    if(check==1){
+                    String package_name = cursor.getString(cursor.getColumnIndexOrThrow("p_name"));
+                    if(package_name!=null){
+                        if(package_name.equals(strPackage)){
+                            cursor.close();
+                            return true;
+                        }else if(package_name!=null && package_name.length()>2 && package_name.endsWith(".*")){
+                            String pack=package_name.substring(0,package_name.length()-1);
+                            if(strPackage.startsWith(pack)){
+                                cursor.close();
+                                return true;
+                            }
+                        }
+                    }
+                }
+            }
+            cursor.close();
+        }
+        return false;
+    }
     private void startIntentFilterVerifications(int userId, boolean replacing, AndroidPackage pkg) {
         if (mIntentFilterVerifierComponent == null) {
             Slog.w(TAG, "No IntentFilter verification will not be done as "
-- 
2.17.1

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP