移动安全测试 使用 apktool 工具对 Android APK 进行反编译与回编译

金主 · 2018年02月28日 · 最后由 金主 回复于 2018年03月06日 · 4119 次阅读
:文章有说的不对的地方,大家可以帮忙指出!

反编译 apk:

1. 下载apktool.jar

尽量下载最新版本,因为它支持的 Android 版本越高。下载完成后重命名为 apktool.jar

2. 下载脚本

3. 创建文件夹:

在桌面创建文件夹命名为 apktool,把 apktool.jar 和 apktool 放进去。

4. 配置 apktool

1. 打开终端,使用 cd 命令定位到 apktool 文件夹,输入: cd /Users/weixiangyang/Desktop/apktool

2. 增加这两个文件可执行权限,chmod a+x apktool chmod a+x apktool.jar

3. 使用 cp 命令把 apktool.jar 和 apktool 文件拷贝到/usr/local/bin

sudo cp apktool.jar apktool /usr/local/bin

4. 之后,使用sudo apktool,可以查看 apktool 的版本

5. 现在可以使用 apktool 相关命令了,和 windows 是一样的。

把 apk 文件放到 apktool 文件夹,然后回到 apktool 文件夹下:

cd /Users/weixiangyang/Desktop/apktool/

对 bm.apk 进行反编译 (改成你自己的包名)

apktool d bm.apk

5. 配置 dex2jar

1. 下载dex2jar,解压

2. 将 dex2jar 文件夹放在 apktool 文件夹下

3. 把 apk 文件解压,可以直接解压或者修改后缀.zip 再解压,找到 classes.dex 文件,

4. 我们要用 dex2jar 将 apk 转成 jar 文件,实质是将 apk 里的 classes.dex 转成 jar。

先给 dex2jar 里的 d2j_invoke.sh/d2j-dex2jar.sh 增加可执行权限。

cd /Users/weixiangyang/Desktop/apktool/dex2jar-2.0/

chmod a+x d2j_invoke.sh

chmod a+x d2j-dex2jar.sh

5. 进到 dex2jar 这个文件夹下并运行:

cd /Users/weixiangyang/Desktop/apktool/dex2jar-2.0/

./d2j-dex2jar.sh /Users/weixiangyang/Desktop/apktool/bm.apk

dex2jar 下便生成了 bm-dex2jar.jar 文件。

6. 下载jd-gui

打开 JD-GUI,选择 cnyaomaitongappdaily_v263_bc84e798-b15b-423f-b6d6-116616feb9a6_dex2jar.jar,就看到源码了。

回编译 apk:

1. 查看 bm 文件夹目录,如图

2. 进入 apktool 文件夹,对 bm 进行回编译:

cd /Users/weixiangyang/Desktop/apktool

apktool b bm

3. 查看 bm 文件夹目录,如图

4. 对比步骤 1 与步骤 3 的 bm 文件夹图片:

发现 build 和 dist 就是回编译 apk 过程中生成的东西,编译出来的 apk 在 dist 目录下,这时 apk 是安装不成功的,总是提示Failure [INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION]

再 打开 build/apk 文件夹会发现少了 original 文件夹下的 META-INF 文件夹,也就意味着 dist 里的 apk 文件是没有签名的,如图:

(拓展:图中特意框出了AndroidManifest.xml文件,让你留意下,他是 Android 应用的入口文件,记录了程序运行所必要的组件,权限,以及一些相关信息,以后用处多多)

5. 给 apk 增加签名

1. 生成 bm.keystore 文件

keytool -genkey -keystore /Users/weixiangyang/Desktop/apktool/bm.keystore -alias bm -keyalg RSA -validity 10000

翻译下哈,

-genkey:创建新密匙

-keystore /Users/weixiangyang/Desktop/apktool/bm.keystore:到/Users/weixiangyang/Desktop/apktool 目录下并且命名为 bm.keystore

-alias bm:密匙别名为 bm

-keyalg RSA:生成密钥对的算法为 DSA

-validity 10000:创建的证书有效期为 10000 天

如图所示,执行命令后会出现下面步骤:

这些步骤操作完,看下你指定生成的 bm.keystore 文件路径:如图所示:

附上keytool常用参数用法:

☀ 1. -genkey表示要创建一个新的密钥

☀2. -alias 别名,证书库中的每条证书以别名来区分,这个 alias 通常不区分大小写。

☀3. -keystore 证书库文件路径和名字

☀4. -keyalg 指定生成密钥对的算法 (如 RSA DSA,默认值为:DSA)

☀5. -keysize 指定密钥长度(默认 1024)

☀6. -validity 指定创建的证书有效期多少天 (默认 90)

☀7. -storepass 指定证书库的访问密码

☀8. -keypass 指定证书库中指定条目证书的私钥密码

☀9. -dname 表示证书的 Distinguished Names 发行者信息。其中"CN=commonName 证书名(一般是网站的域名),OU=organizationUnit 组织单位名称,O=organizationName 组织名称,L=localityName 城市或区域名,S=stateName 州或省份名称,C=country 两位的母国家代码"

☀10. -file 导出的证书位置(包含公钥和主题信息的证书)

☀11. -v 显示证书库中的证书详细信息

☀12. -rfc 以可打印的编码格式输出证书详细信息

2. 为我们的 APK 文件签名:

jarsigner -verbose -keystore /Users/weixiangyang/Desktop/apktool/bm.keystore -signedjar /Users/weixiangyang/Desktop/apktool/bm1.apk /Users/weixiangyang/Desktop/apktool/bm/dist/bm.apk bm

简单说下具体参数

☀-verbose:签名命令标识符

☀-keystore:签名使用的密钥文件 (keystore) 的绝对路径。

☀ -signedjar:此后有三个参数:

参数一:签名后生成的 apk 文件所要存放的路径

参数二:未签名的 apk 文件的存放路径以及 apk 名称。

参数三:你的证书名称,通俗点说就是你 keystore 文件的别名,就是在你 eclipse 进行签名打包时的 Alias 的值。

执行后,会提示让你输入密钥库的密码短语:就上个步骤你自己设定的那个口令,在这里我是遇到了一个报错:,这里没问题的亲就跳过这段。

jarsigner 错误: java.lang.RuntimeException: 密钥库加载: Keystore was tampered with, or password was incorrect

这个问题浪费了我好久时间,百度的各种解决办法能试的都试了,也没找到方案,最后,我赶巧的是把 keystore 文件删掉,重新生成并为 keystore 文件设定了纯数字的口令密码,问题就解决。所以这里,各位童鞋都注意下。

密钥库的密码短语输入并执行成功后,会显示如图所示:

6. 验证:卸载原来的 APK,安装自己反编译的 APK,看是否成功

大功告成!!!

有看到很多人在问我写这个的目的,问是干嘛的?我在这里介绍下吧

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 7 条回复 时间 点赞

没人看,自己顶自己😪

小姐姐,这个是为了安全?还是别的什么目的啊?

bauul 回复

等我一会出了下篇文章,你就懂了😃

4楼 已删除

小姐姐真棒

6楼 已删除

干嘛的?

—— 来自 TesterHome 官方 安卓客户端

金主 安卓未 root 查看 data 目录文件 中提及了此贴 03月06日 10:46
bauul 回复

安卓未 root 查看 data 目录文件:https://testerhome.com/topics/12183

金主 Mac 下 Navicat Premium 中文破解版的安装 中提及了此贴 03月08日 11:13
金主 Monkey+Logcat+DDMS 内存泄漏分析以及定位 (三) 中提及了此贴 03月08日 15:04
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册