0%

在mac OS上反编译安卓apk包

前言

一般上架的安卓apk都会做混淆和加固,如果两个都不做那么被别人反编译后就可以直接看到源码了.而混淆后,那些函数名就会变成一些如”a”,”b”,”c”之类无意义的名称,并且还会添加一些无意义的代码逻辑.从而大大提高了破解的难度,但是花点时间还是能够看懂一些逻辑的.因此为了让apk更加难以反编译,加固也很重要.加固后要想反编译则更加费时,费劲.本文仅仅是自己做个记录,所以不牵涉到对加固后的apk进行反编译.

工具

Apktool

资源反编译,获取apk里面的资源.如果你仅仅只是想获取里面的资源,可不必使用该工具,直接解压缩源apk就可以了.
note:使用Apktool处理后的和直接解压缩后的里面的文件内容还是不一样的,比如里面的AndroidManifest.xml文件,Apktool处理后的就能够读懂,否则是一些乱码.

Apktool安装

按照官网说明,下载后会得到两个文件apktoolapktool.jar,需要注意的是必须赋予这两个文件可执行权限.使用命令chmod +x 对应文件名即可.最后将这两个文件拖入/usr/local/bin文件夹中.

Apktool使用

命令:apktool d 对应apk路径.
执行完毕后,会得到一个同名的文件夹,里面就是一些资源了.找到里面的classes.dex文件,后面代码反编译会用到.

dex2jar

代码反编译,得到classes-dex2jar.jar文件.

dex2jar使用

下载后会得到一个dex2jar-2.0文件夹.这里需要用到里面的lib,d2j_invoke.sh,d2j-dex2jar.sh.
将这三个文件及上面获得的classes.dex文件拖入同一个文件夹目录.
使用命令: sh d2j-dex2jar.sh classes.dex
此时在该目录下会得到一个classes-dex2jar.jar文件.这个文件后面会用到.

jd-gui

下载后会得到一个jd-gui-osx-1.4.0文件夹,双击里面的JD-GUI文件,打开后将上述classes-dex2jar.jar文件拖入其中.就可以看到啦!
note:你的Mac必须安装了Java环境.

效果

目录:
目录

部分代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
private void a(int paramInt, boolean paramBoolean)
{
Observable.a(new FavoriteBean(Integer.valueOf(paramInt), Boolean.valueOf(paramBoolean))).a(new Func1()
{
public String a(FavoriteBean paramAnonymousFavoriteBean)
{
if (paramAnonymousFavoriteBean.getKeepAble().booleanValue()) {
BasicActivity.f(BasicActivity.this).add(0, paramAnonymousFavoriteBean.getId());
}
for (;;)
{
return "";
Iterator localIterator = BasicActivity.f(BasicActivity.this).iterator();
if (localIterator.hasNext())
{
Integer localInteger = (Integer)localIterator.next();
if (!localInteger.equals(paramAnonymousFavoriteBean.getId())) {
break;
}
BasicActivity.f(BasicActivity.this).remove(localInteger);
}
}
}
}).b(Schedulers.computation()).a(AndroidSchedulers.a()).a(new Action1()
{
public void a(String paramAnonymousString) {}
});
}
觉得文章有帮助可以打赏一下哦!