写在前面的话

仅以此系列献给喜欢我CSDN的小伙伴们

申明

此文禁止转载,谢谢合作


序言


在开头说这会是一个系列,那就说明我有非常多话要说。从最简单的介绍到问题的提出。解决方式的构思以及整个系统的架构实现測试都会在这个系列里一一说明。假设你还在迷茫该怎么去深入一个问题,一点点解决,那我尽力会通过这个系列让你有一点点感悟。假设你已经一览众山小,那么请给我多多提出建议。

无论你是何种程度的程序猿,我的目的仅仅有一个。这是写给大家看的东西。

会用最简单最直白的方式表达。假设你不理解,一定是我的问题。你能够及时告诉我,我会努力把全部问题描写叙述的简单易懂。


在安卓平台,重打包问题是Android多年的顽疾。基本上大部分的恶意软件的流入是通过重打包。


假设你对移动端不了解,或者对这个问题不熟悉,那么你可能会问什么是重打包?

我们能够举个简单的样例。你从不同的平台下载了两个看似一模一样的APP,可是当中有一个APP可能除了正常的功能外也许还秘密的在后台不被人发现的进行着某些活动。

比方说点击明明点击某个确定button。可是附带的发送了一条短信到移动服务商定制了某些服务。而且在后台拦截了服务商发来的提示短信。

你本来以为一切都是正常的。可是某天查话费的时候,突然发现话费少了一大笔。没有收到不论什么服务商的通知,总哑巴吃黄连有苦说不出的感觉。


上面这个样例是重打包的典型案例。


以下是一些重打包经常使用的手段列举:

1.在原始的APP中增加了广告,这是最简单的一种手段

2. 改动了原始的APP,在保证了其用户体验全然同样的情况下以及不被用户发现的情况下偷偷添加了某些功能

3. 直接重写而且模仿了整个APP,而且添加了一些对应的功能。



看完这些有人会问这种问题?你怎么识别出原始的APP和重打包的APP,你怎么知道不是作者本人改动的而是其它人改动的。

对于这个问题我们须要了解一点Android的APP是怎么公布到我们的市场上去的。
每一个app的开发人员要把自己的APP公布到网上让大家都能使用它必须申请一个账号而且缴纳一定的费用便能够将自己的APP上传到想要的市场上去。

当然。比較正式的官网会做一些安全监測,保护用户的安全。

可是这个措施不是总有效的。

其次,Android的开发人员众多,每天添加的APP数目是惊人的
最后。Android的APP是非常easy被反编译破解的。

这些问题的存在导致了重打包这个顽疾能够长期存在。

既然存在了这么久一定会有一些解决的方法,那如今都有些什么解决的方法?

最早出现的解决的方法就是依据代码的特征。

逻辑是这种,重打包一定实现了原始APP没有实现的功能,我仅仅要检測出这些多余的代码就能够看出这个APP有没有经过重打包但是如今的问题是,重代码的角度出发来解决这个问题,面临的最重要的挑战操作码的数量巨大,必定会产生庞大的计算复杂度。加上要检測如此众多的APP,必定会捉襟见肘。



这个时候有人会说,为了扩大影响范围,一般重打包软件的制作者会选择一些受欢迎的APP来进行处理。这样感染的速度最快。我们在检測的时候比方说仅仅针对前10000万个。建立一个原始APP的数据库。通过签名对照非常easy就能够找到重打包的APP

事实真的是这种,依据签名比較来实现真的靠谱么。

这样就能够避免计算复杂度了么。

想想怎么去找到10000个APP中的原始APP。重google play 上下载的能够算是原创的么。第三方市场为数如此众多,真的能够有效的降低时间复杂度么。



有什么的新方案么?

这就是今天以及以后我将要解决的问题。——基于资源来检測


你也许可能会问?这样靠谱么?


首先我们先来解决一个问题?在Android中什么是资源

在Android中,一个Activity能够看成资源,service。receiver。provider这些组件都能够看成资源。一张图片,一个字符串。id, xml文件这些都能够看成资源。而且就算如今的一些加固技术仍不能改变一些资源。这就确保了我们检測的可靠性。

既然理论上是可行。这样从资源这个比代码更加宏观的角度来看问题。把问题分割的更大,时间复杂度就降下来了。其次。更加可靠。

思路是这样,我们把APP分解。由于我们能够通过Intent来得到这个APP之间组件的调用关系。

一个Activity从慷慨向上来看就是有一个个的组件构成的,组件的调用关系能够通过intent非常快的确认。每个APP都被我们拆分成一个个的图。其次,我们把每个节点细化,比方一个Activity上可能有一些组件。组件可能绑定了相关的事件。


听着有点晕,看看以下这图,也许我们可能就会比較easy理解:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hpY2hveGlhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">










我们要实现的就是能够有效识别新添加的组件A7,或者是在原始的APP上新添加的某个事件。比方向上文所说的那样。能够识别出改变了的button功能。



在未来的这个系列中我们就一点点来说明怎么通过资源来解决重打包问题。







































