Android自复制传播APP原理学习(翻译)

1 背景介绍

论文链接:http://arxiv.org/abs/1511.00444

项目地址:https://github.com/Tribler/self-compile-Android

吃完晚饭偶然看到这篇论文,当时就被吸引了,马上翻译总结了一下。如有错误欢迎斧正。

该论文的研究出发点比较高大上这里我们就不多说了,简而言之就是想通过移动设备来实现一个自组网,在发生灾难的时候,手机之间能够自动传输关键数据,减少损失。整个目标通过设计一个能够实现自编译、自变异和病毒式传播的“自治app”实现。下面我们直接去了解它的核心原理。

2自治app的设计

1.要求能够同时使用多种网络连接方式如WIFI、蜂窝网络、蓝牙等。

2.最好系统本身开源,主要是方便获取软件的编译工具以及了解相关编译过程。

所以选择了Android系统。同时注意到自治app的关键功能最好不需要root权限就能顺利完成。

3.1病毒式的传播

核心原理图

简而言之就是在同一个无线网域中,能够通过NFC和蓝牙进行传播,然后这个网域中如果有一台机器能够连接外网的话,就通过这台机器传播到外网去。

3.2 自编译

为了能够在各个设备、平台上运行APP,这个app就必须包含所有系统版本的编译套件。最有效的方法就是在这个APP中内嵌一个app编译工厂,此工厂包含所有需要的编译和连接工具。要完成自我编译主要需要如下3类原数据:

①app源码;

②第三方库;

③编译、链接工具

当然,如果app中含有c/c++代码的话,还需要一些ndk工具。

3.3 自变异

主要是为了通过变异来让app能够在各种不同的环境中存活下去。主要方式就是让app自身能够将代码、资源文件、和新的或者更改后的库文件集合在一起,让它变成一个万精油的app,进而适应各种设备(当然,就恶意代码而言,可以通过变异来减少被杀软报毒的概率)。

3.4无害的组件

在app中嵌入一些无害的组件(软硬件均可),或者将“关键逻辑”嵌入到无害的app中,可以迷惑用户,减少被发现的概率。比如嵌入到计算器中。当然为了免得被查水表,给app签名的时候最好用别人的,或者默认的debug key。

4 具体实现

主要就是构建一个内嵌的编译环境,并且这个编译环境要是全java的。由于Android本身就是开源的,所以获取各个编译工具以及了解它的编译原理并不难,并且除了aapt之外,其他工具基本都是使用java写的。

具体的编译过程见图3。当然网上也有很多相关文章。

4.1重写aapt

aapt的功能这里就不多说了。主要看如何将这部分native代码移植到java代码中。这方面的工作已经有现成的工具可以使用了,就是JavaIDEdroid。同时需要注意,aapt在工作的时候需要的那些native库文件都被集中到了一个so文件中。所以为了实现完全的NDK无关性,这里只需要对aapt的代码进行移植即可。

4.2 Java编译器

这里选择使用Eclipse的Java编译器ECJ,因为这个编译器是使用java写的。

4.3 Dalvik转换

Android使用dex格式的可执行文件。在Android5.0之前的版本中使用Dalvik VM来运行dex文件,后来使用ART代替了DVM,不过ART是向后兼容的,所以也是执行dex文件。因此就需要将java字节码转换为dex格式的dalvik字节码。整个转换工作通过一个叫做dx的工具包实现。Dx在进行转换的时候比较吃内存,如果一次性转换太多东西的话容易crash,但是好在我们可以分块对上面提到的各个java库进行转换。转换完成后在通过DexMerger进行组合。好消息是,dx和DexMerger都是用java写的。

4.4 打包工具

APK的打包主要是通过ApkBuilder工具实现,它也是用java写的。ApkBuilder包括用于完成java代码编译的Android.jar库文件,用于完成最后链接工作的Java KeyStore文件(这个文件在对apk进行签名的时候用到)等等。

4.5签名问题

如果两个apk的包名相同,签名也相同,那么新的apk就可以完美替换旧的apk。但是自变异的apk却不行。它要么被当做一个新的app安装,要么因为包名相同但签名不同而被拒绝安装。所以为了解决这个问题,可使用ZipSigner工具,这个工具可以使用任意的Key Store文件(本身默认包含debug key)对apk进行签名。所以可以通过这个工具使用debug key对自变异的apk进行签名。

4.6无线传播

主要就是通过NFC来开启蓝牙传输,然后通过蓝牙来传输apk文件。整个传输过程可以做成全自动化的。

5 总结

这个论文首先提出并实现了在Android平台能够自动重编译、自变异和病毒式传播的“自治型app”,虽然作者的出发点是好的,但是难免会被有心之人利用,做成恶意代码加以传播。同时很容易联想到,我们完全可以将这些Android平台的编译工具替换为其他系统平台的编译工具,程序通过检测当前所处的系统环境,选取相应的编译套件,进而实现跨平台感染。

