(原创)Android apk应用加固、字节对齐、二次签名全流程

news2024/11/26 0:48:49

这篇博客主要是讲如何对apk应用进行加固、对齐和签名的,会有详细的步骤逐一介绍

前言

随着各大加固工具都开始逐一收费后,个人开发中或者中小型企业如何对应用进行加固就成了一个问题。以前我常用的是360加固助手,虽然每天限制一定的免费次数,但起码能用。
可是最近它也提示我要强制更新,更新后,我要去设置签名,就变成了这样子:
在这里插入图片描述
结果我的测试,360加固工具现在虽然还能免费给你加固,但是加固后,你原来apk的签名就会丢失,也就是你要重新签名了。下面就来看下如何解决这个问题

加固

加固不用说,我这边用的还是360加固助手,
360加固官网
主界面如下:
在这里插入图片描述
点击“添加应用”把你的apk加入进来,或者直接拖进来,就可以进行加固操作,完成后我们就得到了一个被剥夺了签名但是已经加固了的apk

字节对齐

字节对齐的好处是帮助操作系统更高效率的根据请求索引资源,降低内存消耗。
Android SDK自带字节对齐工具zipalign,二次签名前,最好先进行字节对齐操作(一般为4字节对齐)。虽然Android Studio打包的apk是默认经过字节对齐的,但是由于经历过应用加固步骤,不能保证该应用中的数据还处于对齐状态,以防万一,再进行一次字节对齐操作。

第一步

要进行字节对齐,首先修改刚刚加固了的apk文件,把它的的后缀名为 .zip(其它压缩格式也可以,主要是为了用压缩软件打开该文件),修改完成后打开该文件,删除下图中红框选中的“META-INF”文件夹(该文件夹经过应用加固后,签名信息已经被删了,多了一些杂七杂八的文件,没什么用。如果不删除该文件夹,后续二次签名就无法成功);
在这里插入图片描述
删除成功后,将该文件的后缀名重新改为 .apk;

第二步

将该apk文件复制到zipalign工具所在目录
该工具位于sdk\build-tools\build版本目录下
一般选择你项目中使用到的版本的目录即可
我这边用的是30.0.3
在这里插入图片描述
上图所示,红框中的zipalign.exe即为字节对齐工具,ziptest.apk就是需要对齐的apk文件

第三步

在当前目录的地址栏中输入cmd,回车
进入到命令提示窗口
输入zipalign.exe -v -p 4 input.apk output.apk
(命令中的input.apk为需要对齐的apk文件名,output.apk为对齐完成后输出的apk文件名)
在这里插入图片描述

中间省略一大段运行中输出的代码…
在这里插入图片描述

如上图所示,运行结束,出现红框中的代码,表示字节对齐成功,同时可以在目录中看到多了个字节对齐成功后的apk文件,如下图所示:
在这里插入图片描述
这样,对齐就完成了
我们也可以通过命令验证下apk是否对齐
还是把要验证是否对齐的apk放到这个目录下,执行命令:

zipalign -c -v 4 apk名字

比如验证刚刚没有对齐的ziptest.apk

zipalign -c -v 4 ziptest.apk

输出结果为succesful就是代表对齐
FAILED就代表没有对齐
得到结果如下:
在这里插入图片描述

二次签名

完成了字节对齐,就要对apk重新进行签名了
签名工具SDK也是自带的,apksigner。该工具位于字节对齐工具同级目录lib的下一级,
如下图所示:
在这里插入图片描述
接下来要做的就是把我们对齐的apk和签名文件jks放入目录下
接着,在该路径下打开cmd窗口,输入命令:

java -jar apksigner.jar sign --ks key.jks --ks-key-alias releasekey output.apk

key.jks为签名文件,releasekey为签名文件的别名,output.apk为上图红框2所示的apk文件。
例如下图所示:
在这里插入图片描述
命令中的签名文件别名由于隐私原因,就隐藏了,大家替换成自己签名文件的别名即可。
如果命令行输入没有任何问题,会在下方显示输入Keystore密码的指令,如上图最后一行所示Keystore password for signer #1: (这里需要注意:输入密码的时候命令提示窗口是不会有任何字符显示的,估计是为了隐私安全,输入完成后直接Enter就行了)。
签名成功,在命令提示窗口不会有任何提示;反之则有错误提示。只需查看目录中的apk文件修改日期是否改变,例如下图所示:
在这里插入图片描述
时间较之前最初的,变成签名命令执行成功后的时间。想要确保签名成功,也可输入下述命令查看:

