图片 33

手把手教你搞懂Android反编写翻译,反编写翻译apk与重新打包

Posted by

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

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

一、反编写翻译代码

1、反编写翻译java代码首先须求下载dex2jar本条工具,下载地址:
下载完后并解压缩。2、就要反编写翻译的apk文件重命名字为zip格式并解压缩,注意在那之中的classes.dex文本,它存放了上上下下的java代码,将classes.dex文件拷贝到dex二jar解压后的根目录下。3、展开cmd,进入dex二jar解压后的根目录,实践命令:

d2j-dex2jar classes.dex

如下图:

图片 1dex2jar命令施行完后在相应目录下会扭转classes-dex2jar.jar文件图片 2jar文件4、要查看java代码,还必要下载jd-gui其1工具,下载地址:
code到此,已经胜利的反编写翻译出了java代码那能源文件呢,再回头看一下刚才apk文件对应的解压缩文件,全数的xml文件都是乱码,比如AndroidManifest.xml图片 3AndroidManifest.xml当然要还原原始的能源文件可能有点子的,继续往下看。

壹、反编写翻译出源码

一.反编写翻译java代码需要先下载dex2jar工具,下载最新版本后解压。

二.就要反编写翻译的apk文件重命名称为zip格式并解压缩,注意当中的classes.dex文件,它存放了全体的java代码,将classes.dex文件拷贝到dex二jar解压后的根目录下。

三、张开cmd,进入dex二jar解压后的根目录,试行命令:

d2j-dex2jar classes.dex

图片 4

示例图

指令执行完后在相应目录下会生成classes-dex贰jar.jar文件
四.要翻看java代码,还索要下载jd-gui其一工具,下载地址:http://jd.benow.ca/,近年来流行版是一.四.0,下载完后解压缩,并用jd-gui.exe展开下面反编译出来的jar文件

前言

反编写翻译旁人的次序不是何等值得炫丽的事,希望大家最为只是兴趣探寻,而不是收益驱动。本文首要目的是绕开1个不难易行的激活程序。

2、反编写翻译能源

1、要反编写翻译apk中的能源文件,就要求apktool这一个工具了,下载地址:

图片 5apktool
download根据图中一、贰两条的提示,下载apktool.bat和apktool.jar那八个文本,近来风行的apktool是2.1.一,并内置同一文件夹:图片 6apktool,2、就要反编写翻译的apk文件放到apktool文件夹,展开cmd,进入apktool文件夹目录,施行命令:

apktool d test.apk

如下图:

图片 7apktool
d
test.apk试行成功后,在当前目录下会转换八个test文件夹:图片 8test文件夹目录个中,res文件夹下存放的是反编译出来的保有能源,smali文件夹下存放的是反编写翻译出来的全体代码,AndroidManifest.xml则是因此反编写翻译还原后的manifest文件。smali文件夹下的文件smali文件使用的是Android虚拟机所使用的寄存器语言,假诺看的懂smail文件的话,就足以修改源代码的逻辑了,好可怕的事…当然这不是咱们根本议论的。此时查看AndroidManifest.xml文件,开掘已经成功反编写翻译出来了:图片 9AndroidManifest.xml

贰、反编写翻译财富文件

1、要反编写翻译apk中的能源文件,就须要apktool其壹工具了,下载地址:http://ibotpeaches.github.io/Apktool/install/,进入下载页面:
下载apktool.bat和apktool.jar那多个文本并置于同一文件夹
贰、将要反编写翻译的apk文件放到apktool文件夹,展开cmd,进入apktool文件夹目录,实行命令:

apktool d test.apk

实践成功后,在当前目录下会生成3个test文件夹:
其间,res文件夹下存放的是反编写翻译出来的兼具能源,smali文件夹下存放的是反编写翻译出来的具备代码,AndroidManifest.xml则是经过反编译还原后的manifest文件。smali文件夹下的文本smali文件使用的是Android虚拟机所采用的寄存器语言,要是看的懂smail文件的话,就足以修改源代码的逻辑了,好可怕的事…当然那不是我们珍视商酌的。

怎么着是反编译

大家通晓,Android的次序打包后会生成1个APK文件,这几个文件能够一向设置到任何Android手机上,因而,反编写翻译就是对这么些APK实行反编写翻译。Android的反编写翻译分成五个部分:

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

三、重新包装

1、既然财富文件已经胜利的反编写翻译出来了,那大家就能够确切的修改点东西了,比如换个Logo啥的、改下布局文件等,这里大家将AndroidManifest.xml中的channel值改为10001,然后早先重复打包,同样在cmd中切换成apktool文件夹目录,实施命令:

apktool b test -o new_test.apk

如下图:

图片 10重复打包进行成功后,在脚下目录会生成1个新的new_test.apk文件:图片 11new_test.apk2、而是呢,那几个apk文件近来并无法设置,因为急需再度签名。未有签名文件的话,通过Android
Studio能够很简短的变化一个哦,将盘算好的签字文件放到apktool文件夹根目录,继续在cmd施行命令:

jarsigner -verbose -sigalg SHA壹with路虎极光SA -digestalg SHA一 -keystore
具名文件名 -storepass 具名密码 待具名的APK文件名 具名的小名

如下图:

