反编译(未混淆情况)

1.获取资源文件:

命令行界面apktool.bat d -f  test.apk  fileName  (然而修改后缀名为.zip即可获得);

apktool2.0以上版本:apktool.bat d -f  test.apk -o fileName, 有些apk编译失败,可尝试把apktool.jar升级到2.0以上

2.获取源代码:

提取apk -> zip 中的classes.dex文件:dex2jar.bat   classes.dex 获得classes_dex2jar.jar文件

使用 jd-gui.exe查看jar文件查看源码(另外可以用Eclipse反编译插件查看)

3.查看xml文件

aapt d xmltree filepath/..apk  xmlname :  以树型显示apk中某个xml文件

工具下载:链接: http://pan.baidu.com/s/1o6CHvAi 密码: it6s

4.二次打包

apktool.bat b fileName (打包apk放在dist目录),生成到apk并不能安装,需要重签名才能安装

5.重签名

工具:keytool,jarsigner和zipalign这三个工具软件。keytool和jarsigner包含在JDK中,zipalign包含在Android SDK中,环境配置:JAVA_HOME,ANDROID_HOME

生成密钥:keytool -genkey -v -keystore xuhui-key.keystore -alias xuhui-key -keyalg RSA -keysize 2048 -validity 10000

重签名:jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore xuhui-key.keystore test.apk xuhui-key

6.Eclipse jar文件反编译插件

7.修改class文件

反编译后往往得到的是.class文件,通过class反编译为java文件通常容易出错,不如直接修改class文件 ,推荐试用工具:jclasslib

1.装打开jar-然后找到需要修改的class文件或者直接打开jar解压文件中的class文件,

2.使用java bytecode (jclasslib) 查找到要修改的变量地址

3.新建一个工程进行修改:

package com.xuh;

import java.io.*;

import org.gjt.jclasslib.io.ClassFileWriter;
import org.gjt.jclasslib.structures.CPInfo;
import org.gjt.jclasslib.structures.ClassFile;
import org.gjt.jclasslib.structures.constants.ConstantDoubleInfo;

public class ModifyByteCode {
    public void Run() {
        try {
            String filePath = "C:\\Test.class";//需要修改的class文件
            FileInputStream fis = new FileInputStream(filePath);
            DataInput di = new DataInputStream(fis);
            ClassFile cf = new ClassFile();
            cf.read(di);
            CPInfo[] infos = cf.getConstantPool();
            int pos = 123;//变量地址
            if (infos[pos] != null) {
                ConstantDoubleInfo uInfo = (ConstantDoubleInfo) infos[pos];
                uInfo.setDouble(1.0);
                infos[pos] = uInfo;
            }
            cf.setConstantPool(infos);
            fis.close();
            File f = new File(filePath);
            ClassFileWriter.writeToFile(f, cf);
        } catch (Exception e) {

        }
    }
}

参考链接

