Mac上反编译Android-apk傻瓜式记录。

下载我上传的资源就可以省去一些操作步骤,为了方便更新强迫症在这里也会给出资源下载地址

我的资源下载地址点击打开链接;

官方下载地址,有三个工具需要下载:

  • Apktool:http://ibotpeaches.github.io/Apktool/install/
  • dex2jar:https://github.com/pxb1988/dex2jar
  • jd-jui:http://jd.benow.ca
操作步骤:
  • 打开Apktool网址,点击图片中1位置,将弹出的内容复制到sublime(这是我的文本编辑工具)保存为apktool,注意去掉扩展名.sh,如果保存后仍然有扩展名那么就重命名并去掉
  • 点击图片中2位置下载apktool_x.x.x.jar(x是一个代号而已,找你需要的版本下载就可以了),将下载好的jar包改名为apktool.jar
Mac上反编译Android-apk傻瓜式记录。_第1张图片
  • 将以上两个文件放到"/usr/local/bin"目录下。并修改这两个文件的可执行权限
做起来有点麻烦: 目录是隐藏的所以-->打开Finder然后快捷键shift+command+G通过前往文件夹进入
修改权限时需要在这个文件夹中操作终端命令,如果不知道怎么进入这个文件夹可以有简单方法
打开 系统偏好设置-->键盘-- > 快捷键-- > 左边找到服务-- > 看图勾选
 
然后就可以用这种方式进入终端了:
Mac上反编译Android-apk傻瓜式记录。_第2张图片
  • 通过命令:chmod a+x file(file就是上面那两个文件)
  • 然后执行命令:shell apktool;验证成功apktool -v看到下面信息就说明成功了
Last login: Sat Mar 19 12:05:10 on console
➜  ~ apktool -v
Apktool v2.0.3 - a tool for reengineering Android apk files
with smali v2.1.0 and baksmali v2.1.0
Copyright 2014 Ryszard Wiśniewski <[email protected]>
Updated by Connor Tumbleson <[email protected]>

usage: apktool
 -advance,--advanced   prints advance information.
 -version,--version    prints the version then exits
usage: apktool if|install-framework [options] <framework.apk>
 -p,--frame-path <dir>   Stores framework files into <dir>.
 -t,--tag <tag>          Tag frameworks using <tag>.
usage: apktool d[ecode] [options] <file_apk>
 -f,--force              Force delete destination directory.
 -o,--output <dir>       The name of folder that gets written. Default is apk.out
 -p,--frame-path <dir>   Uses framework files located in <dir>.
 -r,--no-res             Do not decode resources.
 -s,--no-src             Do not decode sources.
 -t,--frame-tag <tag>    Uses framework files tagged by <tag>.
usage: apktool b[uild] [options] <app_path>
 -f,--force-all          Skip changes detection and build all files.
 -o,--output <dir>       The name of apk that gets written. Default is dist/name.apk

下载dex2jar;进入到github以后向下拉找到如图位置,两个下载都可以,我是下载的第一个download中的

Mac上反编译Android-apk傻瓜式记录。_第3张图片

下载jd-jui

Mac上反编译Android-apk傻瓜式记录。_第4张图片

  • 这两个直接保存成文件夹形式就可以

  • 接下来就是反编译的步骤了
  • 创建个文件夹apk(文件夹名字随意)将待反编译的apk放进去(我的待反编译apk是bob.apk)
  • 终端进入这个文件夹执行命令:apktool d bob.apk(apktool d 后面跟着的bob是我的待反编译apk名字,你改成你自己的)

    Last login: Sat Mar 19 15:12:55 on ttys000
    ➜  apk apktool d bob.apk
    I: Using Apktool 2.0.3 on bob.apk
    I: Loading resource table...
    I: Decoding AndroidManifest.xml with resources...
    I: Loading resource table from file: /Users/mr.chen/Library/apktool/framework/1.apk
    I: Regular manifest package...
    I: Decoding file-resources...
    I: Decoding values */* XMLs...
    I: Baksmaling classes.dex...
    I: Copying assets and libs...
    I: Copying unknown files...
    I: Copying original files...
    
    Mac上反编译Android-apk傻瓜式记录。_第5张图片

    接下来回编译apk。命令apktool b bob 

    ➜  apk apktool b bob
    I: Using Apktool 2.0.3
    I: Checking whether sources has changed...
    I: Smaling smali folder into classes.dex...
    I: Checking whether resources has changed...
    I: Building resources...
    I: Building apk file...
    ➜  apk 

    Mac上反编译Android-apk傻瓜式记录。_第6张图片
    • 上面的builddist两个文件夹就是回编译apk过程中生成的,编译出来的apkdist目录下,打开build/apk文件夹你会发现少了original文件夹下的META-INF文件夹--这说明dist文件夹中的apk文件是没有签名的(最后在说这个)
    • dex2jar-2.0文件夹里的d2j_invoke.shd2j-dex2jar.sh两个文件增加可执行权限(同上)。然后进到dex2jar-2.0这个文件夹下执行命令: ./d2j-dex2jar.sh /Users/mr.chen/apk/aaa.apk
    • ➜  dex2jar-2.0 ./d2j-dex2jar.sh /Users/mr.chen/apk/bob.apk
      dex2jar /Users/mr.chen/apk/bob.apk -> ./bob-dex2jar.jar
      ➜  dex2jar-2.0 
    • 反编译好的文件在这里
    • Mac上反编译Android-apk傻瓜式记录。_第7张图片
    • 打开jdjui将的到的文件拖进去就看到源码了

      Mac上反编译Android-apk傻瓜式记录。_第8张图片

      反编译就结束了,接下来说下签名问题

      回编译生成的apk是不能安装的,因为没签名所以会提示:Failure [INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION]

      生成签名命令:

      keytool -genkey -keystore bob.keystore -keyalg RSA -validity 10000 -alias bob

      使用 "keytool -help" 获取所有可用命令
      ➜  dex2jar-2.0 keytool -genkey -keystore bob.keystore -keyalg RSA -validity 10000 -alias bob
      输入密钥库口令:  
      再次输入新口令: 
      您的名字与姓氏是什么?
        [Unknown]:  chen
      您的组织单位名称是什么?
      注:实际上-keystore后面跟的是签名文件的名字,而-alias后看跟的是别名,一般情况下-keystore后面跟-alias是一样的,但其实两者没有关系,可以不同。

      给apk增加签名

      jarsigner -digestalg SHA1 -sigalg MD5withRSA -tsa -verbose -keystore bob.keystore -signedjar bob-signed.apk bob.apk bob

      结束。。。。。。。。。。。








你可能感兴趣的:(android,apk,mac,jar,反编译)