这门课解决什么问题,适合什么基础
很多开发者平时用 SQLite,只是停留在写 SQL 语句、调接口把数据存进去再读出来的层面。一旦遇到别人的软件把敏感配置或核心业务逻辑塞进 SQLite 文件,甚至做了加密或魔改,你就抓瞎了。这门课解决的就是这个问题:把 SQLite 当作一个可拆解的软件实体去逆向,搞懂它的存储结构,搞懂怎么从外部和内部去截获函数执行时的数据,而不是只会对着接口文档抄代码。它适合已经写过基础 C 或 C++ 程序、了解 Visual Studio 基本操作、但对底层逆向和数据库内部机制还一知半解的人。如果你连变量作用域和指针都搞不清楚,建议先补 C 语言基础再来看,别假装看两眼汇编就能懂。
建议先看哪几块,资料怎么配合练习
不要一上来就啃数据库源码,那样绝对会卡壳。课程前面安排了课前预习,这部分不是凑数的废话,是给你补逆向基本功的。建议先跟着预习部分,把最简单的 Main 函数结构理清,动手在 Visual Studio 2019 里把环境搭好,跟着操作去写一个最基础的数据库操作程序。接着重点看怎么从软件外部和内部调用函数、怎么截获函数中的数据。这部分练习时,不要光看视频,必须自己开 VS 编译,用调试器去跟一遍调用栈,对照着去打软件补丁、给现有软件开发控制界面。资料包里的源码和编译配置线索,是你动手验证的参照物,别把它当阅读材料,要一边看一边在本地复现编译过程,改改参数看结果有什么变化。只有自己跑通编译,后面看 SQLite 源码和命令行编译才不会懵。
学完能独立做什么
看完这套东西,你不一定能去搞大型商业软件的深度脱壳,但手里会多出几项实打实的硬技能。第一,你能独立编译 SQLite 命令行工具,不会再把它当成一个不可见的黑盒。第二,你能自己写一个简单的数据库操作程序,并且知道在函数调用过程中,数据在内存里是怎么流转的。第三,遇到一款用了 SQLite 存数据的第三方软件,你有思路去截获它操作数据库时的关键数据,甚至能动手给它打补丁、做一个外部控制界面来接管它的行为。学完之后,建议拿一个本地的 SQLite 数据库文件,自己尝试把表结构和数据存储机制分析出来,验证一下自己是不是真的把数据库的底层存储和逆向调用逻辑吃透了。
课程目录
1-1 [课程总览] 课程总览 (05:11) 2-1 [课前预习] 最简单的Main函数 (02:49) 2-2 [课前预习] 从软件外部调用函数 (03:13) 2-3 [课前预习] 从软件内部调用函数 (06:52) 2-4 [课前预习] 截获函数中的数据 (07:04) 2-5 [课前预习] 软件补丁的制作 (03:08) 2-6 [课前预习] 为现有的软件开发一个控制界面 (12:06) 2-7 [课前预习] Visual Studio 2019安装 (02:36) 3-1 [SQLite数据库逆向分析] SQLite数据库源码介绍 (04:00) 3-2 [SQLite数据库逆向分析] SQLite命令行编译 (09:58) 3-3 [SQLite数据库逆向分析] 使用VS编写一个简单的数据库操作程序 (07:03) 3-4 [SQLite数据库逆向分析] 获取软件访问SQLite数据库的句柄 (16:48) 3-5 [SQLite数据库逆向分析] 从软件中读出SQLite数据库句柄 (07:49) 3-6 [SQLite数据库逆向分析] 从软件中找到sqlite3_exec函数 (10:10) 3-7 [SQLite数据库逆向分析] 验证从软件中找到sqlite3_exec函数 (07:36) 3-8 [SQLite数据库逆向分析] 使用IDA进一步分析软件中的函数 (08:15) 4-1 [插播:易语言] 解决注入含窗口的易语言DLL的问题 (09:49) 4-2 [插播:易语言] 易语言中的参数传递和命名约定分析(1) (17:52) 4-3 [插播:易语言] 易语言中的参数传递和命名约定分析(2) (06:17) 4-4 [插播:易语言] 寻找SQLite数据库中回调函数的样板 (12:19) 4-5 [插播:易语言] 如何将stdcall函数调用转换为cdecl函数调用 (10:30) 4-6 [插播:易语言] 如何使用易语言构造cdecl类型函数(1) (13:31) 4-7 [插播:易语言] 如何使用易语言构造cdecl类型函数(2) (13:22) 4-8 [插播:易语言] 如何使用易语言构造cdecl类型函数(3) (08:54) 4-9 [插播:易语言] 如何使用易语言构造cdecl类型函数(4) (11:21) 4-10 [插播:易语言] 使用易语言调用软件中的sqlite3_exec函数(1) (11:31) 4-11 [插播:易语言] 使用易语言调用软件中的sqlite3_exec函数(2) (16:27) 5-1 [逆向分析&正向实现] 使用C语言调用软件中的sqlite3_exec函数 (13:49) 5-2 [逆向分析&正向实现] 补充:将易语言函数“改造”成cdecl类型函数 (15:15) 5-3 [逆向分析&正向实现] SQLite数据库在线备份 (09:51) 5-4 [逆向分析&正向实现] 用函数指针调用SQLite数据库函数 (10:07) 5-5 [逆向分析&正向实现] 如何在内存中构造一个函数(1) (16:57) 5-6 [逆向分析&正向实现] 如何在内存中构造一个函数(2) (20:58) 5-7 [逆向分析&正向实现] 如何判断软件中的SQLite数据库版本 (09:12) 5-8 [逆向分析&正向实现] 如何组装老版本SQLite数据库源码 (05:59) 5-9 [逆向分析&正向实现] 准备从正在运行的软件中备份SQLite数据库(1) (08:08) 5-10 [逆向分析&正向实现] 准备从正在运行的软件中备份SQLite数据库(2) (13:41) 5-11 [逆向分析&正向实现] 如何在软件中定位SQLite数据库中的函数(1) (11:37) 5-12 [逆向分析&正向实现] 如何在软件中定位SQLite数据库中的函数(2) (18:41) 5-13 [逆向分析&正向实现] 如何在软件中定位SQLite数据库中的函数(3) (11:31)





