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中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

Java进行文件格式校验的方案详解

《Java进行文件格式校验的方案详解》这篇文章主要为大家详细介绍了Java中进行文件格式校验的相关方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、背景异常现象原因排查用户的无心之过二、解决方案Magandroidic Number判断主流检测库对比Tika的使用区分zip

Flutter打包APK的几种方式小结

《Flutter打包APK的几种方式小结》Flutter打包不同于RN,Flutter可以在AndroidStudio里编写Flutter代码并最终打包为APK,本篇主要阐述涉及到的几种打包方式,通... 目录前言1. android原生打包APK方式2. Flutter通过原生工程打包方式3. Futte

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

Android WebView无法加载H5页面的常见问题和解决方法

《AndroidWebView无法加载H5页面的常见问题和解决方法》AndroidWebView是一种视图组件,使得Android应用能够显示网页内容,它基于Chromium,具备现代浏览器的许多功... 目录1. WebView 简介2. 常见问题3. 网络权限设置4. 启用 JavaScript5. D

Android如何获取当前CPU频率和占用率

《Android如何获取当前CPU频率和占用率》最近在优化App的性能,需要获取当前CPU视频频率和占用率,所以本文小编就来和大家总结一下如何在Android中获取当前CPU频率和占用率吧... 最近在优化 App 的性能,需要获取当前 CPU视频频率和占用率,通过查询资料,大致思路如下:目前没有标准的

Java中使用注解校验手机号格式的详细指南

《Java中使用注解校验手机号格式的详细指南》在现代的Web应用开发中,数据校验是一个非常重要的环节,本文将详细介绍如何在Java中使用注解对手机号格式进行校验,感兴趣的小伙伴可以了解下... 目录1. 引言2. 数据校验的重要性3. Java中的数据校验框架4. 使用注解校验手机号格式4.1 @NotBl

如何关闭 Mac 触发角功能或设置修饰键? mac电脑防止误触设置技巧

《如何关闭Mac触发角功能或设置修饰键?mac电脑防止误触设置技巧》从Windows换到iOS大半年来,触发角是我觉得值得吹爆的MacBook效率神器,成为一大说服理由,下面我们就来看看mac电... MAC 的「触发角」功能虽然提高了效率,但过于灵敏也让不少用户感到头疼。特别是在关键时刻,一不小心就可能触