反编译正是对那些APK举行反编写翻译,下载完后并解压缩

手把手教您搞懂Android反编写翻译

转载时请务必证明出处:http://www.iosxxoo.com/2016/06/29/2016-06-29/

① 、反编写翻译代码

1、反编写翻译java代码首先供给下载dex2jar那么些工具,下载地址:https://sourceforge.net/projects/dex2jar/files/目前最新版是2.0,
下载完后并解压缩。2、将要反编写翻译的apk文件重命名为zip格式并解压缩,注意当中的classes.dex文件,它存放了上上下下的java代码,将classes.dex文件拷贝到dex2jar解压后的根目录下。3、打开cmd,进入dex2jar解压后的根目录,执行命令:

d2j-dex2jar classes.dex

如下图:

澳门金冠开户 1dex2jar命令执行完后在相应目录下会扭转classes-dex2jar.jar文件澳门金冠开户 2jar文件4、要查阅java代码,还亟需下载jd-gui以此工具,下载地址:http://jd.benow.ca/,目前最新版是1.4.0,下载完后解压缩,并用**jd-gui.exe**打开上边反编译出来的jar文件:![](https://upload-images.jianshu.io/upload_images/1633070-3bb77b39750f7562.png)java
code到此,已经顺遂的反编写翻译出了java代码那能源文件呢,再回头看一下刚才apk文件对应的解压缩文件,全体的xml文件都以乱码,例如AndroidManifest.xml澳门金冠开户 3AndroidManifest.xml当然要还原原始的能源文件也许有办法的,继续往下看。

前言

反编写翻译外人的程序不是什么样值得炫耀的事,希望我们最为只是兴趣探索,而不是利益驱动。本文首要指标是绕开贰个粗略的激活程序。

贰 、反编写翻译财富

1、要反编译apk中的财富文件,就须求apktool以此工具了,下载地址:http://ibotpeaches.github.io/Apktool/install/,进入下载页面:

澳门金冠开户 4apktool
download依照图中① 、2两条的提醒,下载apktool.bat和apktool.jar那多少个公文,方今风靡的apktool是2.1.1,并放置同一文件夹:澳门金冠开户 5apktool,2、将要反编写翻译的apk文件放到apktool文件夹,打开cmd,进入apktool文件夹目录,执行命令:

apktool d test.apk

如下图:

澳门金冠开户 6apktool
d
test.apk执行成功后,在当前目录下会生成三个test文件夹:澳门金冠开户 7test文件夹目录个中,res文件夹下存放的是反编写翻译出来的富有财富,smali文件夹下存放的是反编写翻译出来的具备代码,AndroidManifest.xml则是由此反编写翻译还原后的manifest文件。smali文件夹下的文件smali文件使用的是Android虚拟机所运用的寄存器语言,即使看的懂smail文件的话,就足以修改源代码的逻辑了,好可怕的事…当然那不是我们根本谈论的。此时翻开AndroidManifest.xml文件,发现已经成功反编写翻译出来了:澳门金冠开户 8AndroidManifest.xml

什么样是反编写翻译

我们领悟,Android的次第打包后会生成3个APK文件,这么些文件能够直接设置到任何Android手提式有线电话机上,因而,反编写翻译便是对那一个APK实行反编写翻译。Android的反编译分成多少个部分:

  1. 2个是对代码反编写翻译,也正是java文件的反编写翻译。
  2. 2个是对资源反编写翻译,也正是res文件的反编写翻译。

③ 、重新打包

1、既然资源文件已经胜利的反编译出来了,那我们就足以适度的修改点东西了,例如换个图标啥的、改下布局文件等,这里我们将AndroidManifest.xml中的channel值改为10001,然后开端重复打包,同样在cmd中切换成apktool文件夹目录,执行命令:

apktool b test -o new_test.apk

如下图:

