Android中的apk通过签名校验防止反编译重打包

2024-08-31 09:38

本文主要是介绍Android中的apk通过签名校验防止反编译重打包,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Android开发完打包好的apk如果被别人盗取可能会存在被反编译重打包的风险,那么我们如何来保护我们辛苦开发出来的程序不被别人盗取重打包呢,这里我们通过签名文件入手,因为打包时候是需要签名的,别人盗取后如果重打包也是需要签名的,那么如果重打包的签名跟我们原本打包的签名不一样,就可以阻止他使用该apk。

我们要在首页MainActivity里来判断重打包的签名文件是否与原签名文件一致:

/*** 获取签名文件的第一个签名值* @param packageName  应用包名* @return*/public int getSignature(String packageName){PackageManager packageManager = this.getPackageManager();PackageInfo packageInfo = null;int sign = 0;try {packageInfo = packageManager.getPackageInfo(packageName,PackageManager.GET_SIGNATURES);Signature[] signatures = packageInfo.signatures;sign = signatures[0].hashCode();} catch (PackageManager.NameNotFoundException e) {sign = 0;e.printStackTrace();}return sign;}

签名文件的获取是在app的build.gradle文件里配置的

android {compileSdkVersion 30buildToolsVersion "30.0.0"//配置签名文件信息signingConfigs {release {keyAlias 'xxx.keystore'keyPassword '123'storeFile file('D:/xxx.jks')storePassword '123'}}……
}
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//通过签名校验防止重打包Log.d("tag","getSignature:" + getSignature("com.wjy.project.mylearntest"));//987654321这里是随便写的,实际的值是上面log  getSignature("com.wjy.project.mylearntest")输出的值if (getSignature("com.wjy.project.mylearntest") != 987654321){Toast.makeText(this,"app被重新打包",Toast.LENGTH_SHORT).show();//这里可以写使应用程序退出或杀死应用程序的代码,这样可以保护我们的apk不被重新打包}}

这样,通过签名文件的校验,如果不匹配就可以退出应该程序来防止重打包了。

这篇关于Android中的apk通过签名校验防止反编译重打包的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1123545

相关文章

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Python程序打包exe,单文件和多文件方式

《Python程序打包exe,单文件和多文件方式》:本文主要介绍Python程序打包exe,单文件和多文件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python 脚本打成exe文件安装Pyinstaller准备一个ico图标打包方式一(适用于文件较少的程

Maven项目打包时添加本地Jar包的操作步骤

《Maven项目打包时添加本地Jar包的操作步骤》在Maven项目开发中,我们经常会遇到需要引入本地Jar包的场景,比如使用未发布到中央仓库的第三方库或者处理版本冲突的依赖项,本文将详细介绍如何通过M... 目录一、适用场景说明​二、核心操作命令​1. 命令格式解析​2. 实战案例演示​三、项目配置步骤​1

Python FastAPI实现JWT校验的完整指南

《PythonFastAPI实现JWT校验的完整指南》在现代Web开发中,构建安全的API接口是开发者必须面对的核心挑战之一,本文将深入探讨如何基于FastAPI实现JWT(JSONWebToken... 目录一、JWT认证的核心原理二、项目初始化与环境配置三、安全密码处理机制四、JWT令牌的生成与验证五、

Java应用如何防止恶意文件上传

《Java应用如何防止恶意文件上传》恶意文件上传可能导致服务器被入侵,数据泄露甚至服务瘫痪,因此我们必须采取全面且有效的防范措施来保护Java应用的安全,下面我们就来看看具体的实现方法吧... 目录恶意文件上传的潜在风险常见的恶意文件上传手段防范恶意文件上传的关键策略严格验证文件类型检查文件内容控制文件存储

Spring Boot项目打包和运行的操作方法

《SpringBoot项目打包和运行的操作方法》SpringBoot应用内嵌了Web服务器,所以基于SpringBoot开发的web应用也可以独立运行,无须部署到其他Web服务器中,下面以打包dem... 目录一、打包为JAR包并运行1.打包为可执行的 JAR 包2.运行 JAR 包二、打包为WAR包并运行

Python将字库文件打包成可执行文件的常见方法

《Python将字库文件打包成可执行文件的常见方法》在Python打包时,如果你想将字库文件一起打包成一个可执行文件,有几种常见的方法,具体取决于你使用的打包工具,下面就跟随小编一起了解下具体的实现方... 目录使用 PyInstaller基本方法 - 使用 --add-data 参数使用 spec 文件(

防止SpringBoot程序崩溃的几种方式汇总

《防止SpringBoot程序崩溃的几种方式汇总》本文总结了8种防止SpringBoot程序崩溃的方法,包括全局异常处理、try-catch、断路器、资源限制、监控、优雅停机、健康检查和数据库连接池配... 目录1. 全局异常处理2. 使用 try-catch 捕获异常3. 使用断路器4. 设置最大内存和线

Spring Validation中9个数据校验工具使用指南

《SpringValidation中9个数据校验工具使用指南》SpringValidation作为Spring生态系统的重要组成部分,提供了一套强大而灵活的数据校验机制,本文给大家介绍了Spring... 目录1. Bean Validation基础注解常用注解示例在控制器中应用2. 自定义约束验证器定义自

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四