IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> autojs用签名校验保护app -> 正文阅读

[移动开发]autojs用签名校验保护app

牙叔教程 简单易懂

测试环境

Autojs版本: 9.0.4
Android版本: 8.0.0
Android Studio版本: 4.1.2

签名概念

目的: 为了确认某个信息确实是由某个发送方发送的,或者某个发布内容确实是由发送方发布的,任何人都不可能伪造消息,并且,发送方也不能抵赖。
方法: 对发布的信息内容,通过某种可靠的加工(比如进行MD5运算),生成签名标识(字符串序列或者证书之类)
验证: 任何人拿到发布的信息内容后,可以通过同样的加工,得出签名标识,如果比对和发布者公布的签名一致,则验证为真。
签名与加密区别: 加密是为了不让别人知道原来的信息,签名是为了保证大家获取到的原来的信息是没有经过改动的。

签名校验

Android中的每个应用都是有一个唯一的签名, 一个应用没有被签名是不允许安装到设备中的,

APP签名校验,主要作用是保护APP本身的安全利益,防止被违法分子进行内部代码和文件修改,然后插入广告等获利行为,进行违法操作。

校验方法

  • Java层入口校验
  • NDK校验, 即so文件
  • 服务器验证

autojs的签名管理

使用autojs打包脚本的时候, 最下方有一个签名选项, 可以选择签名,
签名文件后缀是jks, 创建的签名默认保存在
/sdcard/.keystore/

签名的时候, 我们可以选择自己创建的签名,
执行脚本的时候, 先校验签名, 不一样的话就退出脚本

通过jks文件获取签名的sha1值

android studio 中有一个keytool, 执行以下命令即可获取签名的sha1
keytool -list -v -keystore yashu.jks
在这里插入图片描述

代码讲解

1. 导入类
importClass(android.content.pm.PackageManager);
importClass(java.security.MessageDigest);
importClass(java.io.ByteArrayInputStream);
importClass(java.lang.StringBuilder);
importClass(java.lang.Integer);
importClass(java.security.cert.CertificateFactory);
2. 获取应用的签名sha1
/**
 * 获取应用的签名
 */
function getCertificateSHA1Fingerprint() {
  //获取包管理器
  let pm = context.getPackageManager();

  //获取当前要获取 SHA1 值的包名,也可以用其他的包名,但需要注意,
  //在用其他包名的前提是,此方法传递的参数 Context 应该是对应包的上下文。
  let packageName = context.getPackageName();

  //返回包括在包中的签名信息
  let flags = PackageManager.GET_SIGNATURES;

  //获得包的所有内容信息类
  let packageInfo = pm.getPackageInfo(packageName, flags);

  //签名信息
  let signatures = packageInfo.signatures;
  let cert = signatures[0].toByteArray();

  //将签名转换为字节数组流
  let input = new ByteArrayInputStream(cert);

  //证书工厂类,这个类实现了出厂合格证算法的功能
  let cf = CertificateFactory.getInstance("X509");

  //X509 证书,X.509 是一种非常通用的证书格式
  let c = cf.generateCertificate(input);

  //加密算法的类,这里的参数可以使 MD4,MD5 等加密算法
  let md = MessageDigest.getInstance("SHA1");

  //获得公钥
  let publicKey = md.digest(c.getEncoded());

  //字节到十六进制的格式转换
  let hexString = byte2HexFormatted(publicKey);

  return hexString;
}

//这里是将获取到得编码进行16 进制转换
function byte2HexFormatted(arr) {
  let str = new StringBuilder(arr.length * 2);

  for (let i = 0; i < arr.length; i++) {
    let h = Integer.toHexString(arr[i]);
    let l = h.length;
    if (l == 1) h = "0" + h;
    if (l > 2) h = h.substring(l - 2, l);
    str.append(h.toUpperCase());
    if (i < arr.length - 1) str.append(":");
  }
  return str.toString();
}

参考

Android App运行时签名校验
各种签名(signature)和校验
签名校验破解过程
?

名人名言

思路是最重要的, 其他的百度, bing, stackoverflow, 安卓文档, autojs文档, 最后才是群里问问
— 牙叔教程

声明

部分内容来自网络
本教程仅用于学习, 禁止用于其他用途

bilibili

牙叔教程

微信公众号 牙叔教程

在这里插入图片描述

QQ群

747748653
在这里插入图片描述

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-22 13:39:10  更:2021-08-22 13:40:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 9:33:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码