linux反编译apk_反编译apk工具

linux反编译apk_反编译apk工具[TOC]今日需参考ROM厂商部分APK,故查阅走坑以做记录资源文件如参考图片、布局之类,可以直接将APK解压出来的目录结构如下:├──AndroidManifest.xml├──META-INF│├──CERT.RSA│├──CERT.SF│└──MANIFEST.MF├──res│├──anim│├──animator│├─


Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

[TOC]
今日需参考ROM厂商部分APK,故查阅走坑以做记录

工具

除了参考资源有时候需要参考别人的代码,此时需要做以下准备工具(自备梯子)

工具 作用 下载地址
ApkTool Goolge官方提供的APK反编译工具十分强大, 是以下几个工具的综合体 https://ibotpeaches.github.io/Apktool/install/
dex2jar 将dex文件转为jar包及.class文件 https://github.com/pxb1988/dex2jar
baksmali.jar 将Odex文件转为Dex文件 https://bitbucket.org/JesusFreke/smali/downloads
smali.jar 将.smali文件重新打包转为Dex文件 https://bitbucket.org/JesusFreke/smali/downloads
JD-GUI jar\dex.smali源码查看工具(收费及30天试用) http://jd-gui-for-linux.apponic.com/download/
JAVA 环境 null

以上工具ApkTool分ubuntu及windows版本请区别下载,其余无差。工具的安装配置及环境不作赘述,ubuntu的话注意某些权限配置就行。

反编译资源文件

如参考图片、布局之类,可以直接将APK解压出来的目录结构如下:

├── AndroidManifest.xml
├── META-INF
│   ├── CERT.RSA
│   ├── CERT.SF
│   └── MANIFEST.MF
├── res
│   ├── anim
│   ├── animator
│   ├── color
│   ├── drawable
│   ├── layout
│   └── xml
└── resources.arsc

直接解压获取到res目录如果是加壳了的,得到的xml文件内容会乱码,图片可用。此时用ApkTool处理apktool d -f flyme-res_temp.apk, 然后会在同级目录生成同名文件夹,xml资源全暴露包括Manifest。

反编译源码文件

有兴趣者可以直接使用ApkTool来反编译,对照下最后的结果瞅瞅 =。=

1.拿到dex文件

  • 普通apk
    直接解压或者使用ApkTool工具反编译得到如下目录, 没错就是那个classes.dex文件
├── AndroidManifest.xml
├── assets
├── classes.dex
├── META-INF
│   ├── CERT.RSA
│   ├── CERT.SF
│   └── MANIFEST.MF
├── res
└── resources.arsc
  • 厂商预置apk
    以下以系统预置的SystemUI.apk为例
 adb root
 adb remount
 adb pull /system/priv-app/XXX /某个目录
 //获取到如下目录
 SystemUI
 ├── lib
 │   └── arm64
 │       └── libnative_glrenderer.so
 ├── oat
 │   └── arm64
 │       └── SystemUI.odex
 └── SystemUI.apk

这里需要把SystemUI目录导出来不止是apk文件,原因是由于厂商预置的apk资源和代码文件是分开的,即资源是放到.apk文件中,代码是放到对应.odex文件中。另外,由于系统apk或是预置apk会有依赖ROM的framework.jar和framework-res.apk及其他jar包,所以需要将这几个包也导出来,为避免遗漏,可将整个目录导出来adb pull /system/framework /某个目录。获取到预置或者系统的apk后,最后我们想要得到的是.odex文件。但是odex文件和dex文件是有区别的,详请自查。所以我们需要将odex文件转为dex文件。
– .odex to .smali
将依赖的odex包、jar包、oat文件放到同一个目录下执行java -jar baksmali.jar x XXX.odex,此时将会在同级目录下生产out目录省略如下

├── android
│   └── support
│       ├── annotation
│       │   ├── CallSuper.smali
        ~
│       │   └── StringDef.smali
│       ├── v4
│       │   ├── app
│       │   │   ├── BackStackState$1.smali
                ~
│       │   │   └── FragmentTabHost$SavedState.smali
│       │   ├── graphics
│       │   │   └── ColorUtils.smali
│       │   ├── media
│       │   │   ├── MediaDescriptionCompat$1.smali
                ~
│       │   ├── os
│       │   ├── util
│       │   ├── view│            
│       │   └── widget
│       └── v7
~

可以看到反编译解析出来的都是.smali文件,其实对于高手smali文件就可以看出很多东西了,具体请移步google*smali语法*
– .smali to .dex
此时需要将.smali文件重新打包成jar或是dex,执行java -jar smali.jar as out/,该指令是讲将out目录下的smali文件重新打包回dex文件,会生成名为out.dex的文件

2.将dex文件转为jar

将dex2jar-2.0解压得到如下目录