澳门金冠开户 9重新包装进行成功后,在时下目录会生成三个新的new_test.apk文件:澳门金冠开户 10new_test.apk2、唯独呢,这几个apk文件近期并无法设置,因为要求再行签名。没有签名文件的话,通过Android
Studio能够很不难的变型贰个哦,将准备好的签名文件放到apktool文件夹根目录,继续在cmd执行命令:

jarsigner -verbose -sigalg SHA1with悍马H2SA -digestalg SHA1 -keystore
签名文件名 -storepass 签名密码 待签名的APK文件名 签名的小名

如下图:

澳门金冠开户 11jarsigner
start澳门金冠开户 12jarsigner
success注意,当中jarsigner命令文件是存放在jdk的bin目录下的,须要将bin目录配置在系统的环境变量中才足以在其他职责执行此命令。3、签名完结后,提议对APK文件进行2遍对齐操作,那样能够使得程序在Android系统中运维得更快,对齐操作使用的是zipalign工具,该工具在<Android
SDK>/build-tools/<version>
目录下,供给将那个目录配置到系统环境变量个中才足以在其余地点执行此命令。继续在cmd中执行命令:

zipalign 4 new_test.apk new_test_aligned.apk

实行成功后,会转变三个对齐后的new_test_aligned.apk文件:

澳门金冠开户 13new_test_aligned.apk

4、最终能够通过如下命令验证apk签名是否中标:

jarsigner -verify -verbose -certs new_test_aligned.apk

如下图:

澳门金冠开户 14verify
start澳门金冠开户 15verify
success

到此处apk反编写翻译及重新打包流程就介绍实现了。

**上述用到的工具也能够在此下载哦:反编写翻译及一次打包工具 **

所需的工具

澳门金冠开户 16

反编写翻译代码的工具:

反编写翻译财富的工具:

热身准备

先是大家需求二个APK,那里自身要好写了一个,源码下载地址:http://download.csdn.net/detail/u012891055/9671973,打包成APK后下载到手提式有线电话机上。

它的首要功用是人云亦云邮箱激活,若是我们输入了不当的数量则十分的小概通过激活。所以我们的指标很简短,就是让这么些论断逻辑失效。

澳门金冠开户 17

要害源码表明:

第51行积存的没错的多少个激活号码,通过:将账号密码隔开分离,如下

private static final String[] DUMMY_CREDENTIALS = new String[]{
            "foo@163.com:20135115",
            "bar@163.com:20135115"
};

现今唯有激活码正确才能透过激活。

第331行是Execute函数,逻辑判断的片段。

    @Override
    protected void onPostExecute(final Boolean success) {
        mAuthTask = null;
        showProgress(false);

        if (success) {
            new AlertDialog.Builder(LoginActivity.this)
                    .setTitle("恭喜您")
                    .setMessage("成功激活!")
                    .show();
//                finish();
        } else {
            mPasswordView.setError(getString(R.string.error_incorrect_password));
            mPasswordView.requestFocus();
        }
    }

反编写翻译代码

dex2jar解压下来文件过多,在mac上大家需求用到dex2jar的是那多少个东西(windows上对选择bat文件):

  • d2j_invoke.sh
  • d2j-dex2jar.sh
  • lib

澳门金冠开户 18

AndroidStudio打包好的APK文件的后缀,需改为.zip,然后解压。从解压的文本中找到classes.dex文件,并将其放入dex2jar无差距于目录下,如下:

澳门金冠开户 19

并在cmd中也进入到同一的目录,然后实施:

sh d2j-dex2jar.sh classes.dex

执行如下:

澳门金冠开户 20

下一场大家会得到二个classes-dex2jar.jar文件,大家借助JD-GUI工具打开即可,打开如下:

澳门金冠开户 21

能够看出代码万分明晰,这样大家就能够看到任何APP的代码逻辑了。

反编写翻译财富

apktool下载完结后有三个.sh文件和.jar文件,大家把APK放进来,如下:

澳门金冠开户 22

在cmd中进入apktool目录,执行命令:

sh apktool.sh apktool d FooApp.apk

