Android_反编译再次打包

反编译

  • apk 文件实际上就是一个 zip 压缩包,可以直接修改后缀再解压
unzip.png

|-- AndroidManifest.xml 被编译成二进制的配置文件,无法阅读
|-- classes.dex Android 可以执行文件
|-- resources.arec 被编译成二进制的主资源文件
|-- assets/ 不需要编译的原始资源文件目录
|-- lib/ 库文件,.so
|-- res/ 资源文件目录
|-- META-INF/ 签名信息
使用 dex2jar 工具将 classes.dex 反解成 jar 文件,然后使用 jd-gui.exe 工具打开即可看到 Java 代码,如果没有混淆代码可读性极强

//将 classes.dex 复制到 dex2jar 的根目录下,执行如下命令就会生成对应的 jar 文件
dex2jar.bat classes.dex
  • apktool 工具
    apktool d -f game.apk
    使用 apktool 反编译 apk 文件,会在根目录下生成 game 文件夹, -f 覆盖 game 文件夹

命令输出如下信息


反编译过程.png

反编译的几个阶段
a) 二进制配置文件 AndroidManifest.xml 反编译
b) 根据 framework 资源列表反编译二进制资源文件
c) dex 文件 baksmali 反汇编过程
d) copy 不需要反编译的资源和库文件

game 目录如下

apktool d .png

|-- AndroidManifest.xml 配置文件可以阅读
|-- apktool.yml 反编译生成的文件,apktool 使用
|-- assets/ 不需要编译的原始资源文件目录
|-- lib/ 库文件,.so
|-- original/ 签名信息和二进制配置文件
|-- res/ 资源文件目录
|-- smali/ 反汇编生成的 smali 源码文件目录

再打包

 apktool b game
编译过程.png

编译的几个阶段
a) 汇编 smali 源码成 dex 文件
b) 使用 aapt 把资源文件编译成二进制文件
c) 复制不需要编译的库文件和目标目录
d) 打包成 apk 文件

打包后的目录


after_build.png

发现多了 build,dist 文件夹
|-- build/ 打包过程中的工作目录,存放对应的文件
|-- dist/ 存放生成的 apk 文件

这个时候 apk 文件是不能安装的,反编译后破坏了其签名,需要重新签名

jarsigner -verbose -keystore keystoreFile -storepass password -signedjar game\dist\game_pack.apk game\dist\game.apk keystoreFileAliasName

最后进行一个四字节对齐优化(google推荐)

zipalign -f 4 source.apk target.apk
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容