分析微信如何处理数据的存储

微信本来作为一个社交的工具因为吸引了众多的用户被加入了越来越多的功能,有些功能比如支付之类的需要有更高的安全保障。

如何保证数据的安全呢? 从数据存放的位置来看,有些数据可以放在移动端,有些放在服务端。

数据在服务端

传统的C/S, B/S结构的应用的数据基本都在服务端,所以对保证数据的安全已经有很多成熟的方案,比如在数据传输的过程中采用安全的连接(SSL), 本地的数据基本在数据库里,保护数据库的数据不外泄,安全要求很高的话也可以加密数据库的数据。

数据在移动端

Android里在移动端存储数据用到的最多的方式是利用SQLite数据库,但是目前Android里的SQLite并没有加密的功能,所以要保护数据只有在应用端实现,但是应用端实现加密的话会对应用的性能产生不小的影响。主要有以下几个方面:

1. 应用端产生的数据需要进行多次的加解密操作;

2.应用端产生的加密的数据会使得原先建立的索引失效;

看看微信怎么弄的

先看看微信用到的SQL语句的执行时间,如何获取App里用到的SQL语句运行的时间呢?

1. 需要1个运行debug版本的设备或者root过的设备(用虚拟机就可以)

2. 将慢查询的时间设置为0,这样所有运行的SQL语句就会在logcat里显示出来

adb shell setprop db.log.slow_query_threshold 0

我在虚拟机上安装了一个微信,按照上面的方法设置之后并没有看出有语句打印出来,这就奇怪了,难道微信没有使用SQLite吗?

我看了下目录 [/data/data/com.tencent.mm/MicroMsg/24aebefd1208a86b21d57e48ddbaa25c], 下面确实是有很多SQLite格式的db文件。

所以这个时候第一个想法就是微信可能没有直接使用android framework层提供的操作SQLite的API, 下面反汇编一下微信apk看看。

可以看到微信App的源码大部分被混淆了,但是一个叫kingkong的目录下面代码的名字并没有被混淆,这里的代码和Android源码frameworks/base/core/java/android/database一样(事实上应该是被更改了,导致了SQL语句运行的信息也没被打印出来)。

可以猜测的是微信绕过framework层的API目的是这里的native的SQLite源码是支持加密功能的,这一点可以从/data/data/com.tencent.mm/MicroMsg/24aebefd1208a86b21d57e48ddbaa25c目录下的EnMicroMsg.db看出。

[email protected]:/data/data/com.tencent.mm/MicroMsg/24aebefd1208a86b21d57e48ddbaa25c # sqlite3 EnMicroMsg.db
sqlite3 EnMicroMsg.db
SQLite version 3.7.11 2012-03-20 11:35:50
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .tables
.tables
Error: file is encrypted or is not a database
sqlite>

我使用.tables命令想看下数据库的表信息,得到数据库是加密的提示,EnMicroMsg.db这个db的名字的前缀En应该就是encryption的头两个字母。

关于SQLite的加密版本看看这个网址:-) https://www.zetetic.net/sqlcipher/open-source/

时间: 2024-10-11 23:16:47

分析微信如何处理数据的存储的相关文章

推荐系统如何处理数据?

据统计,全球数据总量预计2020年达到44ZB,中国数据量将达到8060EB,占全球数据总量的18%.现阶段我们所讨论的人工智能,很大程度上都是在谈"人工智能"这个大概念下机器学习领域中的深度学习技术.它的底层原理相对简单,对数据有很大的依赖性,本质上是一种基于大数据的统计分析技术. 推荐系统作为人工智能的落地场景之一,对数据的依赖性不言而喻.企业通过前期的数据收集,全面了解自身的产品和目标用户:之后,通过一系列的数据挖掘技术,对目标用户进行分类,刻画用户画像:最后,再通过数据决策,制

为什么MongoDB适合大数据的存储?