Android自复制传播APP原理学习(翻译)的更多相关文章

  1. Android中为APP创建快捷方式的原理(自己的理解)

    我们首先来看Android中为APP创建快捷方式的原理: 从图上可以看出,Android大致分7步完成快捷方式的创建: 第一步:Android系统的launcher程序会调用它的pickShortcu ...

  2. 在Android上编写模块化项目(翻译)

    来源博客:Wang Jie's Blog 本文链接:http://blog.wangjiegulu.com/2018/02/13/writing_a_modular_project_on_androi ...

  3. Android开发技术周报176学习记录

    Android开发技术周报176学习记录 教程 当 OkHttp 遇上 Http 2.0 http://fucknmb.com/2018/04/16/%E5%BD%93OkHttp%E9%81%87% ...

  4. 我的Android进阶之旅------>RxJava学习资料汇总

    在响应式编程中,应该牢记以下两点: everything is a stream(一切皆流) don't break the chain(不要打断链式结构) 记住,可观测序列就像一条河,它们是流动的. ...

  5. Android插件化技术——原理篇

    <Android插件化技术——原理篇>     转载:https://mp.weixin.qq.com/s/Uwr6Rimc7Gpnq4wMFZSAag?utm_source=androi ...

  6. 深入探索Android热修复技术原理读书笔记 —— 热修复技术介绍

    1.1 什么是热修复 对于广大的移动开发者而言,发版更新是最为寻常不过的事了.然而,如果你 发现刚发出去的包有紧急的BUG需要修复,那你就必须需要经过下面这样的流程: 这就是传统的更新流程,步骤十分繁 ...

  7. 深入探索Android热修复技术原理读书笔记 —— 代码热修复技术

    在前一篇文章 深入探索Android热修复技术原理读书笔记 -- 热修复技术介绍中,对热修复技术进行了介绍,下面将详细介绍其中的代码修复技术. 1 底层热替换原理 在各种 Android 热修复方案中 ...

  8. Android版-支付宝APP支付

    此项目已开源 赶快来围观 Start支持下吧 [客户端开源地址-JPay][服务端端开源地址-在com.javen.alipay 包名下] 上一篇详细介绍了微信APP支付 点击这里 此篇文章来详细介绍 ...

  9. Android Material Design控件学习(一)——TabLayout的用法

    前言 Google官方在14年Google I/O上推出了全新的设计语言--Material Design.一并推出了一系列实现Material Design效果的控件库--Android Desig ...

随机推荐

  1. JZOJ 3534. 【NOIP2013提高组day1】货车运输

    Description A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的 ...

  2. Dawson City【道森市】

    Dawson City Cities usually have a good reason for being where they are, like a nearby port or river. ...

  3. 查找并绘制轮廓 opencv

    findContours(): 第二个参数为一个检测到的轮廓,函数调用后的运算结果都放在这里,每个轮廓存储为1个点向量,用point类型的vector表示. 第三个参数表示轮廓数量,包含了许多元素.每 ...

  4. [CodeForces954D]Fight Against Traffic(最短路)

    Description 题目链接 Solution 从起点和终点分别做一次最短路并记录结果 枚举每一条可能的边判断 Code #include <cstdio> #include < ...

  5. 笔记-python -asynio

    笔记-python -asynio 1.      简介 asyncio是做什么的? asyncio is a library to write concurrent code using the a ...

  6. Hadoop(初始Hadoop)

    Hadoop核心组件 1.Hadoop生态系统 Hadoop具有以下特性: 方便:Hadoop运行在由一般商用机器构成的大型集群上,或者云计算服务上 健壮:Hadoop致力于在一般商用硬件上运行,其架 ...

  7. PHP代码审计4-漏洞挖掘思路

    漏洞挖掘思路 漏洞形成的条件 1.变量可控制 2.变量可到达有利用价值的函数(危险函数) 漏洞造成的效果 漏洞的利用效果取决于最终的函数功能,变量进入什么样的函数就导致什么样的效果 危险函数 文件包含 ...

  8. div+css实现双飞翼布局

    本例通过div+css实现HTML金典布局双飞翼布局,该布局结构为上中下结构,上:header头:下:footer尾:中:内容,将内容分为了三个结构,左中右 下图是效果图 我们来看下代码 <!D ...

  9. pdo事务

    $pdo->beginTransaction() $pdo->commit() $pdo->rollback();

  10. json对象和java对象的相互转换方法(json-lib、jackson、fastjson、gson)

    一 使用json-lib包下的JSONObject和JSONArray转换 代码如下: package com.test.test; import java.util.ArrayList; impor ...