当前位置: 首页 > news >正文

apk反编译和重新打包流程

1.工具准备

        a.jdk下载,添加“...\jdk\bin”到系统环境变量  Java Downloads | Oracle
        b.下载apktool.jar   Apktool - A tool for reverse engineering 3rd party, closed, binary Android apps.

2.反编译   

    java  -jar  apktool_2.6.1.jar (拖入你的apktool)  d   +(拖入你的.apk)

    格式为:java  -jar  apktool的名字  d(反编译)  要解包的apk  -o(输出)  文件名

反编译出来的文件目录

其中,res文件夹中存放着该app所有的资源(xml,布局文件和图片);smali文件中存放的是app的所有代码,但代码是smali语言格式,smali语言是Android虚拟机所使用的寄存器语言。还有就是 Androidmanifest.xml功能清单文件一目了然,可以直接查看。
注意: 1.将apk文件重命名为.zip格式并解压,androidmanifest会出现乱码;
        2.解压后,classes.dex文件中存放在着所有代码,但需要用特殊工具(dex2jar\jd-gui)进行查看,解压操作一般用于获取资源图片快捷
        3.如果就查看代码而言,你可以用jadx工具直接导入apk查看源码
如果你能看懂smali语言,可以修改smail中的一些静态成员变量,这里简单对androidManifest.xml某个activity做修改,然后重新打包

 

3.重新打包  

java -jar .\apktool.jar b .\打包的文件夹\
   格式为: java  -jar  apktool的名字  b(打包)  要打包的文件夹名字
重新打包后,反编译目录下会出现dist目录以及其中未签名的apk文件

 

4.生成签名证书(造一个简单签名文件)

 keytool -genkey -alias testalias -keyalg RSA -keysize 2048 -validity 36500 -keystore test.keystore
格式   36500 :100年 ; test.keystore :签名后的文件名
  填写密码,对应名称(记住密码,没记住就重造一个文件)
  随时查看证书    keytool -list -v -keystore test.keystore  
        Enter keystore password: //输入密码,回车

 

5.签名:

jarsigner -verbose -keystore E:\反编译\test.keystore  -signedjar  shop111.apk E:\反编译\shop-release\dist\shop-release.apk  testalias
格式: jarsigner -verbose -keystore 签名 -signedjar  签名文件后的文件名 需要签名文件  证书里alias别名

 

6.遇到问题:

1.jarsigner不是内部命令?
        重装jdk,确保安装目录bin里有jarsigner.exe
2.  [INSTALL_FAILED_INVALID_APK: Failed to extract native libraries?安装不能提取native库
    a.回到AndroidManifest.xml中,把android :extractNativeLibs="false"改为true(工程对so库进行压缩,安装时解压)重新打包
    b.如果原因是由于apktool在回编译apk包是没有进行内存对齐,可以使用zipalign工具再次对齐已经签名后的apk
​​​​​​​

 

参考链接:
jdk下载和环境变量配置
apk反编译命令解释
反编译后查看源码

相关文章:

  • Spring Security -- 前后端分离时的安全处理方案
  • 使用HttpServlet和@WebServlet注解
  • Arthas使用指北——命令、原理及案例
  • 简历撰写——Java与.NET(当年毕业生版本)
  • zookeeper知识点扫盲
  • UE5学习笔记 判断物体是否在相机视野内
  • 移动安全实战分享
  • Springboot操作mongodb的两种方法:MongoTemplate和MongoRepository
  • 流畅的Python读书笔记-第九章-符合Python风格的对象
  • S0011基于51单片机DS18B20温控风扇仿真设计
  • express演示前端解决跨域的方法jsonp、cors
  • SCA Sentinel 分布式系统的流量防控(二)
  • 姿态分析开源工具箱MMPose安装及使用示例(2d face landmark detection)
  • Java8中anyMatch()、allMatch()、noneMatch()用法详解
  • 【SpringMVC】SpringMVC实现转发和重定向
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • Javascripit类型转换比较那点事儿,双等号(==)
  • Java知识点总结(JavaIO-打印流)
  • js面向对象
  • Twitter赢在开放,三年创造奇迹
  • 前端面试总结(at, md)
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 使用agvtool更改app version/build
  • 数据结构java版之冒泡排序及优化
  • 用jQuery怎么做到前后端分离
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • 通过调用文摘列表API获取文摘
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​TypeScript都不会用,也敢说会前端?
  • ​低代码平台的核心价值与优势
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #WEB前端(HTML属性)
  • (27)4.8 习题课
  • (4)logging(日志模块)
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (MATLAB)第五章-矩阵运算
  • (WSI分类)WSI分类文献小综述 2024
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (六)vue-router+UI组件库
  • (强烈推荐)移动端音视频从零到上手(下)
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (转载)Google Chrome调试JS
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .Net Core与存储过程(一)
  • .Net IE10 _doPostBack 未定义
  • .net 程序发生了一个不可捕获的异常
  • .net 简单实现MD5
  • /etc/sudoer文件配置简析