使用SQLite数据库加密敏感信息并嵌入程序(2)

一、上期摘要

 上一篇 文章,我们使用原生 SQLite 数据库引擎函数创建了一个演示数据库,我们的目标是将敏感信息保存到数据库并将之作为资源嵌入到程序中,以便在运行时实现某些诸如程序状态的收集、验证等操作。

通常情况下我们可以简单的将资源释放、保存到临时文件再加载获取数据以便完成相对隐蔽的操作。但既然是数据有敏感性,这种操作可能会造成了某些潜在的风险,我们的目标是资源数据不落地,所有操作都在内存中完成,完全避免上述可能的风险,接下来的文章就来完成这个目标。

二、资源编辑

上一篇文章我们使用 SQLiteDatabaseBrowserPortable 和原生 SQLite 函数分别生成了2个数据库文件,下面我们将这2个文件都作为资源嵌入到程序中,使用记事本新建一个 BNDemo.rc 的文件,保存在工程文件夹下,输入如图1所示的内容,描述资源名称、类型、文件路径即可。

图 1 BNDemo.rc 资源文件

 再新建一个批处理文件 BuildRes.bat,输入如图2所示,批处理中主要是调用brcc32.exe来编译资源文件,同样保存在工程文件夹下。

图 2  BuildRes.bat 批处理文件

 运行 BuildRes.bat 可以发现在当前工程文件夹下生成了一个 BNDemoDb.res 的文件,如图3所示,这个就是我们在程序中使用到的资源。

图 3  编译后程序中将使用的文件

接下来修改工程文件,加入嵌入资源语句,如下图4所示:

图 4  添加嵌入资源语句

 最后编译 Delphi 工程,然后使用 CFF Explorer 打开刚刚编译的工程文件查看其中的资源,图5显示了资源名称为“DB2”的二进制数据,可以清晰的辨识该资源数据就是由SQLiteDatabaseBrowserPortable 工具创建的未加密的数据库 demodb,作为对比再来看看资源“DB1”的二进制数据,如图6所示,可以看到由于该数据库已设置密码,无法直观的看到 SQLite 数据库文件头的标识 “SQLite format 3” 字样。

图 5  资源中的 demoDb 数据库二进制数据

图 6  资源中的 MyDemoDb.db 数据库二进制数据

三、结语

作为示例,本文所使用的资源经过编译后直接嵌入到程序本身,实际工程中往往单独编译成资源文件,与程序本身分离。

至此,我们已完成了准备工作,下一篇我们将着重代码的实现,目标是完成资源不落地的场景下解析获取所需数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吴说扒道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值