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 "%~dp0\apktool.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

Android反编译(二)之反编译XML资源文件的更多相关文章

  1. (转载)Android xml资源文件中@、@android:type、@*、?、@+引用写法含义以及区别

    原帖地址:http://blog.csdn.net/zfrong/article/details/7332545 Android xml资源文件中@.@android:type.@*.?.@+引用写法 ...

  2. res文件夹及xml资源文件详解

    目录 一.values文件:存放字符串(strings).颜色(colors).尺寸(dimens).数组(arrays).样式(styles类似于CSS文件).类型等资源 二.drawable:存放 ...

  3. Android将Activity 打 jar包 (解决资源文件不能打包的问题)

    转载地址:http://blog.csdn.net/xiaanming/article/details/9257853 最近有一个需要,我们公司做了一个apk客户端,然后其他的公司可以根据自己的需要来 ...

  4. Android 开发手记二 C可执行程序编译实例(转帖)

    http://www.cnblogs.com/gaozehua/archive/2011/09/02/2164077.html

  5. Android xml资源文件中@、@android:type、@*、?、@+含义和区别

    一.@代表引用资源 1.引用自定义资源.格式:@[package:]type/name android:text="@string/hello" 2.引用系统资源.格式:@andr ...

  6. 【转】Android xml资源文件中@、@android:type、@*、?、@+含义和区别

    一.@代表引用资源 1.引用自定义资源.格式:@[package:]type/name android:text="@string/hello" 2.引用系统资源.格式:@andr ...

  7. idea中maven项目xml资源文件无法读取

    解决方法:编辑pom.xml文件 添加如下标签 <build> <resources> <resource> <directory>src/main/j ...

  8. 使用PULL方式解析XML资源文件下面的xml文件

    public class MainActivity extends Activity { private Button btn = null; private List<Map<Strin ...

  9. kettle 导入xml 资源文件

    Repository | ExploreRight click the root node of the repositorySelect Import objects from an XML fil ...

随机推荐

  1. unity初始篇 选择游戏对象

    之前两任社长都在一直强调要写博客,一直没有写过,现在我已经踏上了博客的道路! 首先声明:本人才疏学浅,对unity认识不深,有错误的地方欢迎大家指出,在此谢过! 本文所说的选择对象,是指在游戏过程中动 ...

  2. winform 子报表

    public void BindReport(string _invno,string _type)         {             if (!Is_Has_Express_No(_inv ...

  3. MySql Windws 下自动备份脚本

    这几天正在做一个  使用MySQL数据库的项目,目前项目已经完成了,当部署好项目之后,正在考虑如何自动备份MySql数据库的问题,我在网上找了一下资料终于解决了,特此记录一下. @echo off e ...

  4. 微软正式发布Visual Studio 2013 Update 3 (2013.3) RTM

    昨天微软的Visual Studio 2013 Update 3(Visual Studio 2013.3)正式发布(RTM)了,做为微软认证金牌合作的葡萄城控件,我们组织力量第一时间进行翻译.分享给 ...

  5. 《静静的dojo》 总体教程介绍

    web2.0时代,ajax技术成为整个前端开发领域的基石.大部分的书籍.博客由此切入来介绍前端类库与框架,所以dojo往往只被当做一个ajax类库来介绍,然而仅仅以此来定位dojo,无异于管中窥豹.对 ...

  6. java提高篇(七)-----关键字static

    一. static代表着什么 在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个“伪全局”的概念,在Java中static表示“全局”或者“静态”的意思,用来修饰成员变量和成员 ...

  7. 在.net中使用aquiles访问Cassandra(一)

    aquiles是.net下基于Thrift协议访问Cassandra的第三方类库,官方地址是: http://aquiles.codeplex.com/   1.下载类库文件: http://aqui ...

  8. DDD~领域事件应用篇(订单处理变得更清晰)

    回到目录 上一讲主要说了领域事件和领域总线,这并不是一个很容易理解的文章,所以本讲实例篇主要是为了补充上一讲的理论知识,本讲实例关注的是实际中的订单处理模块,我们知道,订单处理是电子商务的核心,往往在 ...

  9. Atitit 项目中的勋章体系,,mvp建设 ,荣典体系建设

    Atitit 项目中的勋章体系,,mvp建设 ,荣典体系建设 1. 荣典体系的标准1 2. 勋章称号1 2.1.1. 授予标准1 3. 政出多门  统一的荣誉制度 2 3.1. 法则规定2 3.2. ...

  10. SQL Server 2012 数据库笔记

    慕课网 首页 实战 路径 猿问 手记     Python 手记 \ SQL Server 2012 数据库笔记 SQL Server 2012 数据库笔记 2016-10-25 16:29:33 1 ...