首页 > 编程知识 正文

apk反编译成安卓工程(app最强的反编译工具)

时间:2023-05-06 19:52:58 阅读:76618 作者:805

一:apk是啥?

在我的理解中,apk文件就像zip包。 可以在windows上直接将扩展名. apk更改为. zip。 然后解压缩后,目录结构大致是这样的:

但是,根据apk的不同,里面的目录可能不同。 当然,大家当然也应该知道,但是这个文件直接打开也不知道,所以这里不发布打开文件的截图。

二:这解压出来的这些又是什么鬼?

http://www.Sina.com/APP应用程序的全局配置文件

3358 www.Sina.com/Oracle资源文件夹。 与Android项目的assets文件夹相对应,通常用于存储原始网页、音频等。 我不会在此说明与res文件夹的区别,请参考上面介绍的两篇文章。

AndroidManifest.xml:源代码编译为class,然后转换为jar并压缩为dex文件。 dex是可以直接在Android虚拟机上运行的文件。

assets:引用的第三方sdk的so文件。

classes.dex:Apk签名文件。

lib:资源文件。 包含布局、图像等。

记录META-INF:资源文件与资源id的映射关系。

当然,这并不是我自己瞎了。 是被别人“参考”的。 要进一步了解apk是什么,可能需要知道apk的具体构建过程。 我也不深入了解这一部分,所以在这里找到了报道。 如果你感兴趣的话请看。 安卓构建流程分析

res:

目前有很多用于发送编译的工具,如android-classyshark、AndroidGuard和Android-crack-tool (仅限MAC )。 但是,我权衡了一下,最终决定采用比较普通的三件套方式。 毕竟是学习的过程,流行常用的道具一定会被优先。

工具介绍:

1.apk工具

作用:获取资源文件,提取图像文件和布局文件进行查看

2.dex2jar

角色:将apk反编译为java源代码(将classes.dex转换为jar文件)

3.jd-gui

角色:显示apk中classes.dex转换的jar文件或源文件

resources.arsc:

1.apk反编译获得的程序源代码、图片、XML结构、语言资源等文件

使用apk工具,下载链接位于CSDN上面。 然后,将需要反编译的apk和apk工具放在同一文件夹中。

然后在当前文件夹的命令行上运行。

p>

你的apk名字是啥,这里就应该写啥。然后就会出现一个以你apk名字命名的文件夹。里面打开我这里是这样子的:


有些对这个有了解过的朋友,对smali肯定比较眼熟,上图里面的smali文件夹直接打开,里面的文件结构和目录跟原始的java文件目录是一致的。不过里面的文件并不是我们熟悉的java代码,这里我对smali做一些简单的解释。

Android虚拟机Dalvik并不是执行java虚拟机JVM编译后生成的class文件,而是执行再重新整合打包后生成的dex文件,dex文件反编译之后就是smali代码,可以说,smali语言是Dalvik的反汇编语言,他也是有自己的语言格式和一整套语言体系,但是我并没有较多的了解,所以这里不打算展开来讲。

(tip:Smali是冰岛语中编译器的叫法,也许你会问为什么是冰岛语,因为Dalvik是一个冰岛渔村名字。看了阿根廷对冰岛之后对冰岛也是比较感兴趣,所以这里插一句......)

然后现在得清单文件打开显示是这样子的(很清晰明了的格式):


有一部分我打码了,但是其实这些打码的地方也都是可以看到的。

现在的res里面的布局显示是这样的,也是可以直接看到的(这里我是直接用notepad打开的,没有格式化):


    2.apk反编译得到Java源代码

        (tip:这一步步骤比较繁琐,如果不是自己想要去反编译的话,可以跳过这里,直接结果)

将下载好的dex2jar和jd-gui,解压。将要反编译的apk,后缀改成.zip。然后解压打开,上面展示过这个目录,里面会有一个classes.dex。然后将这个classes.dex文件放到刚刚解压出来的dex2jar-2文件夹里面,就是这个文件夹(dex2jar-2.0.zip解压出来之后的文件夹):


里面会有一大堆的命令文件,然后把classes.dex文件放到这个文件夹里面。就像这样:


然后在当前文件夹打开命令行,执行:


然后会生成一个classes-dex2jar.jar的文件夹:


然后你以为在这里就结束了吗。哈哈,其实并没有,刚刚我们介绍的三件套只用了两个,最后还有一个jd-gui没用到

    3.使用jd-gui打开classes-dex2jar.jar查看源码

解压jd-gui文件之后里面会有一个jd-gui.exe。直接然后用这个东西打开上一步拿到的classes-dex2jar.jar。


这里也是比较清晰的能看到,但是有些地方并不是那么合情合理,可能是因为一些混淆的原因。至于混淆和反混淆的,这一部分内容也比较繁多,所以打算到下一篇博客再去详述。

五:总结

    最后总结一下,apktool主要是负责获取manifest清单文件,以及res里面的xml配置文件。dex2jar根据名字就可以看出来,就是将dex文件转成jar文件。jd-gui从名字其实也可以猜到,GUI--->Graphical User Interface,图形用户接口,用来打开上一步得到的jar文件(图形化界面)。

    但是其实还是有很多小问题的,比如怎么样才能够完美的得到源码,而不是掺杂一些混淆之后的东西。比如jd-gui获取到的class文件能否一键导出或者能不能直接转成java文件运行起来?比如目前这个apk其实很明显主要的功能代码并不在我通过上述步骤得到的可视化的界面里面显示(也许是使用jar和aar的原因?如何解决?总不能一个个去拆解吧)等等,这个也算是给自己留几个坑吧。边学习边思考。

    本来之前是打算写一些技术类的文章,但是鉴于我司大佬实在太牛*了,不敢班门弄斧。所以就做了这个反编译公司软件的总结和分享吧。算是自己第一次做反编译apk,做起来还是碰到了很多问题,但是也都解决的七七八八,最后也算是勉强完成了。如果上述的问题各位大佬有答案,不吝赐教。谢谢阅读。







        


版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。