Android开发经验谈Android开发Android技术知识

【安全与逆向】- APP安全防护

2020-01-20  本文已影响0人  拔萝卜占坑

代理检测

在自己的应用里检测当前手机是否设置了代理,如果设置者禁止应用的网络请求,达到被抓包的目的。

public static boolean isWifiProxy() {
    final boolean IS_ICS_OR_LATER = Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH;
    String proxyAddress;
    int proxyPort;
    if (IS_ICS_OR_LATER) {
        proxyAddress = System.getProperty("http.proxyHost");
        String portStr = System.getProperty("http.proxyPort");
        proxyPort = Integer.parseInt((portStr != null ? portStr : "-1"));
    } else {
        proxyAddress = android.net.Proxy.getHost(context);
        proxyPort = android.net.Proxy.getPort(context);
    }
    return (!TextUtils.isEmpty(proxyAddress)) && (proxyPort != -1);
}

检测调试器

检测模拟器

如果应用发布后,应该是在真机上使用,如果不是,这阻止运行。

检查签名

    private boolean isModifySignature(String packageName){
        PackageManager pm = getPackageManager();
        PackageInfo pi = null;
        int sig = 0;
        try {
            pi = pm.getPackageInfo(packageName,PackageManager.GET_SIGNATURES);
            Signature[] s = pi.signatures;
            sig = s[0].hashCode();
        } catch (PackageManager.NameNotFoundException e) {
            sig = 0;
            e.printStackTrace();
        }

        if (sig != 1111111111){
            Log.e("","签名不一致");
            return true;
        }
        return false;
    }

校验检测

  private boolean checkCRC(){
      boolean mod = false;
      long crc = Long.parseLong(getString(R.string.crc));
      ZipFile zf;
      try {
          zf = new ZipFile(getApplicationContext().getPackageCodePath());
          ZipEntry ze = zf.getEntry("classes.dex");
          if (ze.getCrc() == crc){
              mod = true;
          }
      } catch (IOException e) {
          e.printStackTrace();
          mod = false;
      }
      return mod;
  }
上一篇 下一篇

猜你喜欢

热点阅读