公司两个项目公用的一个 APP,包名一致,仅仅是渠道不同,部分功能在代码中做了区分处理,然而自动更新后 A 调用了 B 的 初始化接口,为了搞清楚渠道是否正确,我们需要对 apk 进行解包。

  • # 工具 --> Apktool

    首先去官网下载,根据你的操作系统来,我这里是 mac os.
  • # 安装

    按照提示操作
    1. 右键下载脚本 wrapper script ,另存为 apktool 文件类型选所有类型

2. 下载 jar 包

3. 重命名刚刚下载的 jar 包为 apktool.jar

4. 将刚刚下载的两个文件拷贝到 /usr/local/bin

打开 Finder 使用 shift + command + G 将路径输入可以直达,粘贴时会需要权限,输入密码即可。

5. 打开命令行,我这里使用的是 iTerm , 进入 /usr/local/bin 目录

输入 sudo chmod +x apktoolsuddo chmod +x apktool.jar 为两个文件赋予可执行权限,期间需要输入密码,成功没有提示。

6. 测试是否安装成功,命令行输入 apktool 出现如下内容则说明成功了

  • # 解包

  1. 使用命令行进入 apk 存放目录
  2. 使用命令 apktool -d apk全名 ,例如: apktool -d qq.apk 即可在当前目录解包。(我试过在其他目录使用 apktool -d 命令,然后将 apk 拖进去,无法解包)
    ,解包过程有输出
  3. 解包完成得到这个

    假如只需要获取 app 的 xml 或者图片资源,到这一步就完成了
    此时我已经找到 manifest 文件,看到了当前的渠道了。
  4. 如果要获取到 java 的代码,那么我们还要进行回编译
    首先回编译,使用命令 apktool b app反编译的文件夹名称 ,例如我这里是 apktool b qq/

    qq 目录下会多出一个 build 目录

然后我们去下载 dex2jarp
下载第一个就好了

解压 dex2jar-2.0.zip,当然你也可以把它放到其他目录
再终端执行 sudo chmod +x d2j-dex2jar.sh 和 sudo chmod +x d2j_invoke.sh 添加运行权限,
执行命令为 sudo sh d2j-dex2jar.sh classess.dex路径


在 dex2jar-2.0 目录下得到我们想要的 classes-dex2jar.jar

最后,下载 jd-gui
我们下载 osx 版本

解压后将刚刚生成的 classes-dex2jar.jar 拖入 jd-gui 应用中即可打开查看源码。
可能会出现 “sudo chmod +xr classes-dex2jar.jar” 的错误
需要对生成的 jar 赋予权限 sudo chmod +xr classes-dex2jar.jar

再次打开就行了

大家在写程序时,一定要混淆加固,这样就算反编译出来,也是一些 aabbcc 字母,虽然说不能完全保护,但是能拦截掉一大批这种简单的反编译操作。

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Logan 微信支付

微信支付

Logan 支付宝

支付宝

Logan 贝宝

贝宝