android-apk解包打包

news2025/7/21 0:15:03

title: android-apk解包打包
categories: Android
tags: [android, 加壳]
date: 2022-09-28 10:29:51
comments: false
mathjax: true
toc: true

android-apk解包打包, 以下所有操作都需要在配置好 java 环境下进行


前篇

  • android apk解包和打包 - https://blog.csdn.net/u011435933/article/details/89555328
  • apk解包+修改源码+重新打包 修改Android端app教程 修改apk文件教程 - https://blog.51cto.com/u_15328720/3384769
  • apk解包修改后重新打包 (好文) - https://blog.csdn.net/qq_16692517/article/details/107220707
  • Android apk反编译,smali文件修改,重新打包 - https://blog.csdn.net/q610098308/article/details/105336399
  • java 反编译 修改smali和重新打包 (好文) - https://blog.csdn.net/weixin_28947723/article/details/115075813
  • 几种Android混淆和逆向工具介绍 - https://blog.51cto.com/u_15060511/4080326
  • Android反编译工具 apktool 、dex2jar、jd-gui、jadx的对比及使用 - https://zhuanlan.zhihu.com/p/389584833
  • https://developer.aliyun.com/article/534391
  • 相关工具下载
    • jd-gui 下载 - https://github.com/java-decompiler/jd-gui/releases
    • dex2jar - https://github.com/pxb1988/dex2jar
    • smali 与 baksmali 下载 - https://bitbucket.org/JesusFreke/smali/downloads/?tab=downloads
    • jadx - https://github.com/skylot/jadx/releases
    • apktool - https://bitbucket.org/iBotPeaches/apktool/downloads/
    • bundletool - https://github.com/google/bundletool/releases
      • 使用说明 - https://developer.android.com/studio/command-line/bundletool
    • AXMLPrinter2.jar - https://code.google.com/archive/p/android4me/downloads

反编译流程图


