android_apk安全之完整性校验
来源:互联网 发布:苹果cms展示不会显示 编辑:程序博客网 时间:2024/06/10 09:02
android apk安全之完整性校验
最近项目中在做安全监测,介于这个原因调查了一些第三方的加固防编译平台和自己使用中的心得,总结了apk安全的完整性校验的监测.
完整性校验原理
完整性校验就是我们用各种算法来计算一个文件的完整性,防止这个文件被修改。其中常用的方法就是计算一个文件的CRC32的值或者计算一个文件的哈希值。我们在防止apk被反编译的方法中也可以采用这种方法。我们知道apk生成的classes.dex主要由Java文件生成的,它是整个apk的逻辑实现。所以我们可以对classes.dex文件进行完整性校验,来保证整个程序的逻辑不被修改。如果我们想要保证整个apk文件的完整性,也可以对整个apk文件进行完整性校验。下面我们分别来实现对classes.dex文件和apk文件的完整性校验。
1.用crc32对classes.dex文件的完整性进行校验
代码如下:
//验证apk中classes.dex文件的crc32的值,即对dex文件进行完整性校验 public static boolean checkDexCrcValue() { String apkPath = BaseApplication.getInstance().getPackageCodePath(); Long dexCrc = Long.parseLong(QianJinSuoApplication.getInstance().getString(R.string.classesdex_crc)); try { ZipFile zipfile = new ZipFile(apkPath); ZipEntry dexentry = zipfile.getEntry("classes.dex"); Log.i("checkDexCrcValue", "classes.dexcrc=" + dexentry.getCrc()); if (dexentry.getCrc() == dexCrc) { return true; } } catch (IOException e) { e.printStackTrace(); } return false; }
tips:一旦确定了classesdex_crc,代码逻辑不可以再进行修改了。否则需要改相应的classesdex_crc.
用哈希值对整个apk完整性进行校验
由于我们要对整个apk的完整性进行校验,所以我们的算出哈希值就不能存在资源文件中了因为apk中任何的改动都会引起最终apk生成的哈希值的不同。
(1)首先实现apk中计算自身哈希值的代码,如下:
public static boolean checkApkSha(){ String apkPath = QianJinSuoApplication.getInstance().getPackageCodePath(); MessageDigest msgDigest = null; try { msgDigest = MessageDigest.getInstance("SHA-1"); byte[] bytes = new byte[1024]; int byteCount; FileInputStream fis = new FileInputStream(new File(apkPath)); while ((byteCount = fis.read(bytes)) > 0) { msgDigest.update(bytes, 0, byteCount); } BigInteger bi = new BigInteger(1, msgDigest.digest()); String sha = bi.toString(16); Log.i("checkApkSha", "apk sha=" + sha); fis.close(); if(BaseApplication.getInstance().getString(R.string.apk_sha).equals(sha)){ return true; } //这里添加从服务器中获取哈希值然后进行对比校验 } catch (Exception e) { e.printStackTrace(); } return false; }
(2) 用Linux下的sha1sum命令计算我们的apk的哈希值,命令如下:
shasum verification.apk
将(2)中生成的哈希值存到服务器上,然后在我们的代码中从服务器获取进行完整性比较。
上面我们用计算crc32和哈希值的方法分别对classes.dex文件和整个apk完整性进行了校验,当然两个校验方法也可以互换使用。
0 0
- android_apk安全之完整性校验
- android_apk安全之运行时签名校验
- APP安全之APK完整性校验
- APP安全之APK完整性校验
- APP安全之APK完整性校验
- HDFS之数据完整性校验
- 安卓安全-apk完整性校验
- Java安全之保证消息的完整性
- Java安全之保证消息的完整性
- 程序动态完整性校验之指令分支记录
- RPM 校验软件包完整性
- Android代码完整性校验
- APK完整性校验代码
- APP 完整性校验
- 数据完整性校验
- Android完整性校验
- linux文件完整性校验
- 【Android数据加密与完整性校验之使用MessageDigest类进行MD5/SHA1】校验数据传输的完整性常用方式
- react native navigator 的使用
- yii2读写分离配置
- bootstrap 监听点击关闭事件以及禁用空白处点击自动关闭
- 手机信息制作页面1
- 升级Cocoapods出现错误
- android_apk安全之完整性校验
- 信号量
- 汪国新委员出席全国政协十二届五次会议闭幕会
- 另一个角度看矩阵分析
- Android机型适配总结
- 汪国新提案做好新三峡大文章忠县考察回眸【艺术家眼中的新三峡之忠县】
- ServletRequestDataBinder的作用
- 汪国新提案做好新三峡大文章石柱考察回眸【艺术家眼中的新三峡之石柱】
- 获取Navigation Bar 的高度