您的位置:首页 > 移动开发 > Android开发

Android反编译

2015-09-15 11:27 344 查看
反编译(未混淆情况)

1.获取资源文件:

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

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

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.二次打包

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

5.重签名

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

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

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

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) {

}
}
}


参考链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: