zoukankan      html  css  js  c++  java
  • Android反编译之反编译源码

    以微信安装包为例讲解:

    右击APK文件,以压缩包方式打开,截图如下:

      
    源码存放在classes.dex文件中。我们可以直接查看res下面的图片文件,但对于源代码无法查看,AndroidManifest.xml清单等xml文件打开也是乱码。
     
    需要用到的工具包dex2jar、jd-gui、apktool。
     

    1、 查看源码

    (1) 修改安装包文件.apk为.zip后缀解压,记录classes.dex的路径。
    (2)cmd定位至工具包中的dex2jar,在命令行运行如下:
    结果会在classes.dex所在目录下生成classes_dex2jar.jar,用jd-gui.exe打开此文件,如下: 
    从中我们可以大致了解代码结构,虽然源码经过proguard混淆后可读性很差,但还是可以通过关键字(不可混淆的类名等)查找获取到一定的信息。不过jd-gui无法通过源码查找,只支持查找类型、构造函数、常量、属性、方法。 
     

    2、查看资源文件和xml文件

    (1)下载apktool及对应平台的依赖包,解压后将平台依赖包中的apktool.jar复制到apktool目录下),在命令行运行 命令行:apktool.batd-fxxx.apk xxx
    其中d表示解包,xxx.apk为待反编译apk路径,xxx为目标文件夹名,(apktool不支持中文目录),如下:
    结果会在apktool.bat所在目录下生成weixin文件夹,现在就可以正确的查看xml资源(包括res下的所有资源,如点9图片、drawable、layout、value、menu等等)了,比如AndroidManifest.xml 
     

    3、修改后重新打包成APK 

    依然使用步骤2中的apktool,命令如下 :apktool.batbxxx
    其中b表示build,xxx表示步骤2中解包出来的文件夹,我们可以对某一文件进行修改,重新打包
    打包完成后会在xxx目录下生成build和dist两个文件夹,dist存放重新生成的APK,build存放该APK的具体组成信息。
     

    小Tips

    1. 利用图片的名称对apk破解后的资源文件进行整体搜索。通过Apktool可以得到一堆资源文件。然后Copy到Eclipse的某个工程中。进行搜索,最最有效率的方式(还记得快捷键吧Ctr+H)。
    2.  利用R.java文件中的id号, 将得到的源文件进行搜索. 这个时候, 基本上所使用的元素的位置基本上清楚了。
    3. 当无法定位Activity对应的Layout在哪里时, 这个时候需要用到hierarchyViewer去查看布局。然后结合1和2的信息做交叉理解。(很有必要提及的问题, hierarchyViewer里面涉及的布局, 并非跟Layout的xml完全一致,  在hierarchyViewer中,很容易看到GridView中居然可以包含一个LinearLayout, 这个实际上在XML中,是不允许这样描述的。一般Android是在源码中实现一个GridView包含一个LinearLayout的, 这个时候,不得不利用到上文1和2描述的方法交叉定位).





  • 相关阅读:
    unity, 显示像素图,以及iOS下像素图变模糊解决办法
    unity, iOS集成微信
    unity, PlayerPrefs.GetInt(key,defaultValue)
    unity, 对于Debug.Log输出的log,可以双击定位到代码
    unity, UGUI Image shader
    unity, use particleSystem with UGUI
    unity, UGUI Text fadeIn
    unity, write/read txt file
    unity, get Canvas Scaler referenceResolution
    unity, change parent and keep localPosition or worlPosition
  • 原文地址:https://www.cnblogs.com/linux007/p/5782663.html
Copyright © 2011-2022 走看看