d是decode的情致,表示大家要对FooApp解码,结果如下:

澳门金冠开户 23

接下来你会惊喜的发现多了一个FooApp文件夹。

澳门金冠开户 24

最首要目录表达:

  • AndroidManifest.xml:描述文件
  • res:财富文件
  • smail:反编写翻译出来的拥有代码,语法与java不一样,类似汇编,是Android虚拟机所采纳的寄存器语言

修改App icon

开拓我们的叙述文件,高清无码:

澳门金冠开户 25

能够看到大家的App
icon名称为ic_launcher,大家找到全体mipmap开端的文本夹,替换到下图即可:

澳门金冠开户 26

ic_launche

澳门金冠开户 27

在最后重复包装后大家的App
icon就会被涂改了,可是在重复打包以前,咱们还有最重庆大学的一件事从未做,那就是修改激活码判断逻辑。

修改逻辑

大家经过源码只怕JD-GUI查看反编写翻译的代码能够看看激活码判断逻辑如下:

    @Override
    protected void onPostExecute(final Boolean success) {
        mAuthTask = null;
        showProgress(false);

        if (success) { 
        // 激活码正确
            new AlertDialog.Builder(LoginActivity.this)
                    .setTitle("恭喜您")
                    .setMessage("成功激活!")
                    .show();
//                finish();
        } else {
            mPasswordView.setError(getString(R.string.error_incorrect_password));
            mPasswordView.requestFocus();
        }
    }

因而大家只需求找到反编译后的if(success)的说话,并将其修改成if(!success)即可,如下:

if (success)//修改成if(!success)
{
...
} else {
...
}

那般大家就水到渠成的颠倒了在此之前的逻辑,大家输入四个不当的激活码,就会被判定成正确的。挺简单的,是啊。

现行反革命我们来出手修改:

  1. 打开smail里的LoginActivity$UserLoginTask.smali文件.

  2. 全局搜索if-eqz,通过AlertDialog重中之重字支持定位,发未来第228行

    澳门金冠开户 28

  3. ok,便是那里了,然后将if-eqz修改成if-nez,他们对应Java的语法如下:

Smail 语法 Java 语法
if-eqz v0, if(v0 == 0)
if-nez v0, if(v0 != 0)

ok,水到渠成,未来就能够重复打包了。关于smail语法,有趣味的直白谷歌就行了。

再一次打包

咱俩大体修改后四个地点,其实重新包装也非凡简短,在cmd中实行以下命令即可:

sh apktool.sh b FooAPP -o NewFooApp.apk

里面b是build的意趣,表示大家要将FooAPP文件夹打包成APK文件,-o用于钦命新变化的APK文件名,那里新的公文叫作NewFooApp.apk。执行结果如下图所示:

澳门金冠开户 29

然后您会发觉同级目录下生成了新的apk文件:

澳门金冠开户 30

只是要小心,这些apk今后依旧无法安装的,因为大家从未对它进行签订契约,重新签名后它正是个名副其实的盗版软件了,大家肯定要分明谴责那种作为。

再度签名

重复签名也是很简单的,作者直接用的三个已有签名文件,使用Android
Studio也许Eclipse都足以十一分简单地生成一个签名文件。

在cmd中实践格式如下:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore 签名文件名 -storepass 签名密码 待签名的APK文件名 签名的别名

接下来我们就足以用这一个apk举办设置了,为了追求更快的运转速度,大家能够对其进展一遍字节对齐,那里就背着了。

接纳盗版APK

我们用NewFooApp.apk安装好盗版app后,发现图标变成了篮球,并且随便输入数据都能因此激活了:

澳门金冠开户 31

1

怎么?总的来说照旧挺有意思的吧,但是别用歪了。

参照链接:

Android安全进攻和防守战,反编写翻译与混淆技术完全解析(上)-
郭霖

Android安全技能解密与预防 –
周圣韬

Done

作者:
澳门金冠开户,@biggergao
民用博客: Mr.码了大漠

2016年06月29日