• Android反编译(二)之反编译XML资源文件


    Android反编译(二)

    之反编译XML资源文件

    [目录]

    1、工具

    2、反编译步骤

    3、重新编译APK

    4、实例

    5、装X技巧

    6、学习总结

      

    1、工具

    1).反编译工具 

    apktool http://code.google.com/p/android-apktool/downloads/list

     

    命令:

       apktool d [目标.apk] [目标文件夹]           ---------反编译(decode)
       apktool b [文件夹] [编译之后的名称.apk]---------编译(buid)
       apktool if framework-res.apk                  --------加载资源(install framework) 

    2、反编译步骤

    步骤1:将目标apk包,拷贝至apktool工具目录下
    步骤2:CMD进入apktool文件夹,运行反编译命令
     CMD>apktool d Thinkdirve.apk  APK_SRC
    (意思是将Thinkdirve.apk解包到当前APK_SRC目录下,APK_SRC文件夹不用创建,会自动生成)

    3、重新编译APK

    步骤1:将修改后资源文件后(APK_SRC)的文件夹重命名ThinkDrive_src
    步骤2:CMD进入apktool文件夹, 运行打包命令

                CMD>apktool b ThinkDrive_src ThinkDrive_src.apk

     (注:重新编译后的APK需要重签名)

    4、实例

    >【例:反编译ThinkDrive.apk】

    步骤1:将ThinkDrive.apk拷贝至apktool文件夹

      

    步骤2:CMD进入apktool文件夹,运行反编译命令 

    结果:

     


     >【例:重新编译ThinkDrive.apk】

     步骤1:将修改后资源文件后(APK_SRC)的文件夹重命名ThinkDrive_src

     

    步骤2:CMD进入apktool文件夹, 运行编译命令

    结果:

     

    5、装X技巧

    写个批处理,双击运行,自动反编译当前目录下的所有apk,高端大气上档次,低调奢华有内涵啊~~~~

    [apktool.bat] <--运行不了apktool时把这个下到apktool.jar所在目录
    @echo off
    set PATH=%CD%;%PATH%;
    java -jar "%~dp0apktool.jar" %1 %2 %3 %4 %5 %6 %7 %8 %9   

    [反编译.bat

    @ECHO OFF
    SETLOCAL ENABLEDELAYEDEXPANSION 
     REM 作者:Findyou
     REM 时间:2013.11.22
     REM SET C_PATH=%CD%
     FOR %%I IN (*.apk) DO (
         ECHO [反编译 %%I]
         ECHO --------------------------------
         REM 检查文件夹,如果已存在则先删除
         SET SRT=%%I
    IF EXIST "!SRT:~0,-4!_src" (
    ECHO [检查存在目标文件夹] 
    ECHO [删除!SRT:~0,-4!_src]
    RD /S /Q !SRT:~0,-4!_src
    )
    ECHO [反编译开始...]
    ECHO -------------------------------
    ECHO apktool d !SRT! !SRT:~0,-4!_src
    ECHO -------------------------------
    REM apktool d %C_PATH%!SRT! %C_PATH%!SRT:~0,-4!_src
    CALL apktool.bat d !SRT! !SRT:~0,-4!_src
    ECHO -------------------------------
    ECHO [反编译完成]
    ECHO.
      )
     PAUSE
     @ECHO ON

    6、学习总结

    1)、什么是反编译和编译
        反编译就是把apk解包成可修改的文件
        编译(此处单指反编译后的重新编译)就是把修改过的东西重新打包
    2)、为什么要反编译?
        稍微懂点的,都知apk的文件可以直接用rar打开。但是如果直接用rar打开xml文件全都是乱码呢?

    3)、什么时候需要反编译?

    程序主要分2种: a).系统应用软件;b).第三方apk应用。

    我们在美化或者汉化或者去广告之类的时候,主要做的动作有2种:

    a).替换图片:如果只是替换图片,我们不需要反编译,替换相应的图片(注意名称和格式和分辨率一致),就可以了,这个时候只需要使用rar来做就好了。
    b).修改xml文件:除去图片文件,apk应用里我们能折腾的就是xml文件了。如上面所说的,如果用rar打开xml文件,是乱码,所以这个时候我们就需要反编译了。
    4)、什么是签名? 
           为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package Name来混淆替换已经安装的程序,我们需要对我们发布的APK文件进行唯一签名,保证我们每次发布的版本的一致性(如自动更新不会因为版本不一致而无法安装)。我们看到的META-INF文件夹就是签名的文件夹。

    5)、什么时候需要签名?

    a).如果是系统apk应用。
       如果仅仅是替换图片,不需要反编译,也不需要重新签名,直接用rar替换就可以.
       如果进行了反编译,修改完xml文件之后,我们需要把他重新编译回去。编译好的应用不能直接放入手机内用,因为系统只认识他给的签名,而我们自己签名是不被认可的。
       处理方法:我们把之前从系统拿出来的原版apk起名为a.apk,把自己修改完毕,并且编译的好的应用起名为b.apk。用rar打开a.apk和b.apk,然后把b.apk里的resources.arsc文件直接拖到a.apk的压缩包里,然后把更换的图片以及修改过的XML文件也替换进去。 这个时候,我们做的相当于仅仅替换了一些资源,我们还是用a.apk的签名。替换完之后,就可以直接使用了。如果有的时候修改过smali文件夹,就需要把class.dex文件也copy过去。
    b).如果是第三方apk应用
       第三方的apk应用,不管你修改了图片还是反编译了,都需要重新签名。方法是把META-INF里面的除了COM文件夹都删掉,就是删掉MF,SF,RSA这三个后缀名的文件然后使用工具签名。安装的时候要把原有的应用删掉再安装。

    6)、签名工具

    签名生成:keytool

    重新签名:jarsigner

    优化APK:zipalign

     重签名,下篇有时间再写博分享。


     转载请注明出处:Findyou

  • 相关阅读:
    洛谷-P1496 火烧赤壁
    洛谷-P5638 【CSGRound2】光骓者的荣耀
    Java多线程实现
    linux安装mysql 8的完整过程
    tomcat安装
    C#之Null
    JToken
    初识算法之线性表---双向列表
    初识算法之线性表---链表定义/结构(2)
    初识算法之线性表---链表定义/结构(1)
  • 原文地址:https://www.cnblogs.com/findyou/p/3450721.html
Copyright © 2020-2023  润新知