浅析,反编译Android APK流程分享

移动开发
作为公司的技术兼产品人员,看到别人开发的优秀Android APK实在羡慕,在Android开发的过程,也很想去学习别人那些漂亮的动画和布局,或是产品逻辑等是怎么做的,所以最近学习了对APK的反编译,只做学习借鉴,提升产品竞争力,不为任何不法企图之用。

作为公司的技术兼产品人员,看到别人开发的优秀Android APK实在羡慕,在Android开发的过程,也很想去学习别人那些漂亮的动画和布局,或是产品逻辑等是怎么做的,所以最近学习了对APK的反编译,只做学习借鉴,提升产品竞争力,不为任何不法企图之用。

首先下载反编译软件apktool 、dex2jar、 jd-gui对APK进行反编译

工具介绍:

apktool :资源文件获取,可以提取出图片文件和布局文件进行使用查看,其原理详情:(http://my.oschina.net/1590538xiaokai/blog/467830

dex2jar:将apk反编译成java源码(classes.dex转化成jar文件)

jd-gui:查看APK中classes.dex转化成出的jar文件,即源码文件

反编译流程:

一、apk反编译得到程序的源代码、图片、XML配置、语言资源等文件

下载上述工具中的apktool,解压得到3个文件:aapt.exe,apktool.bat,apktool.jar ,将需要反编译的APK文件放到该目录下,打开命令行界面(运行-CMD) ,定位到apktool文件夹,输入以下命令:apktool.bat d -f test.apk test(命令中test.apk指的是要反编译的APK文件全名,test为反编译后资源文件存放的目录名称,即为:apktool.bat d -f [apk文件 ] [输出文件夹])

说明获取成功,之后发现在文件夹下多了个test文件,点击便可以查看该应用的所有资源文件了。

如果你想将反编译完的文件重新打包成apk,那你可以:输入apktool.bat b test(你编译出来文件夹)便可,效果如下:之后在之前的test文件下便可以发现多了2个文件夹:build dist(里面存放着打包出来的APK文件)

二、Apk反编译得到Java源代码

下载上述工具中的dex2jar和jd-gui ,解压将要反编译的APK后缀名改为.rar或则 .zip,并解压,得到其中的额classes.dex文件(它就是java文件编译再通过dx工具打包而成的),将获取到的classes.dex放到之前解压出来的工具dex2jar-0.0.9.15 文件夹内,在命令行下定位到dex2jar.bat所在目录,输入dex2jar.bat classes.dex,效果如下:在改目录下会生成一个classes_dex2jar.jar的文件,然后打开工具jd-gui文件夹里的jd-gui.exe,之后用该工具打开之前生成的classes_dex2jar.jar文件便可以看到源码了,效果如下:被混淆过的效果图(类文件名称以及里面的方法名称都会以a,b,c....之类的样式命名)。

三、 图形化反编译apk

上述步骤一、二讲述了命令行反编译apk,现在提供一种图形化反编译工具:Androidfby首先,下载上述反编译工具包,打开Androidfby目录,双击Android反编译工具.exe,就可以浏览打开要反编译的apk通过反编译,你可以获知该应用用到了什么第3方的库文件,它的代码是如何编写的等等。

[[140088]]

当然,有些APK为了避免被他人反编译,所以进行了代码混淆。因为很多不法分子盗版一款APP就是从反编译开始。所以从移动应用安全角度讲,为了避免他人了解自己的APK的布局和逻辑,的确应该做一些反编译的保护措施,尤其是避免被竞争对手看到。如果开发者不想被他人反编译,提高APK的安全性,可以进行加密保护。

作为一个普通移动开发者,反编译的目的只是了解他人应用程序的大体思路,对开发工作有益无害。

责任编辑:倪明 来源: 科技创造的博客
相关推荐

2017-07-13 13:13:49

AndroidAPK反编译

2015-01-15 11:01:43

2011-05-31 14:52:13

Android 反编译 方法

2021-10-22 06:53:44

Apk编译打包

2011-05-31 14:38:04

Android 反编译

2015-01-15 10:15:16

Android反编译-smail语法

2015-08-20 10:13:34

2011-05-31 14:18:17

2023-03-26 20:23:10

Java开源工具

2017-11-27 15:43:49

Androidjadx反编译

2021-03-07 16:31:35

Java编译反编译

2017-02-20 13:54:14

Java代码编译

2015-08-07 11:11:15

反编译源代码Mac

2011-04-20 10:32:44

java反编译

2009-06-11 14:11:33

代码混淆Java反编译

2012-12-25 13:37:29

Android代码混淆

2012-11-06 10:02:04

JavaJadEclipse

2009-06-11 13:49:30

2014-09-25 10:28:02

反编译工具Java

2020-03-17 16:15:01

Python编译代码
点赞
收藏

51CTO技术栈公众号