895959.com下载完后并解压缩,Android的次序打包后会生成3个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,进入dex贰jar解压后的根目录,执行命令:

d2j-dex2jar classes.dex

如下图:

895959.com 1dex贰jar命令执行完后在对应目录下会变动classes-dex2jar.jar文件895959.com 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.xml895959.com 3AndroidManifest.xml当然要还原原始的能源文件只怕有点子的,继续往下看。

前言

反编写翻译外人的程序不是什么值得炫耀的事,希望大家最为只是兴趣探索,而不是利益驱动。本文主要目标是绕开3个简单易行的激活程序。

二、反编写翻译财富

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

895959.com 4apktool
download根据图中壹、2两条的提示,下载apktool.bat和apktool.jar那四个文件,如今流行的apktool是二.1.一,并置于同一文件夹:895959.com 5apktool,2、将要反编写翻译的apk文件放到apktool文件夹,打开cmd,进入apktool文件夹目录,执行命令:

apktool d test.apk

如下图:

895959.com 6apktool
d
test.apk执行成功后,在当前目录下会变卦1个test文件夹:895959.com 7test文件夹目录当中,res文件夹下存放的是反编写翻译出来的具有能源,smali文件夹下存放的是反编写翻译出来的享有代码,AndroidManifest.xml则是通过反编写翻译还原后的manifest文件。smali文件夹下的文书smali文件使用的是Android虚拟机所使用的寄存器语言,要是看的懂smail文件的话,就足以修改源代码的逻辑了,好可怕的事…当然这不是我们第三谈论的。此时查阅AndroidManifest.xml文件,发现早已成功反编写翻译出来了:895959.com 8AndroidManifest.xml

怎么着是反编写翻译

我们领略,Android的主次打包后会生成贰个APK文件,那几个文件能够一贯设置到任何Android手提式有线电话机上,因而,反编写翻译正是对那么些APK实行反编写翻译。Android的反编写翻译分成三个部分:

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

3、重新打包

1、既然能源文件已经顺利的反编译出来了,那大家就足以适用的改动点东西了,例如换个图标啥的、改下布局文件等,那里大家将AndroidManifest.xml中的channel值改为10001,然后先导重复打包,同样在cmd中切换到apktool文件夹目录,执行命令:

apktool b test -o new_test.apk

如下图:

895959.com 9重新打包进行成功后,在眼下目录会生成一个新的new_test.apk文件:895959.com 10new_test.apk2、不过呢,这么些apk文件如今并不可能设置,因为急需再一次签名。未有签名文件的话,通过Android
Studio可以很简短的成形3个啊,将准备好的签名文件放到apktool文件夹根目录,继续在cmd执行命令:

jarsigner -verbose -sigalg SHA一with卡宴SA -digestalg SHA一 -keystore
签名文件名 -storepass 签名密码 待签名的APK文件名 签名的别称

如下图:

895959.com 11jarsigner
start895959.com 12jarsigner
success注意,当中jarsigner命令文件是存放在在jdk的bin目录下的,必要将bin目录配置在系统的环境变量中才能够在其它岗位执行此命令。3、署名完成后,建议对APK文件进行二次对齐操作,那样能够使得程序在Android系统中运转得越来越快,对齐操作使用的是zipalign工具,该工具在<Android
SDK>/build-tools/<version>
目录下,供给将以此目录配置到系统环境变量在这之中才足以在其他地点执行此命令。继续在cmd中执行命令:

zipalign 4 new_test.apk new_test_aligned.apk

施行成功后,会扭转3个对齐后的new_test_aligned.apk文件:

895959.com 13new_test_aligned.apk

4、末尾能够通过如下命令验证apk签名是或不是中标:

jarsigner -verify -verbose -certs new_test_aligned.apk

如下图:

895959.com 14verify
start895959.com 15verify
success

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

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

所需的工具

895959.com 16

反编译代码的工具:

反编写翻译财富的工具:

热身准备

先是我们须要1个APK,那里本身要好写了2个,源码下载地址:http://download.csdn.net/detail/u012891055/9671973,打包成APK后下载到手机上。

它的重大作用是模拟邮箱激活,如若大家输入了错误的多寡则无从透过激活。所以我们的目标很不难,正是让那一个判断逻辑失效。

895959.com 17

第二源码表达:

第51行存款和储蓄的正确性的两个激活号码,通过:将账号密码隔断,如下

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

今天唯有激活码正确才能因此激活。

第331行是Execute函数,逻辑判断的1对。

    @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();
        }
    }

反编译代码

dex②jar解压下来文件过多,在mac上大家要求用到dex2jar的是那三个东西(windows上对接纳bat文件):

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

895959.com 18

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

895959.com 19

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

sh d2j-dex2jar.sh classes.dex

执行如下:

895959.com 20

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

895959.com 21

能够看出代码相当清晰,那样大家就可以看到全部应用程式的代码逻辑了。

反编写翻译财富

apktool下载达成后有一个.sh文件和.jar文件,大家把APK放进来,如下:

895959.com 22

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

sh apktool.sh apktool d FooApp.apk

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

895959.com 23

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

895959.com 24

重中之重目录表明:

  • AndroidManifest.xml:描述文件
  • res:财富文件
  • smail:反编写翻译出来的持有代码,语法与java分裂,类似汇编,是Android虚拟机所选用的寄存器语言

修改App icon

开拓大家的描述文件,高清无码:

895959.com 25

能够看来我们的App
icon名称叫ic_launcher,大家找到全部mipmap先导的文件夹,替换到下图即可:

895959.com 26

ic_launche

895959.com 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行

    895959.com 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的意思,表示大家要将Foo应用程式文件夹打包成APK文件,-o用于钦赐新转变的APK文件名,那里新的公文叫作NewFooApp.apk。执行结果如下图所示:

895959.com 29

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

895959.com 30

不过要注意,那些apk现在依旧不可能设置的,因为我们从来不对它举行签字,重新签名后它便是个名副其实的盗版软件了,大家肯定要驾驭声讨那种作为。

双重签名

再一次签名也是很简短的,笔者从来用的一个已有签名文件,使用Android
Studio或许Eclipse都足以分外简单地生成3个签名文件。

在cmd中施行格式如下:

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

下一场我们就足以用这一个apk举行安装了,为了追求更加快的运作速度,大家得以对其展开贰次字节对齐,那里就隐瞒了。

利用盗版APK

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

895959.com 31

1

怎么?总的来说照旧挺有趣的呢,可是别用歪了。

参考链接:

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

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

Done

作者:
@biggergao
民用博客: Mr.码了大漠

2016年06月29日