独家食用指南系列Android端SQLCipher的攻与防新编大家好,今天给大家的是本周技术拆解官的第二篇文章,主题依

可能大家不太清楚SQLCipher是什么东西?没事,我们慢慢来,首先顺着之前的思路,接着来分析Android端SQLite,上周我们了解了SQLite的使用,那这次我们开篇先来看看SQLite有哪些优缺点?

SQLite作为在Android端频繁使用的轻量型数据库,它的优点不言而喻:易上手、易安装、具备关系型数据库的特征等等,那它有哪些缺陷呢?而这些缺陷又是通过什么技术手段或者方案来解决的呢?

对于一般的APP开发者来说,SQLite易上手的特点会让人很兴奋,但是对于企业级的APP开发来说,性能永远是APP开发的第一指标,而SQLite的最初的设计理念是作为一个轻量级的高性能数据库,大家可能会疑问既然这么设计为什么还会遇到性能问题呢?这里的高性能其实是有条件限制的,在小数据量、并发低、查询结构简单的场景下,在Android端使用SQLite无非是性价比非常高的选择,可是一旦超出了这些限制条件,数据库设计的问题就暴露的很明显了。

对于安全性这个问题是怎么理解的呢?想一想对于每个使用了SQLite的APP来说,它们或多或少都会保存些私密的数据在其中,使用SQLite这对于开发者来说是很方便,但是方便不仅仅是对于他们来说,同时对于一些有“额外想法”的人来说的。免费版本的SQLite有一个致命缺点:不支持加密。意味着,你APP上的数据库其实是在裸奔!对于那些想获取数据的人来说,只要让手机ROOT之后,就可以进入每个APP的目录下面获取db文件从而轻易的得到数据。

性能方面的优化是改造SQLite的最重要一步,优化可以从多个方面切入去提升SQLite的性能。

重点要说的是很多时候我们以为已经建立了索引,但事实上并没有真正生效。这里关键在于如何正确的建立索引。例如使用了BETWEEN、LIKE、OR这些操作符、使用表达式或者CASEWHEN等。

建立索引是有代价的,需要一直维护索引表的更新,比如对于一个很小的表来说就没有必要建索引;如果一个表经常是执行插入更新操作,那么也需要节制的建立索引。总的来说有几个原则:

针对于SQLite的安全问题的解法类似于很多数据库的安全解法,目前常用的方案主要是两类:

对于大部分开发者来说,兼顾安全性和成本的同时,免费版本的SQLCipher也是我们优先采取的安全性加固方案。

上面我们分析了SQLite的优缺点,也基本了解了目前有哪些通用的解决方案,回到我们的主题《攻与防》,这期我们就开始介绍我们的主角-SQLCipher。

基于SQLite接口设计的采用256-bitAES加密算法的安全加密数据库。

我们现在只是了解SQLCipher能够给我们的数据库提供安全加固的保护,那它的实现原理是什么呢?

而SQLCipher就是基于以上的四个接口以及自定义的接口来实现加密的,下面通过图片了解整个加密流程:

上图为SQLCipher的实现原理,加密流程为以下步骤:

PS:以上为默认的算法,SQLCipher没有固定算法,用户可以自己设置。

“最基本的调试方案”,只需要在Linux系统安装好SQLCipher,其他的操作和SQLite无异,唯一需要注意的是SQLCipher是加密库,也就是我们需要给db手动添加密码,操作大致如下:

针对原始的tech_paoding.db数据库生成新的decrypted_database.db数据库

这里的Cipher(也就是加密算法)、KDF、PageSize的值都是默认好的,是SQLCipher3的默认算法的值,如果使用的SQLCipher4的值话,这些数据就需要改变。

对于开发者来说,使用SQLCipher并不会对原本的APP逻辑入侵,只需要按照下面两个步骤即可将SQLite数据库加固。

对于正常使用Android端SQLite来说,引入的SQLite库是android.database.sqlite,比如我们要使用SQLiteDatabase,就需要这样引入:

importnet.sqlcipher.database.SQLiteDatabase;另外需要注意的是,android.database.sqlite是Android项目的内置包,而net.sqlcipher.database.SQLiteDatabase则需要我们自己引入,我的引入方案是从官网拉下对应的aar包,加入到本地的libs中,然后在build.gradle中指定引入路径

implementation(name:'android-database-sqlcipher-3.5.5',ext:'aar')这样,我们就可以顺利的使用SQLCipher进行开发了。

由于SQLCipher的算法是基于SO库开发的,所以我们在正常使用SQLCipher之前需要使用loadLibs方法来加载SQLCipher的SO加密库,例如:

SQLiteDatabase.loadLibs(this);loadLibs方法的逻辑如下:

主要的代码如上图所示,下面看看开发好的Demo的展示:SQLite和SQLCipher的功能已经整合在同一个APP中,通过不同的Activity来展示。

上面我们了解了SQLCipher的由来、原理、基本的使用方法,这一部分我们呼应一下标题《攻与防》,我们结合市面上的用到了SQLCipher加密数据库的APP来看看它们是如何做过安全防护的以及那些“不法者”是怎么去破解这些防护的。

关于百度汉语APP我主要下载了以下几个版本的APK我也发现了他们在不同版本对于整个APP的不同加固方案,这个我们在分析好整个SQLCipher方面的防护之后我们再总结,首先我们使用最新版本APP来分析下,作为词典类型的APP,总会有一个额外内部的数据库来作为离线时的查询方案,那么我们可以寻找下百度汉语APP他们的数据库方案,我们寻找下哪里是他们离线文件的入口,可以很容易在这里看到这里这里有个离线文件下载的功能,于是可以猜测是通过下载离线db文件来填充他们的离线数据库,如第二幅图所示的免费离线包这个列表极可能是通过网络接口动态获取的,因为我们在离线状态下是获取不到的。通过抓这个接口的网络请求包可以发现,可以获取请求db文件的地址根据地址我们获取到了相应的db文件,下载完成后得到这样的文件baidu_dict.db,判断是基于SQLite的文件,放入SQLiteStudio以SQLite方式打开会提示错误,说明应该是基于SQLCipher的加密文件,我们需要寻找的是SQLCipher的秘钥,于是下面我们开始关于秘钥的追踪。

现在我们找到了APP获取秘钥的方法,我们继续跟踪,秘钥采用了SO的函数,调用了libimagerender.so,我们使用IDA具体查看下,直接查看Exports的tab会发现具体的函数属于静态注册的定位到了具体的函数,修复下即可获取真实的秘钥,接着我们使用这个秘钥再去解密数据库即可。

上面分析好了SQLCipher秘钥的获取历程之后,再说说百度汉语APP对于它们的SQLCipher秘钥的加固的演变历程吧,文字就不多说了,直接上图。

THE END
1.百度汉语app新版本免费下载百度汉语是一款集智能、权威、便捷于一身的汉语学习工具,它的出现旨在传承和弘扬中华文化,同时为广大汉语使用者提供极致的学习体验。应用内收录了超过五十万条丰富资源,包括K12教育阶段常见的字词、生僻字、成语、网络新词、诗词、古文等,全面满足各类用户的学习需求。 https://www.mumudroid.com/detail/7843.html
2.百度汉语词典下载v1.0安卓版百度汉语词典下载是百度官方推出的一款汉语词典手机APP,收录三十多万条词汇,是你学习的好帮手。 软件说明: - 百度汉语词典致力于做更智能、权威、便捷的汉语词典工具。以弘扬中华文化为宗旨,推广汉语学习,为广大汉语的用户提供便利。 - 词典收录词汇多达三十多万条,囊括了K12学习常见字、生僻字、词语、成语、网络词汇等https://www.qqtn.com/azsoft/99270.html
3.百度汉语离线版下载v4.0.1.10安卓免费版好用的手机汉语词典软件,软件拥有的资源非常丰富,一个个的帮助你“咬文嚼字”,有了百度汉语词典app帮助你吃透汉语。全面覆盖K12学习过程中的常见字、生僻字、词语、成语、网络词汇、诗词、古文等资源,你只要说出汉字,就可快速查询,为广大汉语用户提供便利。弘扬中华文化,推广汉语学习,就是百度汉语! http://www.996kqw.com/anzhuoruanjian/168981.html
4.百度汉语app下载百度汉语(手机词典)v4.2.3.10安卓版下载百度汉语(手机词典) v4.2.3.10 安卓版 ,百度汉语官方版是一款可以帮助用户快速查找自己想要汉字的手机词典工具,这款软件由百度推出,拥有强大的找字功能,还能够自动智能找词、拍照找词,用户可以手写,也可以拍照,还能够直接语音找字,让大家快速找到自己想要的汉字,有需https://www.jb51.net/softs/506514.html
5.百度词典包含百度词典的词语拼音查词 结构查词 词性查词 汉语词语拼音 汉语解释 包含百度词典的词语 最新文章 爷青结是什么意思 耶斯莫拉是什么意思 打工人是什么梗 化妆与化装的区别和意思 词语老头子的解释 纪晓岚的趣味故事 词语流言的意思 佛学大师是怎么看待流言 词语流言的意思 从心理学上看流言是怎样的 https://www.hao86.com/ciyu_search/%E7%99%BE%E5%BA%A6%E8%AF%8D%E5%85%B8/
6.汉语词典在线查询在线汉语词典 百度汉语 - 更懂汉语,更懂你 https://hanyu.baidu.com/ 百度汉语为您提供全面、权威的汉语数据,包括汉字、词语、成语、诗词等诸多内容;同时运用问答、拍照、语音等人工智能技术,为您提供更加人性高效的交互方式,让不识字、提笔忘字、语文题不会做等烦恼一扫而光;您也可以方便的添加管理自己的生词本http://www.sowang.com/cidian/
7.“都”古汉语词典有哪些解释百度试题 结果1 结果2 题目“都”古汉语词典有哪些解释 相关知识点: 试题来源: 解析 1. (形声.从邑,者声.从“邑”,表示与城市有关.本义:建有宗庙的城邑)2. 同本义 [capital],周时各国把国都叫国,把有宗庙或先君神主的城叫都,没有的叫邑都,有先君之旧宗庙曰都.——《说文》距闰王百里为都.——《https://easylearn.baidu.com/edu-page/tiangong/questiondetail?id=1729783818517923924&fr=search
8.汉语字典[简述]:词典网CiDianWang.com提供丰富的字典,词典查询,是中小学生学习国学、书法、外语的好工具。在词典网您可以查新华字典、康熙字典、书法字典、英汉词典、韩语词典、日语词典、德语词典、汉语词典、成语词典、各种中小学生作文等。 http://www.cidianwang.com - 收藏 百度权重:1Alexa排名:0人气指数:3811更新:2024-https://www.023dir.com/so/name/%E6%B1%89%E8%AF%AD%E5%AD%97%E5%85%B8.html
9.在线新华字典/查字典/汉语字典新华字典在线查字收录简体汉字、繁体汉字共3万多个,提供汉字的拼音、笔画、部首、五笔86/98编码、仓颉、郑码、电码、汉字笔顺编号、四角号码、UNICODE、汉字方言、汉英互译、词性变化、康熙字典解释、说文解字、汉字英语翻译等详细解释。http://zidian.aies.cn/
10.好用的韩语词典&韩语学习工具推荐三、国立国语院韩国语-汉语学习词典 图标如下图: 网址请点击:https://krdict.korean.go.kr/chn/mainAction?nation=chn 特色:支持平米小键盘输入,即使电脑没有安装韩语输入法也非常方便。另外,检索时,除了词汇本身外,还能检索到对应的惯用语、谚语和释义。尤其是在释义里展开内容比较多,非常适合拓宽词汇量。 http://www.batedu.cn/kr/49856
11.软件开发中的业务到底是什么开发业务是什么汉语词典 https://cidian.aies.cn/NTEyMDk=.htm 【词语】业务 【拼音】yè wù 【解释】1.本行业﹑本职的事务;专业工作。 汉典 https://www.zdic.net/hans/%E4%B8%9A%E5%8A%A1 条目 业务(業務) 拼音yè wù 注音ㄧㄝˋ ㄨˋ 解释 ◎ 业务 yèwù https://blog.csdn.net/zhan107876/article/details/123296209
12.有道词典破解版下载有道词典下载v8.9.0.0破解版有道词典(破解版)是一款非常专业强大的翻译软件,由网易公司出品,有道词典支持41种语言翻译,海量词汇、在线翻译,全新加入了日语、法语、韩语查词功能,权威性字典+互联网释意组成将各种兴盛语汇和汉语翻译百度收录至少,出示精确的在线词典、汇聚全球例句等,具备运作更快、百度收录语汇新、显示屏取词全、词规章名多、英中韩http://www.kkx.net/soft/406.html
13.字典.词典(29.5GB)百度网盘资源下载美国传统词典_American Heritage Dictionary.mobi 91.1MB 简明英汉词典.mobi 41.1MB 现代英汉词典[官方词典].mobi 6.2MB 现代汉语词典2005.pdf 113.5MB 3. 毕方铺高度重视知识产权保护和个人隐私保护,如有网盘链接侵犯您的合法权益,请立即向百度网盘官方网站举报,并参见本站《版权说明》提供书面材料联系我们屏蔽https://www.iizhi.cn/resource/detail/ea7da7bd05759d84b5677757ac3a112c
14.辞典的解释辞典的意思汉典“辞典”词语的解释百度百科 辞典 主要用来解释词语的意义、概念、用法的工具书。广义的词典包括语文词典及各种以词语为收录单位的工具书;狭义词典仅指语文词典。其整体结构一般由前言、凡例、正文、附录、索引等部分组成。正文以词条的形式解释词目,词条实现有序化编排。从不同的标准或特征出发,词典可分多种类型。汉语词典从内容上着眼区https://www.zdic.net/hans/%E8%BE%9E%E5%85%B8
15.古汉语词典在线查询文言文常用字翻译转换器古文翻译器古汉语字典可以在线查询文言文中常用字的详细解释说明,文言文翻译器在线转换为更为通俗易懂的现代文,古汉语词典让您学习文言文古文更加方便。https://ghy.chacd.com/