图片 12jarsigner
start图片 13jarsigner
success注意,在那之中jarsigner命令文件是存放在jdk的bin目录下的,要求将bin目录配置在系统的情状变量中才足以在别的岗位推行此命令。3、签订契约完结后,提议对APK文件实行三遍对齐操作,那样能够使得程序在Android系统中运转得越来越快,对齐操作使用的是zipalign工具,该工具在<Android
SDK>/build-tools/<version>
目录下,须求将那一个目录配置到系统情况变量个中才方可在其余职责试行此命令。继续在cmd中实行命令:

zipalign 4 new_test.apk new_test_aligned.apk

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

图片 14new_test_aligned.apk

4、终极能够经过如下命令验证apk具名是还是不是成功:

jarsigner -verify -verbose -certs new_test_aligned.apk

如下图:

图片 15verify
start图片 16verify
success

到这里apk反编写翻译及重新打包流程就介绍落成了。

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

叁、重新打包

一、编写翻译修改后必要再度包装:同样在cmd中切换成apktool文件夹目录,实行命令:

apktool b test -o new_test.apk

推行成功后,在当前目录会生成三个新的new_test.apk文件
二、但是,那几个apk并不能安装,因为急需再度具名。没有具名文件的话,通过Android
Studio生成一个,将策画好的签名文件放到apktool文件夹根目录,继续在cmd施行命令:

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

瞩目,个中jarsigner命令文件是存放在在jdk的bin目录下的,要求将bin目录配置在系统的情形变量中才方可在任何任务实行此命令。

3、最终能够因而如下命令验证apk具名是还是不是中标:

jarsigner -verify -verbose -certs new_test_aligned.apk

图片 17

示例图

参报考博士博士客:http://www.jianshu.com/p/792a08d5452c

所需的工具

图片 18

  • Android Studio:安卓开拓IDE

    下载地址:https://developer.android.com/studio/index.html

反编译代码的工具:

  • dex二jar: 把dex文件转成jar文件

    下载地址:https://sourceforge.net/projects/dex2jar/files/

  • jd-gui: 那几个工具用于将jar文件调换来java代码

    下载地址:http://jd.benow.ca/

反编写翻译财富的工具:

  • APKTool: 本文主要工具,APK逆向工具,使用简易

    下载地址:
    http://ibotpeaches.github.io/Apktool/install/

热身策动

第三咱们须求一个APK,这里笔者本身写了二个,源码下载地址:http://download.csdn.net/detail/u012891055/9671973,打包成APK后下载到手提式有线电话机上。

它的注重职能是仿照邮箱激活,假诺我们输入了不当的多少则不或者通过激活。所以大家的目标比相当的粗略,正是让那么些论断逻辑失效。

图片 19

重要源码表达:

第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

图片 20

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

图片 21

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

sh d2j-dex2jar.sh classes.dex

实践如下:

图片 22

下一场大家会博得3个classes-dex二jar.jar文件,我们借助JD-GUI工具打开就能够,张开如下:

图片 23

能够看出代码分外明显,那样我们就能够看到任何应用程式的代码逻辑了。

反编写翻译能源

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

图片 24

在cmd中进入apktool目录,实施命令:

sh apktool.sh apktool d FooApp.apk

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

图片 25

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

图片 26

重中之重目录表达:

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

修改App icon

展开我们的描述文件,高清无码:

图片 27

能够看看大家的App
icon名叫ic_launcher,大家找到全部mipmap开始的文书夹,替换到下图就能够:

图片 28

ic_launche

图片 29

在最终重复打包后我们的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个谬误的激活码,就能够被判断成准确的。挺轻易的,是啊。

近来大家来动手修改:

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

  2. 大局寻觅if-eqz,通过AlertDialog第叁字支持定位,发掘在第228行

    图片 30

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

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

ok,大功告成,未来就足以再度打包了。关于smail语法,风乐趣的平昔谷歌(Google)就行了。

再也打包

我们大概修改后七个地点,其实重新包装也要命简练,在cmd中施行以下命令就能够:

sh apktool.sh b FooAPP -o NewFooApp.apk

其间b是build的情趣,表示我们要将FooAPP文件夹打包成APK文件,-o用于钦命新调换的APK文件名,这里新的文本叫作NewFooApp.apk。试行结果如下图所示:

图片 31

接下来您会意识同级目录下生成了新的apk文件:

图片 32

而是要专注,那个apk今后还是不可能设置的,因为大家未有对它举行具名,重新签名后它便是个名符其实的盗版软件了,我们自然要明确声讨那种作为。

再一次具名

重新签字也是很简单的,小编一向用的二个已有签字文件,使用Android
Studio可能Eclipse都得以相当轻便地生成一个具名文件。

在cmd中实践格式如下:

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

然后大家就足以用这几个apk实行安装了,为了追求越来越快的运营速度,我们得以对其进展三回字节对齐,这里就不说了。

运用盗版APK

我们用NewFooApp.apk设置好盗版app后,开掘Logo形成了篮球,并且随意输入数据都能通过激活了:

图片 33

1

什么?总的来讲依旧挺有意思的啊,但是别用歪了。

参考链接:

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

Android安全技巧解密与防御 –
周圣韬

Done

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

2016年06月29日

相关文章

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注