APK的反编译,签名,对齐

news2024/12/25 2:18:34

APK的反编译,签名,对齐 – WhiteNight's Site

2023年9月22日

标签:Android, 应用开发

记录下相关的命令行参数。

APK的打包与解包

java -jar apktool.jar

首先,需要一个jar包,以我在用的为例:apktool_2.8.1.jar。并且你的机子要有java环境。为了方便操作,我把所有需要用到的工具都放同一个文件夹内,这里先放上集齐了三相之力(apktool,apksigner,zipalign)的图片

再来说下前情提要:我已经受够了某些应用的开机摇一摇广告,还有那种把“×”放的奇小无比的坑人广告。所以就开始自学Android的反编译。

其中,假设要对demo.apk解包,那么需要用到该指令(CMD):

java -jar apktool_2.8.1.jar d demo.apk -o test

解包完成后,在test文件夹中就能看到反编译的结果了。如果反过来,把反编译的APK重新打包回去的话,需要用到以下指令:

java -jar apktool_2.8.1.jar b test -o demo_repackage.apk

不过这么做还不够,要想在手机上安装重打包的apk还需要进行签名。

APK的对齐

zipalign

在签名之前,建议下个Android Studio,跟着网上步骤安装就行。不过安装SDK的时候记得翻墙,不然大概率下载失败。

在签名之前,APK还需要对齐,不然在Android 11及以上的版本会装不上报错。对齐的话则需要用到zipalign。这东西在安装Android Studio的时候就会自带在build_tool文件夹下。

对齐apk的话要用到该指令,如果对已经有签名的apk对齐的话,记得重新打一次签名。

zipalign -f -v 4 infile.apk outfile.apk
zipalign -c -v 4 outfile.apk //查看APK是否对齐

APK的签名

apksign与keytool

要签名的话,需要用到keytool和apksigner。前者在安装java环境的时候一般来说会自带,可以CMD输入keytool看看能不能正常运行。

而后者在安装java环境的时候可能自带,也可能没有。我就属于后者。但这个工具在Android Studio里头安装SDK的时候自带了,路径一般为:

(你选择安装SDK的文件夹)\build-tools\34.0.0\lib

而生成签名,需要先通过keytool生成签名文件.keystore。比如这里生成了一个密钥库密码为123456(该密码最少要六位,也可以自己设置)的签名文件,这个密码后面还要用到。

keytool -genkey -v -keystore adam.keystore -alias adam -storepass 123456 -keypass 123456 -keyalg RSA -validity 36000

接下来就是通过apksigner给apk签名了

apksigner sign --ks adam.keystore --ks-key-alias adam demo_repackage.apk

签完名后就可以扔回手机了,能安装就算OK。

写者注

有的APK在反编译前,建议先扔进模拟器或者虚拟机里看看能不能跑。比如我在弄的这个A.apk,扔进模拟器本身就无法启动,只能扔进真机环境里面跑。搞得我还以为是我反编译哪一步出错了。

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

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

相关文章

EasyWindow - Android 悬浮窗框架

官网 https://github.com/getActivity/EasyWindow 项目介绍 本框架意在解决一些极端需求,如果是普通的 Toast 封装推荐使用 Toaster 集成步骤 如果你的项目 Gradle 配置是在 7.0 以下,需要在 build.gradle 文件中加入 allprojects {repositories {/…

@DateTimeFormat 和 @JsonFormat 的详细研究

关于这两个时间转化注解,先说结论 一、介绍 1、DateTimeFormat DateTimeFormat 并不会根据得到其属性 pattern 把前端传入的数据转换成自己想要的格式,而是将前端的String类型数据封装到Date类型;其次它的 pattern 属性是用来规范前端传入…

jenkins自动化部署springboot、gitee项目

服务器需要安装jdk11、maven、gitee 1. jenkins安装 # yum源 sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo # 公钥 sudo rpm --import https://pkg.jenkins.io/redhat/jenkins.io-2023.key # 安装 yum install jenkins如果yum源报…

java内嵌浏览器CEF-JAVA、jcef、java chrome

java内嵌浏览器CEF-JAVA、jcef、java chrome jcef是老牌cef的chrome内嵌方案,可以进行java-chrome-h5-桌面开发,下面为最新版本(2023年9月22日10:33:07) JCEF(Java Chromium Embedded Framework)是一个基于…

Websocket集群解决方案以及实战(附图文源码)

最近在项目中在做一个消息推送的功能,比如客户下单之后通知给给对应的客户发送系统通知,这种消息推送需要使用到全双工的websocket推送消息。 所谓的全双工表示客户端和服务端都能向对方发送消息。不使用同样是全双工的http是因为http只能由客户端主动发…

如何借用敏捷实现IT对数字化转型支持 | 2023佛山敏捷之旅成功举办

9月17日,2023年佛山之旅暨DevOps Meetup在佛山圆满落幕。本次大会以助力大湾区金融和互联网企业敏捷DevOps实施和效能提升为主题,吸引了150余位来自各地的金融和互联网企业相关从业人员齐聚一堂,共同探讨行业最佳实践、最新发展趋势以及最新应…