NoSQL数据库都被贴上不同用途的标签,如MongoDB和CouchDB都是面向文档的数据库,但这并不意味着它们可以象JSON(JavaScript Object Notation,JavaScript对象标记)那样以结构化数据形式存储文本文档. JSON被认为是XML的代替品,它是一个轻量级的,基于文本交换数据的标准,和XML一样具有人类易读的特性.简单的JSON数据结构叫做对象,可能包括多种数据类型,如整型(int),字符串(string),数组(array),日期(date),对象(obj

IOS数据本地存储的四种方式--

注:借鉴于:http://blog.csdn.net/jianjianyuer/article/details/8556024 在IOS开发过程中,不管是做什么应用,都会碰到数据保存问题.将数据保存到本地,能够让程序更加流畅,不会出现让人厌恶的菊花状,使得用户的体验更好.下面是介绍数据保存的方式 第一.NSKeyedArchiver:采用归档的形式来保存数据.(归档——解档)———大量数据和频繁读写不合适使用 1.归档器的作用是将任意的对象集合转换为字节流.这听起来像是NSPropertyLis

微信大数据揭秘国民出境购物 东部省领先

五一小长假,离家近的朋友选择回家看看,离家远的朋友可能会短途游,有些朋友干脆宅家里(看到people Moutain people sea就压力山大),你是属于哪一类呢?当然还有一类朋友会选择出境游,我们就从微信大数据来了解一下国民出境购物的情况吧. 5月3日,微信发布了<2016微信“五一”跨境大数据>,该报告以6.5亿活跃用户为样本,并首次将微信支付的境外消费数据纳入分析,还原国人境外消费图景. “五一”跨境游:140万人出境,东部省领先,广东省最多 该报告显示,4月29日至5月2日期间,

Android笔记——Android中数据的存储方式(二)

我们在实际开发中,有的时候需要储存或者备份比较复杂的数据.这些数据的特点是,内容多.结构大,比如短信备份等.我们知道SharedPreferences和Files(文本文件)储存这种数据会非常的没有效率.如果学过JavaWeb的朋友,首先可能想到的是数据库.当然了数据库是一个方案,那么是否还有其他的解决方案呢?今天我们在讲下Android笔记——Android中数据的存储方式(一) 提到的除了SharedPreferences和Files(文本文件)以外的其他几种数据储存方式:xml文件.SQL

【分布式】Zookeeper数据与存储

一.前言 前面分析了Zookeeper对请求的处理,本篇博文接着分析Zookeeper中如何对底层数据进行存储,数据存储被分为内存数据存储于磁盘数据存储. 二.数据与存储 2.1 内存数据 Zookeeper的数据模型是树结构,在内存数据库中,存储了整棵树的内容,包括所有的节点路径.节点数据.ACL信息,Zookeeper会定时将这个数据存储到磁盘上. 1. DataTree DataTree是内存数据存储的核心,是一个树结构,代表了内存中一份完整的数据.DataTree不包含任何与网络.客户端

MySQL数据库如何解决大数据量存储问题

利用MySQL数据库如何解决大数据量存储问题? 各位高手您们好,我最近接手公司里一个比较棘手的问题,关于如何利用MySQL存储大数据量的问题,主要是数据库中的两张历史数据表,一张模拟量历史数据和一张开关量历史数据表,这两张表字段设计的很简单(OrderNo,Value,DataTime).基本上每张表每天可以增加几千万条数据,我想问如何存储数据才能不影响检索速度呢?需不需要换oracle数据库呢?因为我是数据库方面的新手,希望可以说的详细一点,万分感谢!!?-0-#暂时可以先考虑用infobri

TCP Incast 问题TCP INCAST解决思路 应用场景:在集群文件系统内,客户端应用请求某个逻辑数据块(通常情况下一个读数据块大小是1MB),该数据块以条带化方式分别存储在几个存储服务器上,即采用更小的数据片存储(32KB,256KB等),这种小数据片称为服务器请求单元(SRU)。只有当客户端接收到所有的服务器返回的其所请求数据块的SRU后才继续发送出下一个数据块请求,即客户端同时向

TCP INCAST解决思路 应用场景:在集群文件系统内,客户端应用请求某个逻辑数据块(通常情况下一个读数据块大小是1MB),该数据块以条带化方式分别存储在几个存储服务器上,即采用更小的数据片存储(32KB,256KB等),这种小数据片称为服务器请求单元(SRU).只有当客户端接收到所有的服务器返回的其所请求数据块的SRU后才继续发送出下一个数据块请求,即客户端同时向多个存储服务器发起并发TCP请求,且所有服务器同时向客户端发送SRU. 出现的问题: 1)         这种多对一的服务器向客

CDH使用秘籍(二):cloudera Manager中监控数据的存储

概述 上一篇文章分析了cloudera manager中监控数据.中心数据的存储方式,怎样配置外部表等.这一篇文章进一步分析监控数据的存储,配置,调优等. Service Monitor 和 Host Monitor 角色在cloudera manager中存储了时间序列.健康数据.Impla查询和Yarn应用的元数据.经过查看相应的Cloudera Manager的存储连接,发现Service Monitor和Host Monitor的存储使用的是levelDB的解析类,由此可以推断出本地存储