Android Studio 自带了Java Bytecode Decompiler
对于第三方的jar只能反编译出其函数名
例如:andbase里的com.kfb.c.jar下的com.kfb.c下的a
package com.kfb.c;
public final class a {
private static boolean a;
public a() { /* compiled code */ }
static void a(android.content.Context context) { /* compiled code */ }
public static java.lang.Class a(android.content.Context context, java.lang.Class aClass) { /* compiled code */ }
}
内容很少只有基本的名称
1.安装反编译工具jd-inteIIij
下载:https://plugins.jetbrains.com/plugin/7100-java-decompiler-intellij-plugin
jd-intellij-0.6.zip
File-->Settings-->Plugins-->Install plugin from disk
选择jd-intellij-0.6.zip的路径
安装好后重启as
InteIIij Plugin
2.卸载
找到Java Decompiler InteIIiJ Plugin后
点击Unistall
3.使用
直接打开.class或.jar查看源码
再次查看andbase里的com.kfb.c.jar下的com.kfb.c下的a
package com.kfb.c;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public final class a {
private static boolean a = false;
public a() {
}
static void a(Context var0) {
String var1 = "";
try {
var1 = new String(b.a("bXlpbWdz"));
} catch (IOException var29) {
var29.printStackTrace();
}
d.a(var0);
File var2;
int var36 = (var2 = var0.getDir(var1, 0)).listFiles().length;
if(!var2.exists() || var36 != 50 && var36 != 51) {
InputStream var37 = null;
ZipInputStream var3 = null;
DataInputStream var4 = null;
boolean var19 = false;
label245: {
try {
var19 = true;
String var38 = var2.getAbsolutePath();
var37 = var0.getAssets().open(d.b);
byte[] var32 = new byte[(var4 = new DataInputStream(var37)).readInt()];
var4.read(var32);
var4.readInt();
var3 = new ZipInputStream(var4);
while(true) {
ZipEntry var33;
while((var33 = var3.getNextEntry()) != null) {
........................................................
这个功能和jd-GUI功能一样了
使用d2j把class.dex转换成classes-dex2jar.jar
d2j-dex2jar.sh classes.dex
把jar包导入Android studio即可查看.class的源代码了
4.dex2jar下载
https://sourceforge.net/projects/dex2jar/files/
最新版为dex2jar-2.0,把dex文件转换成jar文件
5.反编译资源
apktool 这个工具用于最大幅度地还原APK文件中的9-patch图片、布局、字符串等等一系列的资源
http://ibotpeaches.github.io/Apktool/install/
linux版本下载:
https://bitbucket.org/iBotPeaches/apktool/downloads/
脚本https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/linux/apktool保存为apktool
使用:
mv apktool_2.3.0.jar apktool.jar
放在同一个目录下
# ls apktool*
apktool apktool_2.3.0.jar
解码资源文件
# apktool d SerialDemo.apk
I: Using Apktool 2.3.0 on SerialDemo.apk
I: Loading resource table...
I: Decoding AndroidManifest.xml with resources...
S: WARNING: Could not write to (/root/.local/share/apktool/framework), using /tmp instead...
S: Please be aware this is a volatile directory and frameworks could go missing, please utilize --frame-path if the default storage directory is unavailable
I: Loading resource table from file: /tmp/1.apk
I: Regular manifest package...
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Baksmaling classes.dex...
I: Copying assets and libs...
I: Copying unknown files...
I: Copying original files...
对于第三方的jar只能反编译出其函数名
例如:andbase里的com.kfb.c.jar下的com.kfb.c下的a
package com.kfb.c;
public final class a {
private static boolean a;
public a() { /* compiled code */ }
static void a(android.content.Context context) { /* compiled code */ }
public static java.lang.Class a(android.content.Context context, java.lang.Class aClass) { /* compiled code */ }
}
内容很少只有基本的名称
1.安装反编译工具jd-inteIIij
下载:https://plugins.jetbrains.com/plugin/7100-java-decompiler-intellij-plugin
jd-intellij-0.6.zip
File-->Settings-->Plugins-->Install plugin from disk
选择jd-intellij-0.6.zip的路径
安装好后重启as
InteIIij Plugin
2.卸载
找到Java Decompiler InteIIiJ Plugin后
点击Unistall
3.使用
直接打开.class或.jar查看源码
再次查看andbase里的com.kfb.c.jar下的com.kfb.c下的a
package com.kfb.c;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public final class a {
private static boolean a = false;
public a() {
}
static void a(Context var0) {
String var1 = "";
try {
var1 = new String(b.a("bXlpbWdz"));
} catch (IOException var29) {
var29.printStackTrace();
}
d.a(var0);
File var2;
int var36 = (var2 = var0.getDir(var1, 0)).listFiles().length;
if(!var2.exists() || var36 != 50 && var36 != 51) {
InputStream var37 = null;
ZipInputStream var3 = null;
DataInputStream var4 = null;
boolean var19 = false;
label245: {
try {
var19 = true;
String var38 = var2.getAbsolutePath();
var37 = var0.getAssets().open(d.b);
byte[] var32 = new byte[(var4 = new DataInputStream(var37)).readInt()];
var4.read(var32);
var4.readInt();
var3 = new ZipInputStream(var4);
while(true) {
ZipEntry var33;
while((var33 = var3.getNextEntry()) != null) {
........................................................
这个功能和jd-GUI功能一样了
使用d2j把class.dex转换成classes-dex2jar.jar
d2j-dex2jar.sh classes.dex
把jar包导入Android studio即可查看.class的源代码了
4.dex2jar下载
https://sourceforge.net/projects/dex2jar/files/
最新版为dex2jar-2.0,把dex文件转换成jar文件
5.反编译资源
apktool 这个工具用于最大幅度地还原APK文件中的9-patch图片、布局、字符串等等一系列的资源
http://ibotpeaches.github.io/Apktool/install/
linux版本下载:
https://bitbucket.org/iBotPeaches/apktool/downloads/
脚本https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/linux/apktool保存为apktool
使用:
mv apktool_2.3.0.jar apktool.jar
放在同一个目录下
# ls apktool*
apktool apktool_2.3.0.jar
解码资源文件
# apktool d SerialDemo.apk
I: Using Apktool 2.3.0 on SerialDemo.apk
I: Loading resource table...
I: Decoding AndroidManifest.xml with resources...
S: WARNING: Could not write to (/root/.local/share/apktool/framework), using /tmp instead...
S: Please be aware this is a volatile directory and frameworks could go missing, please utilize --frame-path if the default storage directory is unavailable
I: Loading resource table from file: /tmp/1.apk
I: Regular manifest package...
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Baksmaling classes.dex...
I: Copying assets and libs...
I: Copying unknown files...
I: Copying original files...