android擷取其他應用許可權(修改狀態),android許可權

來源:互聯網
上載者:User

android擷取其他應用許可權(修改狀態),android許可權

這兩天老大發話說要我研究一下安卓安全軟體的功能,先抽取了一個小模組,研究許可權管理


一開始就去packagemanager 去看發現有幾個方法:

就先去看了一下IPackagemanager 裡面的方法:

有很多 這裡我之列出跟許可權有關的

     PermissionInfo getPermissionInfo(String name, int flags);                    List<PermissionInfo> queryPermissionsByGroup(String group, int flags);                    PermissionGroupInfo getPermissionGroupInfo(String name, int flags);                    List<PermissionGroupInfo> getAllPermissionGroups(int flags);                int checkPermission(String permName, String pkgName);                    int checkUidPermission(String permName, int uid);                    boolean addPermission(in PermissionInfo info);                    void removePermission(String name);                void grantPermission(String packageName, String permissionName);                void revokePermission(String packageName, String permissionName);              String[] getAppOpPermissionPackages(String permissionName);            ParceledListSlice getPackagesHoldingPermissions(in String[] permissions,                  int flags, int userId);       boolean addPermissionAsync(in PermissionInfo info);       void setPermissionEnforced(String permission, boolean enforced);  

看安全軟體上的功能:

通過包名找許可權

通過許可權找包名

禁用 提示  允許 三種狀態

首先:就發現了2個方法:

void removePermission(String name);  void grantPermission(String packageName, String permissionName); 
我很高興的就開始寫代碼了 測試結果:  java.lang.SecurityException: Can't change android.permission.INTERNET. It is required by the application  一直報這個錯    查看源碼其實查到了是需要檢查許可權,源碼就不貼了,想要繞過檢查這個方法,可以通過hook的方式,猜測把源碼修改一下也可以用,目前這種方案先放棄。 

我又去網上查了一部分資料:看到這個類AppOpsManager  我就明白了 我找到相應的服務端代碼IAppOpsService:

    interface IAppOpsService {          // These first methods are also called by native code, so must          // be kept in sync with frameworks/native/include/binder/IAppOpsService.h          int checkOperation(int code, int uid, String packageName);          int noteOperation(int code, int uid, String packageName);          int startOperation(IBinder token, int code, int uid, String packageName);          void finishOperation(IBinder token, int code, int uid, String packageName);          void startWatchingMode(int op, String packageName, IAppOpsCallback callback);          void stopWatchingMode(IAppOpsCallback callback);          IBinder getToken(IBinder clientToken);                // Remaining methods are only used in Java.          int checkPackage(int uid, String packageName);          List<AppOpsManager.PackageOps> getPackagesForOps(in int[] ops);       List<AppOpsManager.PackageOps> getOpsForPackage(int uid, String packageName, in int[] ops);          void setMode(int code, int uid, String packageName, int mode);        void resetAllModes(int reqUserId, String reqPackageName);          int checkAudioOperation(int code, int usage, int uid, String packageName);          void setAudioRestriction(int code, int usage, int uid, int mode, in String[] exceptionPackages);                void setUserRestrictions(in Bundle restrictions, int userHandle);          void removeUser(int userHandle);      }  

它通過mode的方式來設定狀態,

可以通過包名擷取許可權

也可以通過許可權擷取包名


更重要的是返回許可權不是全部的 會根據層級 系統寫好的返回給你

你可以根據許可權做個分級,這一切就明朗了

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.