热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android数据库加解密逆向分析(一)

最近事比较多,所以最近一段时间也没更新博客了,现在终于有时间来写博客,美滋滋。好了接下来就带来三篇关于Android数据库加解密的逆向分

最近事比较多,所以最近一段时间也没更新博客了,现在终于有时间来写博客,美滋滋。

好了接下来就带来三篇关于Android数据库加解密的逆向分析,第一篇主要说说现在Android中常用的两种SQlite加密方式:加密写入数据库的内容和加密整个数据库文件;第二篇以逆向分析一款通讯软件“Line”为例介绍“加密写入数据库的内容”这种数据库加密方式;第三篇以逆向微信数据库,破解数据库密码为例,看看“加密整个数据库文件”的这种数据库的加密。

接下来进入正文:



先来说说Android数据库:SQLite。
SQLite是一款轻型的数据库,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。(百度百科)

然而,对于这样一款优秀的数据库却有一个致命的缺陷:不支持加密。这就导致存储在SQLite中的数据可以被任何人轻易地查看到。如果是普通的数据还好,但是当涉及到一些账号密码,聊天内容或者个人信息的时候,我们的应用就会面临严重的安全漏洞隐患。

所以,需要在开发应用时对我们的数据库进行加密,目前对Android数据库有两种加密方式:

1. 对写入数据库的数据进行加密2. 对整个数据库文件进行加密

首先是对写入数据库的数据进行加密,通过这种方式,一定程度上可以保证信息不会直接被被人读取,但是由于其只是对相关的数据进行了加密,数据库的加密并不彻底,数据库整体的表结构等的相关数据还是暴露着的,仍然存在泄漏的风险,同时操作也十分地繁琐。

另一种方式很好的解决了第一种遗留的问题,对整个数据库进行了加密,他人拿到数据库文件后不知道解密方式的话无法对数据库进行分析。这种方法一般采用第三方加密开源库,最典型例子就是SQLiteCipher开源框架。



如下分别是没有加密的数据库,使用第一种方式加密的数据库和第二种方式加密的数据库:

1、没有加密的数据库,直接使用SQLite Expert打开就可以看到相关的信息:
这是比邻(一款随机电话交友APP)的数据库,其数据库并没有进行加密,使用SQLite Expert打开后可以看到相关的信息,下图为我的聊天记录的信息:(这款APP相应的逆向分析将会在以后介绍)
这里写图片描述

图中被红框圈出来的是我在聊天时发送的一张图片,url就是我发送的图片的链接,在浏览器中输入该链接便可以看到对应的图片:
这里写图片描述
而下图就是我的聊天窗口:
这里写图片描述

可以看到没有加密的数据库完全是在裸奔,我们的相关信息毫无保留的暴露了出来,很容易造成信息泄露,所以需要对数据库进行加密。

2、使用第一种方式加密的数据库,相关的数据库表结构还是可以看到的,但是相应的数据得到的是加密后的,无法直接分析:
这是Line APP的数据库,图中是APP中个人设置界面的相关数据信息,可以看到其对value值进行了加密:
这里写图片描述

很明显该APP只是进行了简单的加密,只讲一些重要的数据进行了加密,其他信息还是明文存储。虽然比不加密的方式安全性更高,但是数据库的表结构以及相应的key都没有加密,还是存在暴露的风险。

3、使用第二种方式加密的数据库,数据库被整体加密,SQLite Expert无法打开,解密前无法查看数据库:
这是微信的数据库,位于本地的/data/data/com.tencent.mm/MicroMsg/5521446c2085c943efd63384da0129路径下:
这里写图片描述
使用可以看到该数据库进行了加密,必须输入密码才能打开该数据库:
这里写图片描述
输入密码后可以打开数据库,这是数据库中表的列表:
这里写图片描述
这里是图片表,可以在浏览器中根据url查看该条图片:
这里写图片描述

这里写图片描述
同时在lib目录下可以找到对应的用于数据库加密的so,这里是libwechatcommen.so文件:
这里写图片描述
使用IDA打开可以看到相关对数据库操作的sqlite3函数:
这里写图片描述



总结:
本篇文章是此次Android数据库加密逆向系列的引入,主要介绍了现在Android数据库加密的两种主要实现方式,同时通过对比没有加密的数据库以及使用这两种方式加密的数据库,更加形象的让大家理解Android中的数据库加密。

在下一篇文章中将通过对Line的数据库解密的逆向分析,了解第一种数据库加密方式。


推荐阅读
  • Windows7企业版怎样存储安全新功能详解
    本文介绍了电脑公司发布的GHOST WIN7 SP1 X64 通用特别版 V2019.12,软件大小为5.71 GB,支持简体中文,属于国产软件,免费使用。文章还提到了用户评分和软件分类为Win7系统,运行环境为Windows。同时,文章还介绍了平台检测结果,无插件,通过了360、腾讯、金山和瑞星的检测。此外,文章还提到了本地下载文件大小为5.71 GB,需要先下载高速下载器才能进行高速下载。最后,文章详细解释了Windows7企业版的存储安全新功能。 ... [详细]
  • 本文介绍了Windows Vista操作系统中的用户账户保护功能,该功能是为了增强系统的安全性而设计的。通过对Vista测试版的体验,可以看到系统在安全性方面的进步。该功能的引入,为用户的账户安全提供了更好的保障。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • PHP引用的概念和用法详解
    本文详细介绍了PHP中引用的概念和用法。引用是指不同的变量名访问同一个变量内容,类似于Unix文件系统中的hardlink。文章从引用的定义、作用、语法和注意事项等方面进行了解释和示例。同时还介绍了对未定义变量使用引用的情况,以及在函数和new运算符中使用引用的注意事项。 ... [详细]
  • Answer:Theterm“backslash”isonofthemostincorrectlyusedtermsincomputing.People ... [详细]
  • windows便签快捷键_用了windows十几年,没想到竟然这么好用!隐藏的功能你知道吗?
    本文介绍了使用windows操作系统时的一些隐藏功能,包括便签快捷键、截图功能等。同时探讨了windows和macOS操作系统之间的优劣比较,以及人们对于这两个系统的不同看法。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • 【Windows】实现微信双开或多开的方法及步骤详解
    本文介绍了在Windows系统下实现微信双开或多开的方法,通过安装微信电脑版、复制微信程序启动路径、修改文本文件为bat文件等步骤,实现同时登录两个或多个微信的效果。相比于使用虚拟机的方法,本方法更简单易行,适用于任何电脑,并且不会消耗过多系统资源。详细步骤和原理解释请参考本文内容。 ... [详细]
  • 本文是关于C#类型系统、值类型和引用类型的概念性笔记。介绍了C#1系统类型的三个特性,静态类型的含义,显式类型和隐式类型的区别。还讨论了类、结构、数组类型、枚举、委托类型和接口类型属于哪一种类型。同时纠正了关于结构、引用类型和对象传递的错误表述。最后提到了C#4中使用动态类型的关键字。 ... [详细]
  • Linux下安装免费杀毒软件ClamAV及使用方法
    本文介绍了在Linux系统下安装免费杀毒软件ClamAV的方法,并提供了使用该软件更新病毒库和进行病毒扫描的指令参数。同时还提供了官方安装文档和下载地址。 ... [详细]
  • 在C#中,使用关键字abstract来定义抽象类和抽象方法。抽象类是一种不能被实例化的类,它只提供部分实现,但可以被其他类继承并创建实例。抽象类可以用于类、方法、属性、索引器和事件。在一个类声明中使用abstract表示该类倾向于作为其他类的基类成员被标识为抽象,或者被包含在一个抽象类中,必须由其派生类实现。本文介绍了C#中抽象类和抽象方法的基础知识,并提供了一个示例代码。 ... [详细]
  • Unity3D引擎的体系结构和功能详解
    本文详细介绍了Unity3D引擎的体系结构和功能。Unity3D是一个屡获殊荣的工具,用于创建交互式3D应用程序。它由游戏引擎和编辑器组成,支持C#、Boo和JavaScript脚本编程。该引擎涵盖了声音、图形、物理和网络功能等主题。Unity编辑器具有多语言脚本编辑器和预制装配系统等特点。本文还介绍了Unity的许可证情况。Unity基本功能有限的免费,适用于PC、MAC和Web开发。其他平台或完整的功能集需要购买许可证。 ... [详细]
  • C#多线程解决界面卡死问题的完美解决方案
    当界面需要在程序运行中不断更新数据时,使用多线程可以解决界面卡死的问题。一个主线程创建界面,使用一个子线程执行程序并更新主界面,可以避免卡死现象。本文分享了一个例子,供大家参考。 ... [详细]
  • phpgettext.dll的简单介绍
    本文目录一览:1、在php.ini中设置了extension=php_gettext.dl ... [详细]
  • Qt提供了QtSql模块来提供平台独立的基于SQL的数据库操作。这里我们所说的“平台独立”,既包括操作系统平台,有包括各个数据库平台。另外, ... [详细]
author-avatar
吃货程序猿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有