处理器网络篇——概述

背景

近来径直于习计网基础,为了强化自己的晓,所以决定通过描写博客的样式来进展总结。而文章的情不见面刻画得好详尽,主要是对一些比泛的协议,希望经过通俗易懂的教来了解计算机网络每一样重合的工作原理,从而让大家对计算机网络来一个总体的体味。

计算机网络系列

  • 电脑网络篇——概述
  • 处理器网络篇——链路层
  • 计算机网络篇——网络层
  • 电脑网络篇——传输层
  • 微机网络篇——应用层

即篇稿子非打算讲实际的情商,而是指向所有电脑网络开展概述。

手把手教您行懂Android反编译

转载时伸手务必注明出处:http://www.iosxxoo.com/2016/06/29/2016-06-29/

计算机网络出现的背景

开始,计算机是坐单机模式给普遍采用。然而随着电脑的缕缕升华,人们既不复限于单机模式,而是以一个个计算机连于一齐,形成一个处理器网络。连接多台计算机可以兑现信息共享,同时还能当点滴雅物理位置于远的机器中便经常传递信息。

于是,计算机网络的前行时不我待,想只要以各个不同的地方的微机能够通信不是平等桩易的从业,所以就算需要我们来定制统一的说道,这样才会当交互通信中可知互为“理解”。就恍如世界上管英语作为国际通用语言同样,方便了咱们的关系。

前言

反编译别人的主次不是呀值得炫耀的从事,希望大家最好只是兴趣探索,而不是利益驱动。本文主要目的是绕开一个简便的激活程序。

OSI七层模型

为了化解上述问题,ISO指定了一个国际标准OSI,对通信系统开展标准。OSI七层模型就透过有。

咦是相反编译

咱们懂得,Android的程序打包后会见扭转一个APK文件,这个文件可以直接设置到任何Android手机上,因此,反编译就是对是APK进行反编译。Android的反编译分成两独片:

  1. 一个是指向代码反编译,也就是java文件的反编译。
  2. 一个凡是本着资源反编译,也尽管是res文件的反编译。

何以而分呢?

重要是电脑网络的指定是一个非常复杂的网,协议分层就如是计算机软件被之模块化开发,可以拿每个分层独立运用,即使系统受某些分层发生变化,也非会见涉嫌整个体系,由此就可构建一个扩展性和灵活性都比强的系。此外,通过分支还会分开通信功能,更便于单独实现每个分层的磋商,并限量各个分支的现实性事以及义务。

用计算机领域最好通俗的一模一样句话来说,没有什么计算机问题是免克经过一个中间层解决的。而OSI的正经是七层。

所待的家伙

图片 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/

各层的力量

图片 2

OSI七层模型

具体每一样交汇的效益我就未详细说明了,后续之不胜枚举文章我会以每一样重合来详细讲解。

热身准备

率先我们要一个APK,这里自己好写了一个,源码下载地址:http://download.csdn.net/detail/u012891055/9671973,打包成APK后下充斥及手机及。

她的要功能是模仿邮箱激活,如果我们输入了错误的数额则无从透过激活。所以我们的目的非常粗略,就是于这个判断逻辑失效。

图片 3

TCP/IP协议

则发了OSI七层模型,但是出于她至关重要要用来反驳研究,在市面高达之实用价值并无赛,反而后面有的TCP/IP协议占领了市面,现在我们采取的微机网络,几乎都是TCP/IP协议。

图片 4

TCP/IP与OSI参考模型

TCP/IP协议将OSI模型进行了成,整个TCP/IP协议的干活流程大概如下图所示:

图片 5

TCP/IP各层对邮件的收发处理

设若齐所示,当发送数据的时候,每一样叠对数码进行该层的照应处理,然后转交给下一样交汇,直到物理层进行数据传,然后接收方接收数据的时打生于上对各国一样重合进行数量处理,这样即便会赢得发送方的原始内容。

整套电脑网络型大概就是介绍这么多,后续我讲话根据TCP/IP协议对各一样叠开展详尽讲解。

首要源码说明:

第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

图片 6

AndroidStudio由包好的APK文件的后缀,需改为.zip,然后解压。从解压的文书中找到classes.dex文件,并以该放入dex2jar一样目录下,如下:

图片 7

并当cmd中为进及同样的目,然后实施:

sh d2j-dex2jar.sh classes.dex

施行如下:

图片 8

接下来我们见面拿走一个classes-dex2jar.jar文件,我们借助JD-GUI工具打开即可,打开如下:

图片 9

可以看代码非常鲜明,这样咱们就可以看到整个APP的代码逻辑了。

反编译资源

apktool下充斥完成后发出一个.sh文件和.jar文件,我们将APK放进去,如下:

图片 10

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

sh apktool.sh apktool d FooApp.apk

d是decode的意思,表示我们设本着FooApp解码,结果如下:

图片 11

然后您见面惊喜的觉察多矣一个FooApp文件夹。

图片 12

要害目录说明:

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

修改App icon

打开我们的讲述文件,高清无码:

图片 13

足见见咱们的App
icon名称为ic_launcher,我们找到有mipmap开头的公文夹,替换成下图即可:

图片 14

ic_launche

图片 15

当最后还打包后我们的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行

    图片 16

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

图片 17

接下来您晤面意识同级目录下生成了初的apk文件:

图片 18

只是若注意,这个apk现在尚是勿可知装的,因为咱们从不针对性她进行签字,重新签名后它们便是单名副其实的盗版软件了,大家肯定要显著谴责这种表现。

重签名

还签名也是可怜简单的,我一直用之一个早已起签名文件,使用Android
Studio或者Eclipse都得非常简单地挺成一个签名文件。

当cmd中尽格式如下:

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

然后我们就是足以就此是apk进行设置了,为了追求更快之运行速度,我们可针对该展开同样潮字节对同步,这里虽隐瞒了。

以盗版APK

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

图片 19

1

什么?总的来说还是不行好玩的吧,不过别用歪了。

参考链接:

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

Android安全技能解密和防范 –
周圣韬

Done

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

2016年06月29日

发表评论

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

网站地图xml地图