java -jar apksigner.jar verify -v output.apk

其中的output.apk为签名文件的文件名,签名成功结果如下图所示:
在这里插入图片描述
至此,从加固到二次签名整一个流程就结束了。
顺便推荐一个,爱加密的重签名工具,实现原理其实就是上面的。
这个工具可以避免手动输入上面哪些命令
在这里插入图片描述

不过我自己试了下,还是有问题,就是别名那块始终出不来
反正如果不能用这个工具,就按照我上面的步骤来做也是一样可以的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/596111.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

玖章算术荣获信通院“生成式人工智能技术和应用优秀案例”奖

5月31日,“杭州通用人工智能论坛”在杭州梦想小镇互联网村成功举办。本次会议由中国信息通信究院(以下简称中国信通院)、浙江省经济和信息化厅、杭州市人民政府、中国人工智能产业发展联盟等共同主办。 玖章算术获奖 玖章算术的 NineData 智…

git 使用ssh连接Github:017

1. 首先打开Git Bash终端,生成私钥和公钥:ssh-keygen 输入:ssh-keygen 之后, 会有三步提示,全部按回车建。 2. 进入主路径:cd ~/.ssh/ 进入这个路径之后,使用命令:ls 会看到两个文…

基于VMD-SSA-LSTM的多维时序光伏功率预测

目录 1 主要内容 变分模态分解(VMD) 麻雀搜索算法SSA 长短期记忆网络LSTM 2 部分代码 3 程序结果 4 下载链接 1 主要内容 之前分享了预测的程序基于LSTM的负荷和可再生能源出力预测【核心部分复现】,该程序预测效果比较好,并且结构比较清晰&#x…

.net 6.0图片转Base64部署到Linux系统上报The type initializer for ‘Gdip‘ threw an exception

在业务当中需要将图片文件转为Base64&#xff1a;windows上可以运行正常执行&#xff0c;部署到Linux系统上报The type initializer for ‘Gdip‘ threw an exception 图片转Base64代码如下 /// <summary> /// 图片转为base64编码的文本 /// </summary> /// <…

CMake深度解析:掌握add_custom_command,精通Makefile生成规则

CMake深度解析&#xff1a;掌握add_custom_command&#xff0c;精通Makefile生成规则 1. CMake简介与基础知识1.1 CMake的基本概念&#xff08;CMake Basic Concepts&#xff09;1.1.1 项目&#xff08;Project&#xff09;1.1.2 目标&#xff08;Target&#xff09;1.1.3 命令…

terminalworks ASP.NET Core PDF 浏览器-Crack

ASP.NET Core 的 PDF 查看器 terminalworks在 ASP.NET Core 网页或应用程序中添加可靠的 PDF 查看器的简单方法。 我们的 Web PDF 查看器基于经过验证和测试的 Mozilla PdfJS 解决方案&#xff0c;该解决方案在 Firefox 中用作默认 PDF 查看器。我们专门设计了我们的查看器&…

窄带高清技术之百万级并发下的演唱会直播细节修复

史无前例&#xff0c;高清又不卡。 5月&#xff0c;百视TV联合上海人民广播电台、时代峰峻共同出品的《东方风云榜》&#xff0c;绚烂呈现一场三十周年音乐分享会时代少年团《理想之途》。有人说&#xff0c;这是一场似梦非梦的记忆。 演唱会由“乐园”、“少年”、“乌托邦”三…

Pyside6-第四篇-QCheckBox复选框

