手把手教你搞懂Android反编译
分类:金沙APP

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

转发时请必须注脚出处:http://www.iosxxoo.com/2016/06/29/2016-06-29/

前言

反编译外人的前后相继不是何许值得酷炫的事,希望大家最为只是兴趣研究,并不是收益驱动。本文首要目标是绕开三个简练的激活程序。

什么样是反编写翻译

咱俩了然,Android的次第打包后会生成多少个APK文件,这一个文件可以一贯设置到任何Android手提式有线电话机上,由此,反编写翻译正是对那一个APK举办反编写翻译。Android的反编写翻译分成三个部分:

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

所需的工具

图片 1

  • Android Studio:安卓开垦IDE

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

反编写翻译代码的工具:

  • dex2jar: 把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后下载到手提式有线话机上。

它的重要性成效是效仿邮箱激活,假若我们输入了错误的数据则无从透过激活。所以我们的目标异常的粗略,正是让这一个推断逻辑失效。

图片 2

器重源码表达:

第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

图片 3

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

图片 4

并在cmd中也跻身到均等的目录,然后实践:

sh d2j-dex2jar.sh classes.dex

实践如下:

图片 5

然后大家会拿走三个classes-dex2jar.jar文件,我们依赖JD-GUI工具展开就可以,张开如下:

图片 6

可以看出代码特别清楚,那样大家就能够见到全数应用程式的代码逻辑了。

反编写翻译能源

apktool下载实现后有二个.sh文件和.jar文件,大家把APK放进来,如下:

图片 7

在cmd中跻身apktool目录,实施命令:

sh apktool.sh apktool d FooApp.apk

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

图片 8

下一场您会惊奇的觉察多了二个FooApp文件夹。

图片 9

首要目录表达:

  • AndroidManifest.xml:描述文件
  • res:能源文件
  • smail:反编写翻译出来的具有代码,语法与java分化,类似汇编,是Android虚构机所采取的寄放器语言

修改App icon

开辟大家的汇报文件,高清无码:

图片 10

能够见见大家的App icon名称叫ic_launcher,大家找到全部mipmap开首的文件夹,替换来下图就能够:

图片 11

ic_launche

图片 12

在结尾再一次包装后大家的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行

    图片 13

  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。实行结果如下图所示:

图片 14

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

图片 15

可是要注意,那个apk现在照旧无法安装的,因为我们尚无对它进行签订公约,重新签名后它便是个名不虚传的盗版软件了,大家应当要掌握声讨这种表现。

重新具名

再也签字也是很粗大略的,小编一贯用的贰个已有具名文件,使用Android Studio或然Eclipse都能够极其轻易地生成二个签字文件。

在cmd中试行格式如下:

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

接下来大家就能够用那几个apk实行安装了,为了追求越来越快的周转速度,大家得以对其实行二次字节对齐,这里就背着了。

选拔盗版APK

我们用NewFooApp.apk设置好盗版app后,开采Logo产生了篮球,何况随意输入数据都能由此激活了:

图片 16

1

何以?总的来讲依然挺有意思的吧,不过别用歪了。

参照链接:

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

Android安全手艺解密与防卫 - 周圣韬

Done

作者: @biggergao
个人博客: Mr.码了大漠

2016年06月29日

本文由金沙APP发布于金沙APP,转载请注明出处:手把手教你搞懂Android反编译

上一篇:金沙APP国有资本的收益和变现都是补贴社保的渠 下一篇:没有了
猜你喜欢
热门排行
精彩图文