首页 > 棋牌技术 > 记录一个安卓app反编译的过程
2020
07-12

记录一个安卓app反编译的过程

工作需要,拔了一个app内容,主要是涉及核心算法,没办法只能去反编译。部分内容也是来自网络,本文仅作记录整理。

反编译需要准备的工具:

1.apktool:aapt.exe,apktool.bat,apktool.jar;三个在同一目录结合使用,用来反编译apk,apk重新打包;

2.dex2jar:该工具作用是将classes.dex文件,反编译出源码(如果apk未加固),反编译出文件,使用jd-gui工具进行查看;

3.Auto-Sign:自动签名工具,将重新打包的apk进行签名,如果不签名,无法安装使用。

4.jd-gui: 这个东西可以直接查看jar文件内容,不需要进一步解包,如果对方app没有很深的套路,用这个就不用再打包去查看了。

直接说解包,修改和再打包的过程:

1、查看内容解包

dex2jar.bat   classes.dex

该命令来自于dex2jar工具,后面的dex文件是直接将apk文件改名zip解压后得到的。

运行结束后,在该工具目录下会生成一个classes_dex2jar.jar的文件

打开工具jd-gui文件夹里的jd-gui.exe,用该工具打开生成的classes_dex2jar.jar文件,便可以看到源码,如果不是加密处理过的,这部分内容可读性还是比较强的。

记录一个安卓app反编译的过程,记录一个安卓app反编译的过程-第1张,安卓app,反编译,第1张

2、修改源码需要使用apktools进行反编译解包。

apktool.bat d -f test.apk -o test

反编译之后会得到test 文件夹,打开test文件夹,里边就是反编译出来的各种文件。

第一步中,jd-gui看到的文件,对应着smali文件夹,再找到与之对应的地址smali文件

比如:smali\com\danfoss\koolapp\a.smali对应着下图中的内容

记录一个安卓app反编译的过程,记录一个安卓app反编译的过程-第2张,安卓app,反编译,第2张

3、修改源码

直接修改smali是比较难的,smali相当于编译后的语言,虽然可读性比二进制要好,但依然很麻烦。

此时需要安装android-studio,  下载地址: http://www.android-studio.org/

安装后安装插件:java2smali,下载地址:https://plugins.jetbrains.com/plugin/7385-java2smali

插件导入IDE后重启IDE,创建一个空的Project。复制jd-gui中查看到的java内容,选择IDE顶部菜单:build---Compile to Smali即可实现java到smali的编译。

记录一个安卓app反编译的过程,记录一个安卓app反编译的过程-第3张,安卓app,反编译,第3张

此时根据自身需要修改java内容,调试输出即可。

4、再打包

再次打包需要使用aoktool命令

apktool.bat b test

记录一个安卓app反编译的过程,记录一个安卓app反编译的过程-第4张,安卓app,反编译,第4张

此时得到的test.apk文件需要签名

复制test.apk到autosign工具的文件夹下

java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test_signed.apk

之后会得到一个test_signed.apk,该文件可以直接安装。

记录一个安卓app反编译的过程,记录一个安卓app反编译的过程-第5张,安卓app,反编译,第5张

最后说一下安卓虚拟机的问题

使用虚拟机可以更方便快速的调试,不需要反复看手机。

使用BlueStacks蓝叠,这个软件相对响应速度比较快。可以在设置--引擎设置中获取root权限。使用re文件管理器可以访问system文件夹的资源,其共享文件夹路径为:X:\BluestacksCN\Engine\ProgramData\Engine\UserData\SharedFolder


教程完毕。