今天是Pyside6的第四篇内容。一起来看复选框。 QCheckBox。 class QCheckBox(QAbstractButton):"""QCheckBox(self, parent: Optional[PySide6.QtWidgets.QWidget] None) -> NoneQCheckBox(self, text: str, parent: Optional[PySide6.QtWidgets.QWidget] …

爱尔眼科四川省区2023“集善扶困(贫)健康行”公益行动圆满收官

红原县地处青藏高原东部&#xff0c;位于四川省西北部、阿坝藏族羌族自治州中部&#xff0c;这里山原向丘状高原过渡&#xff0c;空气稀薄、气候偏冷、紫外线强&#xff0c;这里生活着大量藏族同胞。 这里地势出行不便医疗资源有限&#xff0c;青少年近视防控问题、中老年人的白…

CentOS的安装

Centos的安装 1.创建新的虚拟机2. 自定义3.下一步4.创建虚拟空白光盘5.安装Linux系统和Centos 7 发行版6.命名虚拟机名称和选择磁盘位置7.处理器配置 主要看自己的电脑的情况8.设置虚拟机内存9.网络设置 nat10.选择IO控制器类型11.选择磁盘类型12.创建新虚拟磁盘13.设置磁盘容量…

元宇宙 代价高昂的失败

一直以来我对GIS范围内3维及VR实用化持怀疑态度&#xff0c;觉得它就是个坑&#xff01;因此总被三维狂热者和同行批评。三维这种东西最大的优点是直观易于理解&#xff0c;但最大的坏处也是直观易于理解&#xff01;搞的很多外行也以为自己很了解这些技术&#xff0c;跟风起哄…

vue——实现数据懒加载(可视区域内才进行数据加载)——技能提升

昨天部门会议&#xff0c;领导提出一个需求&#xff0c;就是当一个前端页面有上百个图表或者其它元素&#xff0c;对应的接口有许多时&#xff0c;为了体验效果&#xff0c;不能一次性加载全部的数据&#xff0c;只有当元素滚动到可视区域内时&#xff0c;再进行相应接口的调用…

记录--Js基础练习题目

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 1.使用js&#xff0c;在页面中打印以下图案 提示&#xff1a; document.write可以在页面中打印内容<br>在html中代表换行, 在html中代码空格 for(var i0;i<7;i){// 空格部分for(var j7;j>…

chatgpt赋能python:Python代写群:帮你高效解决编程难题

Python代写群&#xff1a;帮你高效解决编程难题 Python代写群是一个专业的平台&#xff0c;为需要编程作业或项目的人提供高质量的服务。在这里&#xff0c;你可以找到有经验的Python工程师&#xff0c;帮你解决各种各样的编程难题。 为什么选择Python代写群&#xff1f; Py…

【JS】1699- 重学 JavaScript API - WebSockets API

❝ 前期回顾&#xff1a; 1. Page Visibility API 2. Broadcast Channel API 3. Beacon API 4. Resize Observer API 5. Clipboard API 6. Fetch API 7. Performance API 8. Web Storage API ❞ WebSockets API 提供了一种在客户端和服务器之间建立持久连接的机制&#xff0c;使…

基于轻量级YOLOv5n/s/m三款模型开发构建基于无人机视角的高空红外目标检测识别分析系统,对比测试分析性能

有关于无人机目标检测和红外场景下的目标检测的项目在我之前的文章中都有实践经历了&#xff0c;但是将无人机和红外场景结合的目标检测项目还是很少的&#xff0c;本文的核心想法就是基于高空无人机场景开发构建目标检测系统。 前面相关博文如下&#xff0c;感兴趣的话可以自…

Python潮流周刊#4:Python 2023 语言峰会

△点击上方“Python猫”关注 &#xff0c;回复“1”领取电子书 你好&#xff0c;我是猫哥。这里记录每周值得分享的 Python 及通用技术内容&#xff0c;本期是特别加更版&#xff0c;聚焦于 Python 官方 2023 年语言峰会的系列博客。 由于公众号不支持外链&#xff0c;文中大量…

JetBrains的PHP集成开发环境PhpStorm 2023版本在Win10系统的下载与安装配置教程

目录 前言一、PhpStorm 安装二、使用配置总结 前言 PhpStorm是一款专为PHP开发人员设计的集成开发环境&#xff08;IDE&#xff09;。它提供了丰富的功能和工具&#xff0c;可以帮助开发人员更高效地编写、调试和部署PHP应用程序。 PhpStorm的主要特点&#xff1a; ——代码…

硬件大熊原创合集(2023/04-05更新)

04-05月份更新篇章&#xff1a; NFC模块化设计方案 一款射频芯片的layout设计指导案例-篇章1 04月份娃出生&#xff0c;连续两个月需要处理的各种事情比之前多了很多&#xff0c;还好慢慢地适应了这种节奏&#xff0c;并且逐渐开始挖掘出属于个人的时间。 有天夜里抱着娃哄睡时…

NIO之Buffer解读

目录 Buffer 简介 Buffer 的基本用法 使用步骤 使用 Buffer 的例子 使用 IntBuffer 的例子 Buffer 的 capacity、position 和 limit capacity position limit Buffer 的类型 Buffer 分配和读写数据 Buffer 分配 向 Buffer 中写数据 flip()方法 从 Buffer 中读取数…