公司两个项目公用的一个 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 拖进去,无法解包)
      ,解包过程有输出
  1. 解包完成得到这个

    假如只需要获取app的xml或者图片资源,到这一步就完成了
    此时我已经找到 manifest文件,看到了当前的渠道了。

  2. 如果要获取到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字母,虽然说不能完全保护,但是能拦截掉一大批这种简单的反编译操作。

Last modification:November 2nd, 2020 at 11:10 am
If you think my article is useful to you, please feel free to appreciate