牙叔教程 简单易懂

测试环境

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

autojs用签名校验保护app相关推荐

  1. 安卓逆向_19( 一 ) --- APK保护策略【APP打开就崩溃 之 霸哥apk过签名校验】

    From:霸哥磁力搜索apk 过签名校验:https://www.cnblogs.com/LuLuLuHao/p/12863978.html 霸哥磁力搜索app回编签名:https://www.ssf ...

  2. 斗鱼APP签名校验绕过

    转载自:http://www.secbuff.com/ios/215.html?d=3 0×00 说明 斗鱼是自己非常喜欢的一家直播平台,由于经常在斗鱼看lol比赛,加上又是武汉的互联网企业,所以就逆 ...

  3. 安卓逆向_19( 二 ) --- APK保护策略【重新签名后安装打开失败 --- 书旗小说.apk、浦发银行.apk的过签名校验【so 文件修改保存】】

    From( 书旗小说过签名校验 [ 使用 DDMS 分析方法调用流程 ] ):https://www.cnblogs.com/LuLuLuHao/p/12874468.html 签名校验一般步骤: 1 ...

  4. 安卓逆向_18 --- APK保护策略【Java代码混淆、资源混淆、签名校验】

    Java 代码混淆介绍:https://www.bilibili.com/video/BV1UE411A7rW?p=60 Android 反编译利器 jadx:GitHub上直接下载:https:// ...

  5. app运行时签名校验

    有时候我们为了防止自己的应用被反编译后重新打包,不得不采取运行时进行签名校验的方式. 因为会经常用到,所以在这里整理了一下校验方式. public class SignCheck {private C ...

  6. Android App运行时签名校验

    有时候我们为了防止自己的应用被反编译后重新打包,不得不采取运行时进行签名校验的方式. 因为会经常用到,所以在这里整理了一下校验方式. public class SignCheck {private C ...

  7. 安卓逆向_19( 二 ) --- APK保护策略【重新签名后安装打开失败 --- 书旗小说.apk、浦发银行.apk的过签名校验【so 文件修改保存】】...

    From( 书旗小说过签名校验 [ 使用 DDMS 分析方法调用流程 ] ):https://www.cnblogs.com/LuLuLuHao/p/12874468.html 签名校验一般步骤: 1 ...

  8. 【安卓逆向】 浦X银行签名校验,逆向工程师绝不认输

    前段时间有个朋友联系到我 说有家安全公司招聘(哪家公司我就不说了) 但是面试题目第一题就难着了 这我哪儿能忍 直接干! 拿到app的时候我心凉了一下 这他妈银行我搞个锤子 但是逆向工程师绝不认输! 不 ...

  9. iOS签名校验那些事儿

    导读:iOS签名校验机制是苹果生态安全的基础,日常工作中无论是开发阶段还是测试阶段常常会遇到很多需要通过签名机制解决的问题,了解iOS签名机制的原理有助于提高我们解决相关问题的成本和效率.本文首先介绍 ...

最新文章

  1. Python实现HTTP服务器(四)单进程线程非阻塞实现多任务
  2. 屠杀机器人和无处不在的监控:AI是我们最大的生存威胁?
  3. ImportError: libclntsh.so.11.1: cannot open shared object file: No such file or directory解决方案
  4. linux vi-vim编辑器快捷键
  5. 厉害了,苹果爸爸承认让旧 iPhone 变慢!
  6. .net 面试题 (1)
  7. paip.url参数格式化.txt
  8. cocostudio html5,Cocostudio的简单使用:
  9. 桌面无计算机 win10,win10雨木林风系统桌面无计算机图片的处理办法
  10. 怎么手写 xpath
  11. Python字符串:isspace、istitle、isupper、islower
  12. 自定义Behavior
  13. 学习篇之数据分析库pandas
  14. 无法连接虚拟设备ide1:0,因为主机上没有相应的设备。您要在每次开启此虚拟机时都尝试连接此虚拟设备吗?
  15. 年轻人还记得KCP吗?什么是KCP,怎么使用呢!!!
  16. DevOps 到底是什么到底是什么
  17. 餐饮企业转型为大数据公司
  18. 好友列表页面java_怎样制作QQ好友列表的界面?
  19. Unity插件:UFPS
  20. pyqt5 地图可视化 网页地图 folium

热门文章

  1. DMS、RDS、OLAP简介
  2. windows下载7z
  3. 泰晤士计算机排名2018,2018泰晤士Times世界大学排名:全球1000所大学完整排行榜...
  4. Windows server远程桌面配置【只需两步的极简快速版】
  5. 用友T3普及版安装步骤
  6. 学习日志(10.21)
  7. 2022年上半年系统集成项目管理工程师综合知识真题及答案解析
  8. Github 开源:使用 .NET WinForm 开发所见即所得的 IDE 开发环境(Sheng.Winform.IDE)【2.源代码简要说明】
  9. 安徽省2018工程计价电子版_2018安徽省装饰工程计价定额.pdf
  10. 2014计算机基础知识试题及答案,2014计算机基础知识试题及答案解析.doc