flask_apscheduler实现定时推送飞书消息

需求场景: 实现一个flask服务,通过接口控制一个定时任务任务(对酒店订房情况进行检查)的开启和停止。要求定时任务完成后,可以通过飞书机器人推送任务完成的消息。 展现效果: 启动定时任务 关闭定时任务…

聊聊wireshark的进阶使用功能 | 京东云技术团队

1. 前言 emmm,说起网络知识学习肯定离不来wireshark工具,这个工具能够帮助我们快速地定位网络问题以及帮助正在学习网络协议这块的知识的同学验证理论与实际的一大利器,平时更多的只是停留在初步的使用阶段。也是利用部门内部的网络兴趣小组…

Webpack使用plugin插件自动在打包目录生成html文件

我们使用html-webpack-plugin插件可以自动在打包代码目录生成html文件 使用步骤: 一、安装依赖 在控制台中输入如下代码: npm i -D html-webpack-plugin 二、在webpack.config.js中配置插件 const HTMLPlugin require("html-webpack-plugin&q…

Activiz 9.2 for Linux Crack

Activiz 9.2 在 C#、.Net 和 Unity 软件中为您的 3D 内容释放可视化工具包的强大功能。 ActiViz 允许您轻松地将 3D 可视化集成到您的应用程序中。 ActiViz 功能 用 C# 封装的 3D 可视化软件系统 允许在 .NET 环境中快速开发可投入生产的交互式3D 应用程序 支持窗口演示基础 (…

VS2015没有“Win32控制台应用程序”模块

发现问题 成功安装VS2015专业版之后(安装期间遇到“安装包缺失或损坏的问题”,参考安装VS2015时提示“安装包丢失或损坏”成功解决),由于它没有在桌面创建快捷方式,于是我在“开始”处找到与VS2015有关的图标&#xf…

设置github的默认分支

设置github的默认分支 更换默认分支默认分支的作用 更换默认分支 之前默认的分支想main, 现在想更换默认的分支 点击main, 可以看到有两个分支: main和gpuVersion, 可以看到这里默认main分支为default 如果想设置gpuVersion作为default,可以点击View all branches, 进入下一个…

【校招VIP】前端计算机网络之HTTP和HTTPS

考点介绍: 为了解决HTTP协议的缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL/TLS协议,SSL/TLS依靠证书来验证服务器的身份,并为浏…

流媒体及直播相关知识

文章目录 前言一、流媒体1、基本概念2、流式传输3、流媒体技术原理4、流媒体传输模式5、H.264 流媒体传输系统框架 二、直播1、直播中使用的流媒体协议2、直播的模块划分3、视频直播流程①、推流到服务器②、服务器流分发 前言 本文主要讲解流媒体及其直播相关知识&#xff0c…

Linux 线程属性相关函数

pthread_attr_t就是对应线程的属性 /*#include <pthread.h>int pthread_attr_init(pthread_attr_t *attr);初始化线程属性变量int pthread_attr_destroy(pthread_attr_t *attr);释放线程属性资源int pthread_attr_getdetachstate(const pthread_attr_t *attr, int *deta…

无人机“长坡”上,谁是滚出“厚雪球”的长期主义者?

“股神”巴菲特&#xff0c;曾提出过“长坡厚雪”的理论&#xff1a; 人生就像滚雪球&#xff0c;重要的是发现很湿的雪和很长的坡。 运用到企业经营上&#xff0c;“长坡”指的是企业所布局的领域发展潜力足、空间大&#xff1b;而“湿雪”&#xff0c;指的是企业竞争力强、…

Flowable主要子流程介绍

1. 内嵌子流程 &#xff08;1&#xff09;说明 内嵌子流程又叫嵌入式子流程&#xff0c;它是一个可以包含其它活动、分支、事件&#xff0c;等的活动。我们通常意义上说的子流程通常就是指的内嵌子流程&#xff0c;它表现为将一个流程&#xff08;子流程&#xff09;定…

发送实时音频数据到udp服务

由于浏览器不能直接连接udp服务&#xff0c;所以需要搭建一个websocket服务做中转&#xff0c;让websocket服务连接udp服务 1、vue开发获取实时音频数据并按4096分包后添加rtp协议头发送到websocket服务&#xff08;连接websocket自行编写连接到127.0.0.1:8889&#xff09; da…

代码随想录算法训练营 动态规划part06

一、完全背包 卡哥的总结&#xff0c;还挺全代码随想录 (programmercarl.com) 二、零钱兑换 II 518. 零钱兑换 II - 力扣&#xff08;LeetCode&#xff09; 被选物品之间不需要满足特定关系&#xff0c;只需要选择物品&#xff0c;以达到「全局最优」或者「特定状态」即可。 …

uni-app, 实现 scroll-view 自动滚动到底部,并控制触发频率

实现思路 通过 scroll-view 组件的 scroll-top 属性可以设置容器竖向滚动条位置 属性名Valuescroll-y允许纵向滚动scroll-top设置竖向滚动条位置 想要实现 scroll-view 滚动到底部&#xff0c;只需要让 scroll-top scroll-view 内容高度 - scroll-view 容器本身高度&#…