Android apk完整性检测的实现思路和实现过程全记录

发布时间:2023年12月21日

需求和背景

行业相关,对安全性较高的程序一般都需要添加完整性检测的功能,以防止程序被篡改,从而导致安全问题的发生。
相关的支付应用项目今年也做了好几个,这些程序也都已通过了行业相关安全标准的认证。

实现

下面来分享Android APP完整性校验的实现思路和代码实现。

通过sp判断当前是否是第一次安装apk,第一次安装默认apk是从市场下载安装,默认认为是没有被篡改过的。可以不用检查,只计算当前的hash值并保存到文件中。

可以在application中执行,计算apk的hash值并写文件的操作是耗时操作,记得开子线程进行。

 
    private boolean integrityCheckResult = false;
    private boolean isFirstRun;//可以通过文件保存,例如SP
    
   @Override
    public void onCreate() {
   
        super.onCreate();
           ThreadPoolManager.getInstance().runInBackground(new Runnable() {
   
            @Override
            public void run() {
   
                //检测apk完整性
                if (isFirstRun){
   //skip and calculate apk’s hash
                    SecurityManager.getInstance().checkIntegrity(true);
                    integrityCheckResult = true;
                }else {
   
                    integrityCheckResult = SecurityManager.getInstance().checkIntegrity(false);
                }
            }
        });
    
	 public boolean isIntegrityCheckResult() {
   
        return integrityCheckResult;
    }

在入口activity中判断是否完整性校验通过,假如不通过,可以弹窗提示然后锁定APP,让用户重新在安全的平台重新下载安装。当前APP无法使用,存在安全问题。

  @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (App.getApp().isIntegrityCheckResult()) {
   
            Log.d(TAG, "onCreate: checkIntegrity success");
        } else {
   
            Log.d(TAG, "onCreate: checkIntegrity failed");
        }
    }

安全管理类

新建一个安全管理类,用于管理所有和安全相关的类

public class SecurityManager {
   
    //做一个单例
    private static SecurityManager instance = null;
    private final Integrity integrity;
    private SecurityManager(){
   
        integrity = new Integrity();
    }

    public static synchronized SecurityManager getInstance() {
   
        if (instance == null)
            instance = new SecurityManager();
 
文章来源:https://blog.csdn.net/Shujie_L/article/details/135134320
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。