手把手教你搞懂Android反编译

by admin on 2019年1月21日

必发365bifa0000 1

手把手教你搞懂Android反编译

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

当所有地方都在研究前任这么些话题时,当大街小巷都响起《说散就散》的节拍时,我才发现到,原来《前任3》如此之火。它之所以成为气象级电影,也许是因为,它讲的是我们每个人的故事。

前言

反编译别人的次第不是怎么值得炫耀的事,希望我们最好只是兴趣探索,而不是利益驱动。本文首要目标是绕开一个简练的激活程序。

孟云和林佳,一起携手度过五年的时光。在孟云手无寸铁时,他们力所能及互为扶助相互打气;在孟云事业成功后,他们却无法相互精通互相尊重,最终在各自人生中走散。什么人也从没预料到,他们试探性的假分手,居然衍生和变化成了真离别。

何以是反编译

我们领会,Android的顺序打包后会生成一个APK文件,那一个文件可以平素设置到任何Android手机上,因而,反编译就是对那一个APK举办反编译。Android的反编译分成多少个部分:

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

在电影即将收场时,他们用自己的方法与对方告别。孟云扮成至尊宝,在广场三回又四回的高喊“林佳我爱你”被巡警战胜想要带走;林佳购买多量芒果,在家里一个又一个啃起来以至于快要过敏而死。此时视频达到最高潮,全片泪点最易爆点,似乎有着的或者复合的火候,都曾经失去了。

所需的工具

必发365bifa0000 2

反编译代码的工具:

反编译资源的工具:

孟云和林佳,一个为对方用情至深至如此,一个敢为对方不惧与世长辞,但他俩多个人却不曾为了对方,做老大首先低下头来的人。他们中间有那么数十次可以和好的契机,却因为个别所谓高尚的自尊心,各自端着团结,从而相互错过。他们可能更爱的都是和谐。

热身准备

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

它的重点作用是模仿邮箱激活,如若大家输入了不当的数额则无法通过激活。所以大家的目标很粗略,就是让那些论断逻辑失效。

必发365bifa0000 3

相比较之下,我更欣赏于飞和丁点。分手后,还是能够相互纠缠。记挂对方了,借着酒劲想打电话就打;想见对方了,找个理由直接出来会合。因为还放不下,他们表现出最本真的目的在于,我认为那并不卑微。假若还爱着,还想着,为啥不得以大胆的表明出来呢。即便拼命后败北,总好过遗憾错过吧。

根本源码表达:

第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

必发365bifa0000 4

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

必发365bifa0000 5

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

sh d2j-dex2jar.sh classes.dex

实践如下:

必发365bifa0000 6

接下来大家会得到一个classes-dex2jar.jar文件,大家赖以JD-GUI工具打开即可,打开如下:

必发365bifa0000 7

可以看看代码非凡明晰,那样大家就足以观看整个APP的代码逻辑了。

早就很欣赏亦舒笔下的女性形象。在心情里,总能非凡自然的转身,从不迟疑,拥有令人折服的高姿态。但随着年华越来越大,有时发现,在心思里,偶尔低姿态,偶尔示弱,不见得不是一件善事。

反编译资源

apktool下载完毕后有一个.sh文件和.jar文件,我们把APK放进来,如下:

必发365bifa0000 8

在cmd中跻身apktool目录,执行命令:

sh apktool.sh apktool d FooApp.apk

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

必发365bifa0000 9

然后你会惊喜的觉察多了一个FooApp文件夹。

必发365bifa0000 10

重在目录表明:

  • AndroidManifest.xml:描述文件
  • res:资源文件
  • smail:反编译出来的具有代码,语法与java分化,类似汇编,是Android虚拟机所接纳的寄存器语言

孟云和林佳,假诺她们有人愿意首先示弱,有人愿意为了那段心思,拼命的去挽留,也许他们就不会错过。当若干年后,当孟云知道林佳在这晚吃了不可胜道芒果,当林佳知道孟云真的化妆成了至尊宝在广场表白,他们会不会如大家一致唏嘘和遗憾呢?

修改App icon

打开大家的讲述文件,高清无码:

必发365bifa0000 11

可以看来我们的App
icon名称为ic_launcher,大家找到所有mipmap起始的公文夹,替换成下图即可:

必发365bifa0000 12

ic_launche

必发365bifa0000 13

在最后再一次包装后我们的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行

    必发365bifa0000 14

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

必发365bifa0000 15

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

必发365bifa0000 16

只是要专注,那几个apk现在仍然无法设置的,因为我们并未对它举行签约,重新签名后它就是个名副其实的盗版软件了,大家一定要明显声讨那种行为。

再也签名

再次签名也是很粗略的,我直接用的一个已有签名文件,使用Android
Studio或者Eclipse都可以卓殊不难地生成一个签名文件。

在cmd中推行格式如下:

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

然后我们就足以用那几个apk举行设置了,为了追求更快的运转速度,我们得以对其进展一次字节对齐,那里就隐瞒了。

运用盗版APK

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

必发365bifa0000 17

1

怎样?总的来说仍旧挺好玩的吧,然则别用歪了。

参照链接:

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

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

Done

必发365bifa0000,作者:
@biggergao
私家博客: Mr.码了大漠

2016年06月29日

发表评论

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

网站地图xml地图