Android反编译的更多相关文章

  1. Android反编译(三)之重签名

    Android反编译(三) 之重签名 [目录] 1.原理 2.工具与准备工作 3.操作步骤 4.装X技巧 5.问题 1.原理 1).APK签名的要点 a.所有的应用程序都必须有数字证书 ,Androi ...

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

    Android反编译(二) 之反编译XML资源文件 [目录] 1.工具 2.反编译步骤 3.重新编译APK 4.实例 5.装X技巧 6.学习总结 1.工具 1).反编译工具  apktool http ...

  3. Android反编译(一)之反编译JAVA源码

    Android反编译(一) 之反编译JAVA源码 [目录] 1.工具 2.反编译步骤 3.实例 4.装X技巧 1.工具 1).dex反编译JAR工具  dex2jar   http://code.go ...

  4. Atitti.java android反编译解决方案-----虚拟机方案

    Atitti.java android反编译解决方案-----虚拟机方案 哈哈,终极解决方案是虚拟机...c++也可以反编译为汇编代码,但无需担心,因为读懂汇编太麻烦..只要不能拿到c++源码就可.. ...

  5. Android反编译工具的使用-Android Killer

    今天百度搜索“Android反编译”搜索出来的结果大多数都是比较传统的教程.刚接触反编译的时候,我也是从这些教程慢慢学起的.在后来的学习过程中,我接触到比较方便操作的Android反编译.在这,我将使 ...

  6. Android 反编译

    Android 反编译 步骤:1.下载apktool 工具,这一步 主要是反编译 xml 文件. 步骤:2 把xx.smali 文件转为java 工具 (单个) 图形界面 下载dex2jar  和xj ...

  7. 转 谈谈android反编译和防止反编译的方法

    谈谈android反编译和防止反编译的方法   android基于java的,而java反编译工具很强悍,所以对正常apk应用程序基本上可以做到100%反编译还原. 因此开发人员如果不准备开源自己的项 ...

  8. Android 反编译apk 详解

    测试环境: win 7 使用工具: CSDN上下载地址: apktool (资源文件获取)  下载          dex2jar(源码文件获取) 下载        jd-gui  (源码查看)  ...

  9. Android 反编译工具简介

    Android 反编译工具: 所需工具:1 apktool : 用于获取资源文件 2 dex2Jar : 用于将classes.dex转化成jar文件 2 jd-gui: 将jar文件转化成java文 ...

  10. Android反编译教程

    本文摘自 http://blog.csdn.net/ithomer/article/details/6727581 本文Android反编译教程,测试环境: Win7 Ultimate x64 Ubu ...

随机推荐

  1. Sql数据库查询当前环境有无死锁

    DECLARE @spid INT , @bl INT , @intTransactionCountOnEntry INT , @intRowcount INT , @intCountProperti ...

  2. Java并发编程:深入剖析ThreadLocal

    原文出处: 海 子 想必很多朋友对ThreadLocal并不陌生,今天我们就来一起探讨下ThreadLocal的使用方法和实现原理.首先,本文先谈一下对ThreadLocal的理解,然后根据Threa ...

  3. jQuery中animate的height的自适应

    可以用 animate() 方法几乎可以操作大部分CSS 属性,但其属性的值不能为字符串,很多人都遇到过这个问题.   例如:获取一个元素自适应时的高,但el.animate({height:‘aut ...

  4. DOM与CSS样式表

    在前文 <DOM与元素节点内联样式>中我们了解了用 DOM 提供的接口操作元素节点内联样式的方法,今天我们来学习一下如何用 DOM 操作 CSS 样式表. CSS 样式表概况 通过使用 H ...

  5. SQL Server2008创建约束图解

    机房收费系统个人重构版开始了,但在设计数据库时遇到了写小麻烦,主要是数据库中约束的应用,以前在学习数据库时进行了总结,在刚开始学习时使用的是SQL Server2000 小操作了下,查证了几种约束的作 ...

  6. [学习笔记] Dispose模式

    Dispose模式是.NET中很基础也很重要的一个模式,今天重新复习一下相关的东西并记录下来. 什么是Dispose模式? 什么时候我们该为一个类型实现Dispose模式 使用Dispose模式时应该 ...

  7. MySQL+Keepalived实现双机HA

    host1与host3互为主从,即host1为host3的主机,同时也为host3的从机   host1 192.168.203.131 host2 192.168.203.132 host3 192 ...

  8. Linux串口设置及编程(转)

    用户常见的数据通信的基本方式可分为并行通信和串行通信. 并行通信是指利用多条数据传输线将一个资料的各位同时传送.特点是传输速度快,适用于短距离通信,但要求传输速度较高的应用场合. 串行通信是指利用一条 ...

  9. device framework(设备框架)

    Table A-1  Device frameworks Name First available Prefixes Description Accelerate.framework 4.0 cbla ...

  10. 避免JS全局变量冲突

    一.原则1.1 用匿名函数将脚本包起来1.2 使用命名空间(多级) 二.改进过程 2.1 原始数据(a.js和b.js都有全局变量window.a,导致冲突,全局变量属于window) //a.js& ...