android apk 反编译及第三方加固脱壳

最近想参考一个第三方APP的功能实现,于是进行一些逆向分析。过程有不少坑,记录一下:

step1.通过apktool.jar 工具解压apk文件,得到res资源文件和class.dex安卓可执行文件

(也可以直接将.apk改为.zip进行解压,不过得到的xml文件未经反编译,难以阅读)

step2. 通过dex2jar工具,将dex文件转成jar包

step3. 通过jd-gui工具查看源码。(直接将jar文件拖到jd-gui中即可)

step4. jd-gui文件保存功能,将.class字节码文件转成java文件,可选单个转换或全部转换,单个直接保存为java文件,全部转换保存为zip文件。或通过jad.exe命令工具转换:

1.cmd进入jad.exe所在文件夹
2.将.class文件拷到同一个文件夹下
3.再输入编译命令,命令:jad -o -r -s java -d src classes_dex2jar/**/*.class

一般只经过普通混淆的apk均可通过这几步得到源码。不过得到的java文件并不能直接使用,一些语法结构已改变,分析逻辑还是没问题的。所用到的工具及说明可通过此处下载icon-default.png?t=L892http://链接:https://pan.baidu.com/s/1gHqOU3keViZJKWmYveNvaA 提取码:2s5x

插曲1:执行第一步时可能会因为jdk版本不一样报错,此处收集的工具jdk要求为jdk1.7。可自行安装,若安装有多个jdk的先在环境变量中将jdk版本更换为1.7,若还是报错,可能是注册表中当前版本不匹配。可通过cmd 执行regedit进入注册表编辑界面 将当前版本改为1.7,或直接删除表中其他版本即可。

 插曲二:

经过上面一番折腾,满心欢喜打开jd-gui一看,啥玩意?毛源码都没有,只有一堆a b c d名称,还有个jiagu.so。原来是经过了第三方平台加固。这时通过第一部是无法得到正确的dex文件的,需要先对dex文件进行脱壳。

准备工具:FDex2_1.1.apk  VirtualXposed_0.18.2.apk

注:此工具均有更高版本,由于通过模拟器操作繁琐,且容易安卓失败,我用真机操作,我的真机为机顶盒,应用为32位的,更高版本工具不支持32位,需要更高版本的可以问度娘拿。

下载icon-default.png?t=L892http://链接:https://pan.baidu.com/s/15N73tA2vv1izIj7aeqbiww 提取码:r1vp

脱壳

Step1:

将xposed、FDex2和需要脱壳的应用都安装到机器上。

Step2:
启动xposed,将FDex2添加的xposed_v3.1.2的模块中激活

Step3:
点击xposed模块中FDex2选中要脱壳的包

Step4:
运行要脱壳的包

 Step5: 通过adb pull 拿到脱壳后的dex.路径为:/data/user/0/io.va.exposed/virtual/data/user/0/包名(或安装文件管理器获取)

插曲三:

脱壳得到多个dex,其中有一个dex无法转换成jar文件,提示该文件不是dex格式,可以转换的dex得到的源码也不全。

原因:

dex文件有固定的文件头标识,而脱壳后得到的dex文件前面几个字节为0000 0000 0000 0000,所以无法识别。 

解决:

补全dex文件头内容。将dex用subline_text等编辑工具打开,将前面几个字节改为:

6465 780a(dex标识) 3033 3500(dex版本号),重新保存,就可以得到正常的已脱壳的dex文件。

脱壳参考icon-default.png?t=L892https://blog.csdn.net/weixin_34004576/article/details/92827929 

 dex文件分析参考icon-default.png?t=L892https://blog.csdn.net/tabactivity/article/details/78950379

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android APK反编译教程是一个关于如何将已编译的Android应用程序(APK)还原为原始的Java源代码和资源文件的指南。反编译APK可以帮助开发人员了解其他应用程序的实现细节,学习和借鉴他们的设计思路和技术方法。 以下是一个基本的Android APK反编译教程的步骤: 1. 下载反编译工具:首先,你需要下载一个反编译工具,例如dex2jar、apktool或Jadx等。这些工具可以从互联网上免费获取。 2. 安装和配置工具:解压缩下载的工具,并按照其文档中的说明进行安装和配置。确保将工具所在的目录添加到系统的环境变量中,以便可以在命令行中调用它们。 3. 反编译APK文件:在命令行中使用反编译工具将APK文件转换为可读的源代码。例如,使用dex2jar工具可以运行`d2j-dex2jar.bat yourapkfile.apk`命令将APK文件转换为JAR文件。 4. 反编译资源文件:使用apktool工具反编译APK文件的资源文件,以便可以查看和编辑应用程序的布局、图片和其他资源。例如,运行`apktool d yourapkfile.apk`命令将APK文件反编译到当前目录中的一个文件夹中。 5. 分析源代码和资源:通过查看反编译得到的Java源代码和资源文件,你可以深入研究和理解应用程序的实现细节。这些文件将在反编译的目录中找到,并使用文本编辑器或开发工具打开。 需要注意的是,反编译APK文件是为了学习和研究目的,以及对自己开发的应用程序进行检查和测试。在商业和法律层面上,我们不鼓励使用这些技术来获取未授权的应用程序源代码和资源。 总之,Android APK反编译教程可以帮助开发人员深入了解其他应用程序的实现细节,学习和借鉴他们的设计思路和技术方法。通过反编译APK文件,我们可以将已编译的二进制应用程序还原为可读的源代码和资源文件,以便进行更多的探索和分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值