您的位置:首页 > 移动开发 > Android开发

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

2016-03-19 14:28 621 查看
下载我上传的资源就可以省去一些操作步骤,为了方便更新强迫症在这里也会给出资源下载地址

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

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

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.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


反编译好的文件在这里






打开jdjui将的到的文件拖进去就看到源码了






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

回编译生成的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


结束。。。。。。。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: