您的位置:首页 > 移动开发 > Android开发

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

2017-06-03 10:35 106 查看
最近事比较多,所以最近一段时间也没更新博客了,现在终于有时间来写博客,美滋滋。

好了接下来就带来三篇关于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的数据库解密的逆向分析,了解第一种数据库加密方式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息