zoukankan      html  css  js  c++  java
  • jQueryrocket

    瘟疫期期间,闲来无事,从手机系统中提取了SystemUI.apk文件,打开查看发现乱码,于是尝试反编译apk。

    准备工作:

    0.首先确保使用java 1.8或以上

    1.下载运行脚本并重命名为apktool.bat,下载地址(官网):https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/windows/apktool.bat

    2.下载最新的apktool并重命名为apktool.jar,下载地址:https://bitbucket.org/iBotPeaches/apktool/downloads/

    3.放在一个文件夹,双击运行apktool.bat,会输出用法

    4.反编译apk,命令格式:apktool d [ apk文件名 ]

    Windows:
    下载Windows 包装程序脚本(右键单击,将链接另存为apktool.bat)
    下载apktool-2(在这里找到最新的)
    将下载的jar重命名为 apktool.jar
    将两个文件(apktool.jar&apktool.bat)移至Windows目录(通常为C://Windows)
    如果您无权访问C://Windows,则可以将两个文件放在任何位置,然后将该目录添加到环境变量系统PATH变量中。
    尝试apktool通过命令提示符运行。

    注意 -包装脚本不是必需的,但很有用,因此您不必java -jar apktool.jar一遍又一遍地输入。在修改之前首先对APK文件内部结构有个了解:AndroidManifest.xml 程序全局配置文件classes.dex 这是Dalvik字节码

    resources.arsc 编译后的二进制资源文件
    META-INF 该目录下存放的是签名信息
    res 该目录存放资源文件
    assets 该目录可以存放一些配置文件
    AndroidManifest.xml对应这些文件和目录做些基本的注释和介绍:

    使用命令:apltool d SystemUI.apk

    但是发现报错:

    Can't find framework resources for package of id: 2. You must install proper framework files, see project website for more info.

    错误提示:该错误原因提示我们不能找到id=2的框架包资源,必须安装正确的框架(framework)文件;

    分析报错原因:反编译的apk针对特定的框架做了适配,依赖framework中部分资源文件,在反编译过程中未找到相关的文件所以报错。

    尝试解决:
    由上述分析可知,当发生此类错误时,需要我们首先安装依赖的框架资源文件,然后再执行反编译。

    以honor v10为例,都在framework文件夹里面,里面有两个apk:framework-res.apk、framework-res-hwext,把整个framework文件夹提取出来,

    执行安装命令

    apktool if  apkname 

    之后再次尝试反编译SystemUI.apk

    此时我们现在安装的framework resource与报错信息中的id一致,说明已找到正确的framework resource。

    但,之后还是报错,如下:

    S: Could not decode file, replacing by FALSE value: drawable-hdpi-v4/flashlight_bt_off.png
    I: Decoding values */* XMLs...
    Exception in thread "main" java.lang.NullPointerException
    at brut.androlib.res.data.value.ResEnumAttr.serializeBody(ResEnumAttr.java:56)
    at brut.androlib.res.data.value.ResAttr.serializeToResValuesXml(ResAttr.java:64)
    at brut.androlib.res.AndrolibResources.generateValuesFile(AndrolibResources.java:742)
    at brut.androlib.res.AndrolibResources.decode(AndrolibResources.java:263)
    at brut.androlib.Androlib.decodeResourcesFull(Androlib.java:129)
    at brut.androlib.ApkDecoder.decode(ApkDecoder.java:124)
    at brut.apktool.Main.cmdDecode(Main.java:170)
    at brut.apktool.Main.main(Main.java:76)

    不知道为什么执行一半就终止了,后来发现部分xml的乱码已经可见代码,但是是一些放油png等资源文件及目录没有出来。

    查看apk文件目录发现有一个:resources.arsc,打开出现乱码,没想到转化明文的方法(似乎被加密了)。

    应该就是它的问题,尝试打开出现:The file is not dispalyed in the edior because it is either bianry or uses an unsupported text encoding.Doyou want to open it anyway? 

    目前尚未想到好的解决方案。

    希望各位大佬看到给予指导。本文处于分享学习交流的目的,玩耍反编译还望恪守律己。

  • 相关阅读:
    js遍历Object所有属性
    使用JAVA开发微信公众平台(一)——环境搭建与开发接入
    使用Vue.js实现列表选中效果
    c#以POST方式模拟提交表单
    vue项目里的日期格式化
    Hadoop概念学习系列之Hadoop、Spark学习路线(很值得推荐)
    CentOS下的Mysql的安装和使用
    CentOS中zip压缩和unzip解压缩命令详解
    vue路由跳转传参数
    Linux上安装Hadoop集群(CentOS7+hadoop-2.8.0)
  • 原文地址:https://www.cnblogs.com/kaspar/p/12361568.html
Copyright © 2011-2022 走看看