Ubuntu环境下Android反编译apk教程

1. 前言

        在工作中,当开发某个功能,或者通过对比两个apk的表现形式不同,想看看这个apk中的内部文件,无奈只是一个纯apk,而且不是自己开发的,又没有源码,那怎么办呢?这个时候你就需要用到反编译,好了,本篇文章来讲一下Ubuntu下反编译环境的安装和步骤。

2. 工具

        反编译apk,我们需要如下3个开发工具:Apktool   dex2jar   jd-gui

        Apktool : 这个工具是用来反编译apk中的资源文件,如res,AndroidManifest.xml等

        dex2jar :    这个工具是用来反编译apk的代码

        jd-gui   :  这个用来查看代码的工具

2.1 apktool

官网下载地址:https://ibotpeaches.github.io/Apktool/install/

我们是Ubuntu开发环境,当然下载Linux版本的,如下:

 Installation for Apktool

  • Linux:
    1. Download Linux wrapper script (Right click, Save Link As apktool)
    2. Download apktool-2 (find newest here)
    3. Rename downloaded jar to apktool.jar
    4. Move both files (apktool.jar & apktool) to /usr/local/bin (root needed)
    5. Make sure both files are executable (chmod +x)
    6. Try running apktool via cli

按照上面的描述,我们一步一步操作

1.  第一步下载是apktool脚本执行文件,需要VPN翻墙才能下载到,文章结尾会把需要的工具统一打包共享出来

2.  下载最新的apktool_x.x.x.jar 包
3.   把下载的jar包重命名为 apktool.jar
4. 把apktool 脚本文件 和 apktool.jar 这两个文件拷贝到 /usr/local/bin 下(root权限)

5.   给这两个文件添加可执行权限

最后结果如下:

工具安装完成后,我们开始反编译apk,然后查看里面的资源文件

步骤一: 把需要反编译的apk放置某个文件夹中,终端命令进入到该目录,执行

apktool d test.apk

   d就是decode解码的意思

apktool d  test.apk -o <dir> 

    -o  是output,代表输出目录

    该命令可用于指定反编译后文件的存储位置,其中<dir>表示目标存储位置

如果遇到这样的错误:Destination directory  already exists. Use -f switch if you want to overwrite it.,表示你所指定的目录已存在,可以改用命令:

apktool d -f  test.apk -o <dir> 

      -f 是force 表示强制覆盖

执行过程如下:

 成功后,会在同目录下生成一个test文件夹

步骤二: test文件夹中所有的资源文件都是可以查看的,不是乱码

字符串:

AndroidManifest.xml:

2.2 dex2jar

        工具下载地址:dex2jar - Browse Files at SourceForge.net

    把下载最新的dex2jar-x.xzip包解压到当前目录, 找到目标的脚本文件 d2j-dex2jar.sh

        接下来我们在反编译apk代码:

步骤一: 我们把test.apk 后缀名修改为 test.zip, 然后解压到当前目录

 打开test文件夹,有个classes.dex 该文件中存放的就是java代码

 步骤二: 接下来将classes.dex文件拷贝到d2j-dex2jar的解压目录下,执行命令

sh d2j-dex2jar.sh classes.dex

过程如下:

home@home-MS-7B89:~/worktools/decodeapk/dex2jar-2.1/dex-tools-2.1$ sh d2j-dex2jar.sh classes.dex
dex2jar classes.dex -> ./classes-dex2jar.jar

  接下来会在同级目录下生成一个 classes-dex2jar.jar 文件,则表示成功:

 当dex 文件转换成 jar文件后,我们仍然无法直接查看jar中的class具体内容,这里我们需要借助于

jd-gui这个查看代码的工具

2.3 jd-gui

        工具下载地址: Java Decompiler

选择Linux版本: jd-gui-1.6.6.deb

 步骤一: 首先我们先安装一下这个工具,命令如下:

sudo dpkg -i jd-gui-1.6.6.deb

安装完成后,在Ubuntu 应用程序列表中找到jd-gui 工具打开

步骤二: 通过菜单选项 File -- openFile 打开刚才反编译出来的 classes-dex2jar.jar包

 查看里面任何一个class文件,不会显示乱码

        好了,到这里就大功告成了,本文中所有需要的开发工具打包后上传到这里: Android反编译apk工具包-Android文档类资源-CSDN下载 不需要C币,供有需要的小伙伴下载使用。

1 . 把apk拷到apktool根目录下,执行:./apktool d xxx.apk,会生成xxx目录,里面有res目录(各种资源文件),smali目录(类似src目录,里面文件的语法不一样)及AndroidManifest.xml。 [*.apk->*.jar: sh ./dex2jar/dex2jar.sh xxx.apk,生成xxx_dex2jar.jar通过jd-linux看源码] 2 . 什么apk汉化啊,就到res/values里string.xml里修改字符串,或者拷贝一份values目录改为values-zh-rCN,再去里面修改string.xml里英文字符串改为中文,所谓的汉化就是这么简单。另外,有些图片里不是中文的得去改图片,那得用Photoshop了,图片也不能乱改,格式,图片大小(尺寸)得原来的。 3 . 修改smali文件,这个有些难度。比如有些apk安装了后要积分什么的,比如大于100才可以用的,其实这个值是用SharedPreference存放的,也就是存在xml里,,位置:/data/data/[包名]/shared_prefs的某个xml里,文件不多肯定是可以找到的。另外一种方法就是修改.smali文件也可以达到这目的,软件实现肯定是读取积分那个值给它修改一下就可以了,例如 const/16 v0 100 (其实就是 v0 = 100)这个语法有点像汇编,觉得还是比汇编简单,v0 v1 ...是寄存器,之前会跟变量关联的。具体的还是自己看看smali语法。 4 . 打包生成apk,执行:./apktool b xxx,会在xxx里面生成,一个dist目录,里面就是xxx.apk,但不能安装滴,提示(Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]),没有给这个apk签名, 5 . 签名,执行:sh ./dex2jar/d2j-apk-sign.sh ./xxx/dist/xxx.apk 就是给刚才那个apk签名,生成的文件还是xxx.apkapktool根目录下。这样就大功告成啦。 [请看:http://blog.csdn.net/zhouyuanjing/article/details/7446988]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值