下载我上传的资源就可以省去一些操作步骤,为了方便更新强迫症在这里也会给出资源下载地址
我的资源下载地址点击打开链接;
官方下载地址,有三个工具需要下载:
- 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
- 将以上两个文件放到"/usr/local/bin"目录下。并修改这两个文件的可执行权限
做起来有点麻烦:
目录是隐藏的所以-->打开Finder然后快捷键shift+command+G通过前往文件夹进入
修改权限时需要在这个文件夹中操作终端命令,如果不知道怎么进入这个文件夹可以有简单方法
打开
系统偏好设置-->键盘--
>
快捷键--
>
左边找到服务--
>
看图勾选
然后就可以用这种方式进入终端了:
- 通过命令: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 <brut.alll@gmail.com>
Updated by Connor Tumbleson <connor.tumbleson@gmail.com>
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中的
下载jd-jui
- 这两个直接保存成文件夹形式就可以
-
- 接下来就是反编译的步骤了
- 创建个文件夹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...
接下来回编译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
- 上面的build和dist两个文件夹就是回编译apk过程中生成的,编译出来的apk在dist目录下,打开build/apk文件夹你会发现少了original文件夹下的META-INF文件夹--这说明dist文件夹中的apk文件是没有签名的(最后在说这个)
- 将dex2jar-2.0文件夹里的d2j_invoke.sh和d2j-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
- 反编译好的文件在这里
-
-
打开jd-jui将的到的文件拖进去就看到源码了
反编译就结束了,接下来说下签名问题
回编译生成的apk是不能安装的,因为没签名所以会提示:Failure [INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION]
生成签名命令:
keytool -genkey -keystore bob.keystore -keyalg RSA -validity 10000 -alias bob
注:实际上-keystore后面跟的是签名文件的名字,而-alias后看跟的是别名,一般情况下-keystore后面跟-alias是一样的,但其实两者没有关系,可以不同。使用 "keytool -help" 获取所有可用命令 ➜ dex2jar-2.0 keytool -genkey -keystore bob.keystore -keyalg RSA -validity 10000 -alias bob 输入密钥库口令: 再次输入新口令: 您的名字与姓氏是什么? [Unknown]: chen 您的组织单位名称是什么?
给apk增加签名
jarsigner -digestalg SHA1 -sigalg MD5withRSA -tsa -verbose -keystore bob.keystore -signedjar bob-signed.apk bob.apk bob
结束。。。。。。。。。。。