谈谈Android重打包--初语的更多相关文章

  1. Android重打包+重新签名工具Apktool Box

    可实现apk反编译+重新打包+重新签名,界面如下 : 部分引用自开源代码:http://github.com/Bu4275/AutoAPKTool

  2. 谈谈Android 6.0运行时权限理解

    前言 谷歌在2015年8月份时候,发布了Android 6.0版本,代号叫做“棉花糖”(Marshmallow ),其中的很大的一部分变化,是在用户权限授权上,或许是感觉之前默认授权的不合理,现在6. ...

  3. 更便捷的Android多渠道打包方式

    本文先回顾了以往流行的多渠道打包方式,随后引入的mcxiaoke的packer-ng-plugin项目,介绍该项目在实际应用(配合友盟统计)中如何解决更方便的Android多渠道打包问题 多渠道打包方 ...

  4. 转 谈谈android反编译和防止反编译的方法

    谈谈android反编译和防止反编译的方法   android基于java的,而java反编译工具很强悍,所以对正常apk应用程序基本上可以做到100%反编译还原. 因此开发人员如果不准备开源自己的项 ...

  5. AndroidManifest修改重打包全过程

    AndroidManifest修改重打包全过程: 作者: 蔡建良 2013-06-26 准备工具:apktool.jar和signapk.jar 下载: http://download.csdn.ne ...

  6. 谈谈android反编译和防止反编译的方法(转)

    谈谈android反编译和防止反编译的方法(转) android基于java的,而java反编译工具很强悍,所以对正常apk应用程序基本上可以做到100%反编译还原. 因此开发人员如果不准备开源自己的 ...

  7. 荐 android 如何打包自定义控件(转)

    荐 android 如何打包自定义控件(转)   目录[-] 方式一:将项目打包成jar包 方式二:项目作为一个library 设计自定义的控件对android开发人员来说,是家常便饭了,但是多次做项 ...

  8. 微信android混淆打包减少安装包大小

    首先,感谢微信android团队的分享 微信中的资源混淆工具主要为了混淆资源ID长度(例如将res/drawable/welcome.png混淆为r/s/a.png),同时利用7z深度压缩,大大减少了 ...

  9. DotNetBar for Windows Forms 12.9.0.0_冰河之刃重打包版及制作Visual Studio C#项目模板文件详解

    关于 DotNetBar for Windows Forms 12.9.0.0_冰河之刃重打包版 --------------------11.8.0.8_冰河之刃重打包版-------------- ...

随机推荐

  1. pip install py-stringsimjoin error: INCLUDE environment variable is empty

    在用pip install py-stringsimjoin的时候报错error: INCLUDE environment variable is empty,后来在网上搜索下了说是需要下载安装VCF ...

  2. Ubuntu 11.04 (Natty) 已经停止支持 但可以使用old-releases源了

    Ubuntu 11.04 (Natty) 已经停止支持,但可以使用old-releases源了,先备份源列表文件: sudo cp /etc/apt/sources.list /etc/apt/sou ...

  3. 压测过程中,CPU和内存占用率很高,案例简单分析

    Q:  最近公司测试一个接口,数据库采用Mongo    并发策略:并发400个用户,每3秒加载5个用户,持续运行30分钟    数据量:8000条左右 压测结果发现:    TPS始终在5左右   ...

  4. 阿里云OSS服务开通STS安全令牌

    搭建直传服务需要完成以下准备工作: 开通OSS,并且创建Bucket. 开通STS服务. 登录 OSS管理控制台. 在OSS概览页中找到基础配置区域,单击 安全令牌,如下图所示: 进入到 安全令牌快捷 ...

  5. iOS开发-发送邮件(E-mail)方法整理合集(共3种)

    前言:在IOS开发中,有时候我们会需要用到邮件发送的功能.比如,接收用户反馈和程序崩溃通知等等.其实这个功能是很常用的,因为我目前就有发送邮件的开发需求,所以顺便整理下IOS发送邮件的方法. IOS原 ...

  6. 原生js实现文字无缝向上滚动效果

    在网上查找到了一个实现文字无缝向上滚动效果的源码,结果发现运行有问题,于是就稍加改动,实现了js无缝向上滚动的效果. <script> window.onload = roll(50); ...

  7. LwIP协议栈(2):网络接口

    在LwIP中,物理网络硬件接口结构保存在一个全局链表中,它们通过结构体中的 next 指针连接. struct netif { /// pointer to next in linked list * ...

  8. Android中图片的三级缓存策略

    在开发过程中,经常会碰到进行请求大量的网络图片的样例.假设处理的不好.非常easy造成oom.对于避免oom的方法,无非就是进行图片的压缩.及时的回收不用的图片.这些看似简单可是处理起来事实上涉及的知 ...

  9. ISA2006安装和部署基础(虚拟机非域环境)

    0x00. 为了測试基于HTTP隧道的绕过ISA,必须搭建模拟环境,为了不麻烦,我们这里不配合域环境认证.本次实验利用Vmware 10.0搭建好开发环境,实现ISA2006安装和部署,同一时候设定基 ...

  10. nginx 模块简介

    nginx模块一般分为5类:核心模块.标准http模块.可选http模块.邮件服务模块.第三方模块. 其中核心模块和标准http模块在快速编译之后就包含在了nginx中. 主要看一下核心模块.标准ht ...