├── d2j-baksmali.bat
├── d2j-baksmali.sh
├── d2j-dex2jar.bat
├── d2j-dex2jar.sh
├── d2j-dex2smali.bat
├── d2j-dex2smali.sh
├── d2j-dex-recompute-checksum.bat
├── d2j-dex-recompute-checksum.sh
├── d2j_invoke.bat
├── d2j_invoke.sh
├── d2j-jar2dex.bat
├── d2j-jar2dex.sh
├── d2j-jar2jasmin.bat
├── d2j-jar2jasmin.sh
├── d2j-jasmin2jar.bat
├── d2j-jasmin2jar.sh
├── d2j-smali.bat
├── d2j-smali.sh
├── d2j-std-apk.bat
├── d2j-std-apk.sh
├── lib
│   ├── antlr-runtime-3.5.jar
│   ├── asm-debug-all-4.1.jar
│   ├── d2j-base-cmd-2.0.jar
│   ├── d2j-jasmin-2.0.jar
│   ├── d2j-smali-2.0.jar
│   ├── dex-ir-2.0.jar
│   ├── dex-reader-2.0.jar
│   ├── dex-reader-api-2.0.jar
│   ├── dex-tools-2.0.jar
│   ├── dex-translator-2.0.jar
│   ├── dex-writer-2.0.jar
│   └── dx-1.7.jar
└──out.dex 我们源dex文件

.bat为windows命令格式,.sh为linux格式。此时需要将必要的几个文件赋权限

sudo chmod +x d2j_invoke.sh
sudo chmod +x out.dex
sudo chmod +x d2j-jar2dex.sh

若无权限会报错./d2j-dex2jar.sh: 36: ./d2j-dex2jar.sh: ./d2j_invoke.sh: Permission denied
然后执行./d2j-dex2jar.sh out.dex就会在当前目录生成dex2jar out.dex -> ./out-dex2jar.jar即得到我们需要的jar包

3.JD-GUI导入jar查看源码

JD-GUI导入jar

更新:2016.12.15
以上.
写文不易 转载注明 http://www.jianshu.com/users/b98475c0edcf/latest_articles
qqq

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/192111.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • source insight3.5注册码_source insight3.5注册码

    source insight3.5注册码_source insight3.5注册码安装程序下载在官网上下载SourceInsight4.0的安装程序.30天的试用安装首次启动选择授权方式,这里选择第二个选项,30天试用。image.png点击下一步,输入名称、公司或组织名称、邮箱信息,申请30天的试用。输入完成后,点击下一步,直到安装完成。修改sourceinsight4.exe用16进制编辑器(sublimetext)打开sour…

    2022年10月4日
  • 重磅!2021年国内Java培训机构排名十强出炉啦!

    重磅!2021年国内Java培训机构排名十强出炉啦!在IT行业当中,Java是最受欢迎的编程语言之一,作为最早出现的编程语言至今都没有倒下,可以说是YYDS!近年来学习Java的小伙伴也是越来越多,通过参加培训的方式来学习Java技术是最快最有效的方法。如今Java培训机构多如牛毛,到底该怎么选呢?下面小编就给大家发布2021年Java培训机构排名十强的名单来供大家参考:1、动力节点(http://www.bjpowernode.com/)动力节点是Java培训界“口口相传的Java黄埔军校”,成立至今12年,专注Java培训事业,为学员提供更.

    2022年7月7日
  • 探寻京东云核心竞争力的源泉「建议收藏」

    探寻京东云核心竞争力的源泉「建议收藏」云计算服务提供商的核心竞争力有哪些?除了技术、产品与服务之外,基础设施亦是不可忽视的一大因素。之所以会如此,是因为云计算是一个堪称“三高”的市场:高技术壁垒、高投资投入、高市场增长,云服务提供商需要保持长期投入,通过规模效应来实现成本优势,从而吸引更多用户采用其相关服务与产品。数据中心等基础设施的建设是云服务提供商实现持续成长的关键所在。数据不会骗人。根据咨询机构SynergyRese…

    2022年10月8日
  • WDA问题混总

    WDA问题混总文章目录unabletoaccessDB:WebDriverAgentLibcodesign失败WebDriverAgentLibcodesignfailure.unabletoaccessDB:多个xcode线程在跑,杀掉xcode,杀掉xcodebuild进程,cleanWebDriverAgentLibcodesign失败环境:mac10.14.5xcode10.3报错:CommandCodesignfailedwithano

    2022年7月12日
  • python廖雪峰学习笔记[通俗易懂]

    python廖雪峰学习笔记[通俗易懂]Python基础知识自用

    2022年10月24日
  • Spug – 轻量级自动化运维平台

    Spug – 轻量级自动化运维平台Spug-轻量级自动化运维平台对于中小型企业而言,进行主机和应用的管理是比较麻烦的,应用部署往往需要直接连接服务器,再进行手动的环境配置、代码拉取、应用构建和部署发布等工作,容易出错,且耗时费力。一个好的自动化运维平台,往往能大大节省人力物力,提高开发部署效率。Spug,正是一个面向中小型企业设计的轻量级自动化运维平台。Spug自动化运维平台简介Spug,是openspug在Github上开源的自动化运维平台,项目位于https://github.com/openspug/spug,

    2022年5月17日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号