使用 apktool

  • 解包 apk

    $ java -jar -Duser.language=en -Dfile.encoding=UTF8 apktool.jar d [test_hi.apk] -o [test_hi]
    

    会将 test_hi.apk 解包到 test_hi 目录

  • 打包 apk

    $ java -jar -Duser.language=en -Dfile.encoding=UTF8 apktool.jar b [test_hi]
    

    test_hi 目录打包, 在 test_hi/dist 目录下生成 test_hi.apk

    • 打包完后需要 4 字节对齐

      $ zipalign -p -f -v 4 [test_hi.apk] [test_hi_align.apk]
      
      • 不对齐的情况下, 在 Android 11+ (R+, sdk 30+) 机子安装 apk 会报错: Failure [-124: Failed parse during installPackageLI: Targeting R+ (version 30 and above) requires the resources.arsc of installed APKs to be stored uncompressed and aligned on a 4-byte boundary]
    • 此时生成的 apk 需要签名一下, 否安装报错

      adb: failed to install test_hi.apk: Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES: Failed to collect certificates from /data/app/vmdl2044401184.tmp/base.apk: Attempt to get length of null array]
      

      签名参考 [签名 apk 包](#签名 apk 包)


踩坑

apk 文件夹编译 apk 报资源错误

错误: Error: Resource is not public

解决办法: 在 反编译 apk 时, 可以通过 -r 参数来避免resc的反编译,见下图。这样在打包的时候就不会重新编译 resc 文件包括 xml

参考: 反编译工具apktool使用问题 - https://www.jianshu.com/p/47a5511e17bf


使用 jadx 工具查看 apk (推荐)

  • GitHub - https://github.com/skylot/jadx/releases

  • 使用, 直接拖动 apk, jar 到工具即可

    image-20221020160031677


使用 smali 工具

使用的是 baksmali-2.2.2.jarsmali-2.2.2.jar

  • dex 解包出 smali

    $ java -jar baksmali-2.2.2.jar d [classes.dex] -o [myout]
    

    解出 classes.dex 的 smali 会生成到 myout 目录下

  • smali 打包成 dex

    java -jar smali-2.2.2.jar assemble [myout] -o [my_classes.dex]
    

    myout 目录打包成 my_classes.dex 文件


签名 apk 包

  • 命令

    $ java -jar apksigner.jar sign -verbose --v1-signing-enabled false --v2-signing-enabled true --ks [证书文件.jks] --ks-key-alias [证书别名] --ks-pass pass:[证书密码] --key-pass pass:[别名密码] --out [out_sign.apk] --in [in_unsign.apk]
    
    • 不能使用一下命令打包

      $ jarsigner -verbose -keystore [证书文件.jks] -storepass [证书密码] -signedjar [签名后输出文件.apk] [需要签名的文件.apk] [证书别名]
      

      安装在 安卓 11+ 机子上会报错: ERROR: Target SDK version 32 requires a minimum of signature scheme v2; the APK is not signed with this or a later signature scheme


dex 转 jar

dex2jar 和 jd-gui 只是查看源码的工具

  • 使用 dex2jar 工具

    $ d2j-dex2jar.bat [classes3.dex] --force -o [aaa.jar]
    dex2jar classes3.dex -> aaa.jar
    

jar 装 dex

  • 先 cd 到 android sdk 构建工具目录下, 实测 30- 的才可以使用以下的命令

    $ cd android_sdk\build-tools\30.0.3
    $ dx.bat --dex --output=C:\AndroidLib02.dex C:\JavaLab.main.jar
    
    
    
    

java 转 smali

  • Android Studio配置超实用java转smali插件 - https://blog.csdn.net/u011426115/article/details/112855820

java2smali 插件一款 Android Studio 上非常实用的插件。通过该插件可以将 Java或者Kotlin 的源文件转为 smali 文件。使用该插件可以方便我们做如下事情:

  1. 对比java源文件学习smali语法

  2. apk重打包过程中Smali插桩

使用插件

  1. plugins 中搜索 java2smali 安装, 然后重启 as

  2. 打开 java 代码, Build -> compile to smali

    image-20220929141600475


使用 jd-gui 查看 jar 代码 (不推荐)

  • 直接将 classes3-dex2jar.jar 拖入 jd-gui 即可

    image-20220928164212278

    使用 [使用 jadx 工具查看 apk](#使用 jadx 工具查看 apk) 会更好, 反编译后跟接近 源代码


Dex、Smali、Class、Java、Jar 之间的相互转换

工具

工具作用
javacjava------>class
ddxclass------>dex
baksmalidex------>smali
smalismali------>dex
dex2jardex------>jar(class的压缩包)
apktoolapk------>smali

Android源代码从编译到运行

  • java 转 class

    javac Test.java
    
  • class 转 dex

    ddx --dex --output=Test.dex Test.class
    
  • dex 转 smali

    java -jar baksmali.jar -o [输出文件夹] dex文件
    
  • smali 转 dex

    java -jar smali.jar -o 目标dex文件 [smali文件夹] 
    
  • dex 转 jar

    d2j-dex2jar.bat dex文件
    

aab 与 apk 互转

  • Android apk和aab互相转换 - https://blog.51cto.com/u_12300179/5267430

aab 转 apk

  • a

apk 转 aab

  • apk 转 aab - https://juejin.cn/post/6982111395621896229
    • GitHub - https://github.com/37sy/build_aab_tool
  • APK2AAB - https://github.com/sensei-z/APK2AAB

37 手游构建工具使用
  • apk 转 aab - https://juejin.cn/post/6982111395621896229

实测:

  • 加固后的 apk 构建 aab

    • 直接安装 aab, 命令: java -jar E:/bundletool-all-1.12.1.jar install-apks --apks=I:\base.apks

      闪退, 报错: Didn't find class "androidx.core.app.CoreComponentFactory"

    • 将 aab 解压出来的 apk, 运行正常

  • 未加固的 apk 构建 aab

    • 直接安装 aab, 报错找不到 libmain.so 动态库
    • 将 aab 解压出来的 apk, 运行正常

解决办法:

  • 在导出 apks 文件的命令中加入 --mode=universal 参数, 这样导出的 apks 无论是 加固 还是 不加固 的, 都能正常运行

aab签名

  • 37手游安卓团队 - apk转化aab格式 - https://juejin.cn/post/6982111395621896229

    • GitHub - https://github.com/37sy/build_aab_tool
  • 能使用 jarsigner 为 aab 签名。签名aab的时候不需要使用v2签名,使用JDK的普通签名就行。

    jarsigner -digestalg SHA1 -sigalg SHA1withRSA \
    -keystore luojian37.jks \
    -storepass ****** \
    -keypass ****** \
    base.aab \
    ******
    

AndroidManifest.xml 的 解码 编码

  • 还原AndroidManifest.xml明文的方法 - https://blog.csdn.net/wwt831208/article/details/54692561

  • 下载 AXMLPrinter2.jar - https://code.google.com/archive/p/android4me/downloads

  • xml2axml (不错的转换工具) - https://github.com/codyi96/xml2axml

    • xml to axml

      java -jar xml2axml-2.1.0.jar e [AndroidManifest-readable-in.xml] [AndroidManifest-bin-out.xml]
      
    • axml to xml

      java -jar xml2axml-2.1.0.jar d [AndroidManifest-bin-in.xml] [AndroidManifest-readable-out.xml]
      

命令行构建应用

  • 从命令行构建您的应用 - https://developer.android.com/studio/build/building-cmdline#bundletool-build

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

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

相关文章

(十五)Spring之面向切面编程AOP

文章目录基础环境AOP介绍AOP的七大术语切点表达式Spring的AOP的使用环境准备基于AspectJ的AOP注解式开发通知类型前置通知Before后置通知AfterReturning环绕通知Around异常通知AfterThrowing最终通知After关于JoinPoint切面的先后顺序通用切点表达式全注解式开发AOP基于XML配置…

9、前端笔记-CSS-CSS三大特性

三大特性:层叠性、继承性、优先级 1、层叠性(覆盖性) 给相同的选择器设置相同的样式,此时一个样式会覆盖(层叠)其他冲突的样式。 层叠性原则: 同一选择器,样式冲突,遵…

【SpringBoot】MVC配置解决跨域但仍然存在跨域

文章目录1. 跨域问题出现与解决1. 跨域问题出现与解决 检查SpringBoot中的MVC配置。 public void addCorsMappings(CorsRegistry registry) {//允许跨域访问资源定义registry.addMapping("/**")//(只允许本地的指定端口访问)允许所有.allowedOrigins("*")…

数据结构之线性表中的单链表【详解】

文章目录前言:一、单链表1.单链表和顺序表的优缺点2.单链表的概念和学习3.单链表的各个接口的实现(详解每一步)3.1.先铺垫一下大致的思路3.2.然后这边我们看一下我们大致要实现的函数有哪些3.3.接下来我们就开始实现这些代码,并且…

用信号量实现进程同步与互斥(含代码分析)

信号量简单的来说就是一个变量,代表着系统中互斥资源的数量,通常用原语来实现对信号量机制的操作。 一对原语:wait(S)也称为P操作,singnal(S)也称为V操作。S表示信号量 对于wait原语本身的内部逻辑代码如下(这里以一…

黑苹果外接显示器最优解决方案

黑苹果无法外接显示器 黑苹果外接显示器解决方案 先给解决方案 电脑端 > 安装 PC端 Duet Display买个二手电视盒子40块钱左右,还带电源电视盒子 > 安装安卓端 Duet Display(U盘安装就行)电视盒子 > 用鼠标开启开发者模式双头USB&…

SpringBoot SpringBoot 原理篇 1 自动配置 1.12 bean 的加载控制【注解式】

SpringBoot 【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】 SpringBoot 原理篇 文章目录SpringBootSpringBoot 原理篇1 自动配置1.12 bean 的加载控制【注解式】1.12.1 问题引入1.12.2 bean的加载…

【JVM技术专题】「原理专题」全流程分析Java对象的创建过程及内存布局

前言概要 对应过程则是:对象创建、对象内存布局、对象访问定位的三个过程。 对象的创建过程 对象的创建方式 java中对象的创建方式有很多种,常见的是通过new关键字和反射这两种方式来创建。除此之外,还有clone、反序列化等方式创建。 通过n…

CSS @property,让不可能变可能

本文主要讲讲 CSS 非常新的一个特性,CSS property,它的出现,极大的增强的 CSS 的能力! 根据 MDN -- CSS Property,property CSS at-rule 是 CSS Houdini API 的一部分, 它允许开发者显式地定义他们的 CSS 自定义属性&…

vue项目分环境配置打包处理

vue项目分环境配置打包处理 目录 vue项目分环境配置打包处理 本地环境配置 生产环境配置 打包处理 打包配置处理(扩展) 本地环境配置 定义需要的变量,这里定义了各种变量标识,可参考使用,自定义项目需要的变量&…

设计问卷调查有哪些技巧?

调查问卷可以很好地帮助我们进行市场调研,所以想要做出一份有效的调查问卷,首先要确定问卷的主题。明确的主题就是定基调,可以让我们的后续过程更加顺利。然后我们再开始进行题目的设置和问卷的设计等动作。不过,在问卷设计的过程…

【js】【爬虫】fetch + sessionStorage 快速搭建爬虫环境及各种踩坑

文章目录导读需求开发环境fetch介绍为什么选择fetchfetch的封装使用数据存储数据访问封装多页面处理方案数据过大,拆分处理参考资料导读 需求 一说爬虫,很多人都会向导python,不过,真正省心的方案,应当是通过js控制获…

Reactive源码分析

Reactive用来绑定引用数据类型, 例如对象和数组等,实现响应式。 Reactive API 接口 export function reactive<T extends object>(target: T): UnwrapNestedRefs<T>相关API包括readonly、createReactiveObject、shallowReadonly、isReactive、toReactive。源码运…

Eureka注册中心

文章目录一、认识服务提供者和服务调用者二、Eureka 的工作流程三、服务调用出现的问题及解决方法四、搭建 eureka-server五、注册 user-service、order-service六、在 order-service 完成服务拉取&#xff08;order 模块能访问 user 模块&#xff09;七、配置远程服务调用八、…

从入门到进阶!当下火爆的大数据技术及算法怎么还能不知道 一起来学习互联网巨头的大数据架构实践!

大数据被称为新时代的黄金和石油&#xff0c;相关技术发展迅猛,所应用的行业也非常广泛&#xff0c;从传统行业如医疗、教育、金融、旅游&#xff0c;到新兴产业如电商、计算广告、可穿戴设备、机器人等。大数据技术更是国家科技发展和智慧城市建设的基础。 当前“互联网”新业…

骨传导耳机是怎么传声的?骨传导耳机会伤害耳朵吗?

作为一个耳机发烧友&#xff0c;平时最喜欢的就是捣鼓耳机。这几年入手了几十款耳机&#xff0c;头戴式、入耳式、半入耳、有线无线都会接触一些来玩&#xff0c;其中还有骨传导耳机这个相对小众的款类。 说到骨传导耳机&#xff0c;我应该算是最早一批的用户了&#xff0c;很…

web网页设计—— 指环王:护戒使者(13页) 电影网页设计 在线电影制作 个人设计web前端大作业

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 文章目录一、网页介绍一…

数据结构-ArrayList解析和实现代码

arrayList结构的实现是数组结构&#xff0c;数组没有扩容机制&#xff0c;arrayList的扩容机制采用的是复制数组&#xff0c;了解你会发现ArrayList虽然实现比较简单&#xff0c;但是设计还是很巧妙的。咱们先来简单实现下.. 咱们看下定义的全局变量 1.默认初始化空间为10&am…

docker 安装 Jenkins

一、Jenkins 安装 增加挂载目录和权限 # 增加挂载目录和权限mkdir /workspace/jenkins_homechown -R 1000:1000 /workspace/jenkins_home/创建容器 docker run --name jenkins -d \ -p 9999:8080 \ -p 8888:8888 \ -p 50000:50000 \ -v /workspace/jenkins_home:/var/jenkins…

[附源码]java毕业设计智慧教室预约

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…