• 【Android】Android如何对APK反编译


    本文笔者粗略的介绍如何利用一些工具,对Android进行反编译,从而得到源码,希望对你有所帮助,笔者的android环境为4.4.2。

    如果笔者的apk被加过壳的话,那么可能不适合这篇文章,可以用加壳工具查看要反编译的apk是否加过壳。

    1.准备资源.

    在开始之前,需要准备三项工具:
    apktool 
         作用:资源文件获取,可以提取出图片文件和布局文件进行使用查看,读者可以到https://ibotpeaches.github.io/Apktool/install网址下下载最新版本的apktools,如果出现Exception in thread "main" brut.androlib.AndrolibException:这样的异常,那么就是apktools的办版本太老的原因。


    dex2jar
         作用:将apk反编译成java源码(classes.dex转化成jar文件),最新版本的dex2jar可以到SOURCEFORGE下载

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

    2.获取资源文件

    使用apktool这个工具获取资源文件,下载apktool 会获得三个文件: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文件,点击便可以查看该应用的所有资源文件了。

    打开资源文件后,可以看到里面有res和smali文件夹,res文件夹中放的是图片和XML等一些文件资源,smali里面放的是代码,文件都是.smali格式的,不方便阅读。

    如果这里报错的话,可以观察错误信息,然后可以通过输入 apktool.bat 查看帮助信息,笔者在jdk8和jdk6上测试发现,在jdk8中必须使用 -o 输出文件,应该在jdk8中应该使用如下的格式:

    apktool.bat   d  -f    [apk文件 ]  -o  [输出文件夹]


    如果你想将反编译完的文件重新打包成apk,那你可以:输入 apktool.bat b test(你编译出来文件夹) 便可,效果如下:

    之后在之前的test文件下便可以发现多了2个文件夹:

    dist(里面存放着打包出来的APK文件)

    3.获取Java源码文件

    第二步获得的smali文件不方便阅读,接下来获取源码。

    下载好dex2jar和jd-gui后 ,解压

    将要反编译的APK后缀名改为.rar或则 .zip,并解压,得到其中的额classes.dex文件(它就是java文件编译再通过dx工具打包而成的),

    将获取到的classes.dex放到之前解压出来的工具dex2jar-0.0.9.15 文件夹内,


    在命令行下定位到dex2jar.bat所在目录,输入 dex2jar.bat classes.dex ,效果如下:


    被混淆过的效果图(类文件名称以及里面的方法名称都会以a,b,c....之类的样式命名):

    这种方式可以反编译,但是经过笔者的测试,发现反编译后的源码文件,或多或少都有一些错误。

    原文链接:Android APK反编译

  • 相关阅读:
    hdu 1520(简单树形dp)
    hdu 1561(树形dp)
    hdu 2809(状压dp)
    hdu 2196(求树上每个节点到树上其他节点的最远距离)
    hdu 4003(树形dp)
    hdu 3899(树形dp)
    hdu 4714(树形dp)
    hdu 3905(dp)
    Linux mariadb(Mysql)的主从复制架构
    面向对象静态变量代码题
  • 原文地址:https://www.cnblogs.com/HDK2016/p/7986201.html
Copyright © 2020-2023  润新知