增强APP的安全性(一)
来源:互联网 发布:h网络快还是e网络快 编辑:程序博客网 时间:2024/05/18 05:46
增强APP的安全性(一)–通过检查APP信息
前言
当我们发布一款新的APP的时候,最不愿看到的是我们的成果被别人窃取,所以如何提高我们APP的安全性在开发过程中也是非常重要的。常见增强安全性的手段有很多。例如:混淆Java代码、用C/C++实现关键代码、APK加固等等。今天我介绍的是可以迅速添加到项目中的来增强APP安全的方式。
通过检查APP信息来增强APP的安全性
具体代码如下:
package com.dong.mobilesafe.utils.security;import android.content.Context;import android.content.pm.ApplicationInfo;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;import android.content.pm.Signature;import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStreamReader;/** * Created by Jesse on 2016/6/13 0013. */public class SecurityCheckManager { public static int SIG_HASH_CODE = -2057429939; private static SecurityCheckManager instance; private SecurityCheckManager() { } public static SecurityCheckManager getInstance() { if (instance == null) { synchronized (SecurityCheckManager.class) { if (instance == null) { instance = new SecurityCheckManager(); } } } return instance; } /** * 是否运行在模拟器中 * * @return true表示运行在模拟器中,否则运行在真机中 */ private boolean isRunningInEmulator() { boolean qemuKernel = false; Process process = null; DataOutputStream os = null; try { process = Runtime.getRuntime().exec("getprop ro.kernel.qemu"); os = new DataOutputStream(process.getOutputStream()); BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream())); os.flush(); process.waitFor(); qemuKernel = (Integer.valueOf(in.readLine()) == 1); } catch (Exception e) { qemuKernel = false; e.printStackTrace(); } finally { try { if (os != null) { os.close(); } if (process != null) { process.destroy(); } } catch (IOException e) { e.printStackTrace(); } } return qemuKernel; } /** * 检查签名是否有误,防止恶意修改签名 * * @return true签名有误,否则签名正确 */ private boolean isSignatureError(Context context) { boolean isError = false; PackageManager packageManager = context.getPackageManager(); try { PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(),PackageManager.GET_SIGNATURES); Signature[] signatures = packageInfo.signatures; int sig = signatures[0].hashCode(); if(sig != SIG_HASH_CODE) { isError = true; } } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return isError; } /** * 检查软件是否可以调试 * @return */ private boolean isDebuggable(Context context) { boolean debuggable = false; if((context.getApplicationInfo().flags &= ApplicationInfo.FLAG_DEBUGGABLE) != 0) { debuggable = true; } return debuggable; } /** * 对APP进行安全检查,如果发现运行在模拟器上、签名被修改和应用能够被调试 * 则程序会自动关闭 * @param context */ public void securityCheck(final Context context) { Runnable r = new Runnable() { @Override public void run() { // Moves the current Thread into the background android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND); if(isRunningInEmulator()) { killMyself(); return; } if(isSignatureError(context)) { killMyself(); return; } if(isDebuggable(context)) { killMyself(); return; } } }; new Thread(r).start(); } /** * 杀死自己的进程 */ private void killMyself() { android.os.Process.killProcess(android.os.Process.myPid()); }}
然后我们在APP启动的地方添加如下代码:
public class SecurityApplication extends Application{ public boolean isReleaseVersion = true; private static SecurityApplication instance; @Override public void onCreate() { super.onCreate(); instance = this; if(isReleaseVersion) { SecurityCheckManager.getInstance().securityCheck(this); } .... } public static SecurityApplication getInstance() { return instance; }}
通过上面的步骤就可以来增强我们app的安全性,当然这些手段对于一些专业破解APP的人来说也是很容易破解的。但是这种方式好处是简单,只要增加几行代码。当然的最好的手段是通过一系列的手段来增强APP的安全性,如结合我上面提到的手段结合在一起来提高破解的难度。下一篇我们开始学习混淆的方式来增强APP的安全性。
0 0
- 增强APP的安全性(一)
- 增强APP的安全性(二)
- app的安全性(一)
- 使用增强安全性的Linux(转)
- 增强Web的安全性
- 增强MIDAS的安全性
- 增强Web的安全性
- 增强WebService安全性的方法
- 增强 nginx 的 SSL 安全性
- XML 安全组件:增强电子商务的安全性
- 增强Web服务安全性的新技术
- 增强Web服务安全性的新技术
- 通过SoapHeader来增强webService 的安全性
- 通过SOAPHeader增强WebService的安全性
- 通过SoapHeader来增强webService 的安全性
- 用mod_security增强web安全性(下)
- app的安全性设计策略
- 基于角色的安全性(一)
- 问题汇总
- Android开发艺术探索第五章——理解RemoteViews
- invalid project specified问题解决
- Linux内核对象管理与呈现机制
- java自定义线程与线程方法详解
- 增强APP的安全性(一)
- 活动生命周期详解
- java.lang.UnsupportedOperationException
- 进程与线程
- jzoj C组 2017.1.13比赛
- 数据结构上机测试2-1:单链表操作A
- CMT跟踪算法分析
- Transition的用法
- JavaScript中对象转换为原始值的步骤