数据库文件_数据库文件导入 - CSDN
精华内容
参与话题
  • 数据库文件

    2020-07-21 09:58:50
    一些MySQL数据库源代码
  • mdf数据库文件怎么打开?

    万次阅读 2018-08-01 22:43:29
    1、找到要打开的数据库文件,如图 2、如图所示,该数据库文件后缀名为.mdf,是SQL Server数据库的数据文件,这里将用SQL Server数据库对该文件进行打开。启动SQL Server数据库,如图 3、图为启动SQL Server ...

    方法/步骤

    1、找到要打开的数据库文件,如图

    2、如图所示,该数据库文件后缀名为.mdf,是SQL Server数据库的数据文件,这里将用SQL Server数据库对该文件进行打开。启动SQL Server数据库,如图

    3、图为启动SQL Server Management Studio时的界面,登录后可以管理数据库数据。开启之后的界面如图

    4、提示用户输入用户名和登录密码,输入正确后,点击登录,进入管理界面,如图

    5、进入管理界面后,右键选择数据库,再选择【附加】功能,如图

    6、点击【附加】后,出现窗口,如图

    7、在【附加数据库】窗口中,点击【添加】按钮,提示选择要附加的数据库,如图

    8、选种要添加的数据库,点击确定,在管理界面中会出现添加的数据库,如图

    9、打开数据库,就可以看到数据库中的表,表中的数据都可以看到。如图

     

    注意事项

    按以上步骤来,就可以打开数据库文件

    不要直接点右键进行打开,可能会对文件告成损坏。

    展开全文
  • 数据库文件下载

    2011-08-18 09:59:25
    @RequestMapping("/show") public void show(HttpServletRequest request, HttpServletResponse response) { Info info = (Info) request.getSession().getAttribute("info"...

     @RequestMapping("/show")
     public void show(HttpServletRequest request, HttpServletResponse response) {
           Info info = (Info) request.getSession().getAttribute("info");
           String imgId = R.get("imgId");// 图片ID
           BLOB blob = super.wmsDao.findZp(imgId);
           if (blob != null) {
           // 得到java.sql.Blob对象后强制转换为oracle.sql.BLOB
                  response.setContentType("image/jpeg");
                  response.setHeader("Pragma", "No-cache");
                  response.setHeader("Cache-Control", "no-cache");
                  response.setDateHeader("Expires", 0);
                  ServletOutputStream out;
                  try {
                        out = response.getOutputStream();
                        out.write(blob.getBytes(1, (int) blob.length()));
                        out.flush();
                        out.close();
                  } catch (Exception e) {
                         super.logDao.save(info, "失败!", "读取文件失败!");
                         e.printStackTrace();
                  }
           }

     }

    展开全文
  • MySQL 数据库文件 详解

    万次阅读 2018-03-19 09:47:09
    MySQL 的每个数据库都对应存放在一个与数据库同名的文件夹中,该文件夹由 MySQL 配置文件 /etc/my.cnf 定义,其中 datadir=/var/lib/mysql 就指定存放位置,MySQL 数据库文件包括 MySQL 所建数据库文件和 MySQL 所用...
    MySQL 的每个数据库都对应存放在一个与数据库同名的文件夹中,该文件夹由 MySQL 配置文件 /etc/my.cnf 定义,其中 datadir=/var/lib/mysql 就指定存放位置,MySQL 数据库文件包括 MySQL 所建数据库文件和 MySQL 所用存储引擎创建的数据库文件
    $ cd /var/lib/mysql
    $ ls    # MySQL 数据存放位置,其中 mytest test 文件夹和数据库同名
    auto.cnf        client-cert.pem        ib_logfile0        ibtmp1            mysql-bin.000002    mytest            public_key.pem        spring_boot_demo
    ca-key.pem        client-key.pem        ib_logfile1        mysql            mysql-bin.000003    performance_schema    server-cert.pem        sys
    ca.pem            ib_buffer_pool        ibdata1            mysql-bin.000001    mysql-bin.index        private_key.pem        server-key.pem        test

    $ cd test

    $ ll    .frm 分别对应一个同名表名
    total 1584
    -rw-r-----@ 1 mew  staff      24  2 28 13:30 JPA_ADDRESSES.MYD
    -rw-r-----@ 1 mew  staff    2048  2 28 13:30 JPA_ADDRESSES.MYI
    -rw-r-----@ 1 mew  staff    8624  2 28 12:31 JPA_ADDRESSES.frm
    -rw-r-----@ 1 mew  staff      44  2 28 16:02 JPA_PERSONS.MYD
    -rw-r-----@ 1 mew  staff    3072  2 28 16:02 JPA_PERSONS.MYI
    -rw-r-----@ 1 mew  staff    8734  2 28 16:02 JPA_PERSONS.frm
    -rw-r-----@ 1 mew  staff    8586  3 16 15:58 a.frm
    -rw-r-----@ 1 mew  staff   98304  3 16 15:59 a.ibd
    -rw-r-----@ 1 mew  staff    8803  3 15 17:15 acc_login.frm
    -rw-r-----@ 1 mew  staff  147456  3 16 09:32 acc_login.ibd
    -rw-r-----@ 1 mew  staff      65  2  8 16:43 db.opt
    -rw-r-----@ 1 mew  staff    8618  3  7 15:29 goods.frm
    -rw-r-----@ 1 mew  staff  114688  3  9 16:21 goods.ibd
    -rw-r-----@ 1 mew  staff      18  2 28 12:31 hibernate_sequence.MYD
    -rw-r-----@ 1 mew  staff    1024  2 28 12:31 hibernate_sequence.MYI
    -rw-r-----@ 1 mew  staff    8568  2 28 12:31 hibernate_sequence.frm
    -rw-r-----@ 1 mew  staff    8733  3  7 14:58 methodLock.frm
    -rw-r-----@ 1 mew  staff  114688  3  7 15:02 methodlock.ibd
    -rw-r-----@ 1 mew  staff    8636  3  9 16:26 score.frm
    -rw-r-----@ 1 mew  staff   98304  3  9 16:26 score.ibd
    -rw-r-----@ 1 mew  staff    8714  3  8 10:10 time.frm
    -rw-r-----@ 1 mew  staff   98304  3  9 16:22 time.ibd

    MySQL 创建并管理的数据库文件 :
    .frm文件 : 存储数据表的框架结构,文件名与表名相同,每个表对应一个同名 frm文件,与操作系统和存储引擎无关,即不管 MySQL 运行在何种操作系统上,使用何种存储引擎,都有这个文件。除了必有的 .frm文件,根据 MySQL 所使用的存储引擎的不同 (MySQL 常用的两个存储引擎是 MyISAM 和 InnoDB),存储引擎会创建各自不同的数据库文件

    MyISAM 表文件 :
    .MYD : 即 MY Data,表数据文件
    .MYI : 即 MY Index,索引文件
    .log : 日志文件

    InnoDB 表文件 : 采用表空间 (tablespace) 来管理数据,存储表数据和索引,InnoDB 数据库文件 (即 InnoDB文件集,ib-file set)
    ibdata1、ibdata2等 : 系统表空间文件,存储 InnoDB系统信息和用户数据库表数据和索引,所有表共用,即 共享表空间数据文件
    .ibd : 单表表空间文件,每个表使用一个表空间文件 (file per table),存放用户数据库表数据和索引
    日志文件 : ib_logfile1、ib_logfile2

    InnoDB 有 共享表空间 和 独立表空间 两种,MySQL 默认使用独立表空间,可以在 MySQL 配置文件 [mysqld] 部分增加 innodb_file_per_table 参数进行设定

    独立表空间 :
    优点 :
    1> 每个表都有自已独立的表空间
    2> 每个表的数据和索引都会存在自已的表空间中
    3> 可以实现单表在不同的数据库中移动
    4> 空间可以回收 (除 drop table 操作处,表空不能自已回收)
         <1> drop table 操作自动回收表空间,如果对于统计分析或是日值表,删除大量数据后可以通过 : alter table TableName engine=innodb; 回缩不用的空间
         <2> 对于使 innodb-plugin 的 Innodb 使用 turncate table 也会使空间收缩
         <3> 对于使用独立表空间的表,不管怎么删除,表空间的碎片不会太严重的影响性能,而且还有机会处理
    缺点 :
    单表增加过大,如超过100个G

    查看当前使用的是 共享表空间 还是 独立表空间
    mysql> show variables like '%innodb_file_per%';
    +-----------------------+-------+
    | Variable_name         | Value |
    +-----------------------+-------+
    | innodb_file_per_table | ON    |    ON 代表独立表空间管理,OFF 代表共享表空间管理
    +-----------------------+-------+
    1 row in set (0.01 sec)

    mysql> set global innodb_file_per_table=off;    # 设置为共享表空间管理
    Query OK, 0 rows affected (0.01 sec) 
    在 my.cnf 中 [mysqld] 下设置 innodb_file_per_table=0 也可以关闭独立表空间


    展开全文
  • PC微信逆向:两种姿势教你解密数据库文件

    万次阅读 多人点赞 2019-12-23 10:05:33
    文章目录定位数据库文件密码定位数据库密钥的思路获取数据库密钥的实战分析CreateFileW断点常见错误排查堆栈排查堆栈地址单步跟踪用代码实现解密数据库编译选项解密代码实际效果动态获取数据库密钥定位数据库文件...

    定位数据库文件密码

    微信的数据库使用的是sqlite3,数据库文件在C:\Users\XXX\Documents\WeChat Files\微信账号\Msg这个路径下,

    在这里插入图片描述

    所有的数据库文件都是经过AES加密的,AES的密钥是32位,而且所有数据库文件共用一个密钥,我们需要找到那个AES密钥才能进行解密,然后才能对数据库文件进行操作。

    定位数据库密钥的思路

    微信在登录时肯定要从数据库文件中获取历史聊天记录加载到程序中,然后我们才能看到之前的聊天记录。那么在微信读取数据库文件之前肯定要先打开数据库文件,所以CreateFile这个API就是我们的切入点。

    在API断下之后怎么去找数据库的密码呢?可以根据AES的密钥长度为32位这个线索,32也就是十六进制的20,时刻注意20这个数字!

    另外,在解密数据库的call中至少需要两个参数,一个是AES的密钥,另外一个是需要解密的数据库文件的路径。

    还有一种方法是在内存中搜索数据库文件的名字,然后下访问断点。这种方案也是可行的。

    获取数据库密钥的实战分析

    CreateFileW断点

    在这里插入图片描述

    打开微信,手机不要点击登录,用OD附加微信,在CreateFileW函数下断点,下好断点之后在手机上确认登录

    在这里插入图片描述

    在CreateFileW的参数中找一个FileName为xxx.db的,我们要在微信访问这个数据库文件的时候断下,然后从这里开始往下跟。一直跟到有数据库的密码的地方

    常见错误

    在这里插入图片描述

    如果出现了这个错误,需要修改一下设置

    在这里插入图片描述

    在这里插入图片描述

    将StrongOD和OD本身取消忽略所有异常,这个错误是因为多线程访问冲突引起的。

    排查堆栈

    在CreateFileW的返回地址下断,直接F9运行,CreateFileW这个API我们是不需要看的

    在这里插入图片描述

    CreateFileW断点断下来,那么现在应该怎么跟呢?肯定不能一直往下单步,虽然单步也能达到目标。

    分析一下现在的状况,这个时候微信的数据库处于一个还未初始化,但是即将初始化的状态,我们可以在堆栈或者堆栈附近的地址找到关于数据库初始化相关的函数。然后在微信初始化完数据库之后单步往下跟。这样能省去很多麻烦

    排查堆栈地址

    在这里插入图片描述

    直接找到第四个返回地址

    在这里插入图片描述

    这个函数传入了三个参数,虽然三个参数都没有什么价值。但是这个call稍微往下拉,你会发现一个字符串

    在这里插入图片描述

    这个函数的作用应该就是用来提示错误的,一般比较大的工程都会将错误提示信息写成一个函数,报错的时候会提示哪一个模块的哪一个cpp的哪一行出错了,以便最快定位到错误点。

    再往上看会发现一个je,用来跳过这个错误

    在这里插入图片描述

    根据这个错误提示的内容,我们现在可以百分百的确定打开数据库的操作已经完成!

    单步跟踪

    在这里插入图片描述

    因为微信的数据库文件不止一个,所以我们不需要重启微信。直接在这个函数下断点,然后取消剩下的所有断点,按F9运行,程序断下。然后F8单步,

    在这里插入图片描述

    这里是我们遇见的第一个函数,看参数就知道不是我们想要的了,跳过 继续往下

    在这里插入图片描述

    第二个函数将数据库名和一个保存零的指针入栈,也跳过

    在这里插入图片描述

    第三个函数就很可疑了,这个call将三个参数压入堆栈,其中eax是一个结构体,里面保存一个地址和0x20这个数字,AES的密钥正好是32位的,也就是十六进制的0x20。

    数据窗口跟随,前两行0x20个字节就是数据库的密钥了

    在这里插入图片描述

    各个参数含义如下:

    在这里插入图片描述

    用代码实现解密数据库

    编译选项

    在这里插入图片描述

    工程需要包含OpenSSL的相关文件

    解密代码

    这份代码原作者是谁我已经不记得了 反正被拷来拷去拷了很多次了

    #include "pch.h"
    #include <iostream>
    #include <Windows.h>
    #include <openssl/rand.h>
    #include <openssl/evp.h>
    #include <openssl/aes.h>
    #include <openssl/hmac.h>
    
    using namespace std;
    
    #pragma comment(lib, "ssleay32.lib")
    #pragma comment(lib, "libeay32.lib")
    
    #if _MSC_VER>=1900
    #include "stdio.h" 
    _ACRTIMP_ALT FILE* __cdecl __acrt_iob_func(unsigned);
    #ifdef __cplusplus 
    extern "C"
    #endif 
    FILE* __cdecl __iob_func(unsigned i) {
    	return __acrt_iob_func(i);
    }
    #endif /* _MSC_VER>=1900 */
    
    
    
    #undef _UNICODE
    #define SQLITE_FILE_HEADER "SQLite format 3" 
    #define IV_SIZE 16
    #define HMAC_SHA1_SIZE 20
    #define KEY_SIZE 32
    
    #define SL3SIGNLEN 20
    
    
    #ifndef ANDROID_WECHAT
    #define DEFAULT_PAGESIZE 4096       //4048数据 + 16IV + 20 HMAC + 12
    #define DEFAULT_ITER 64000
    #else
    #define NO_USE_HMAC_SHA1
    #define DEFAULT_PAGESIZE 1024
    #define DEFAULT_ITER 4000
    #endif
    
    //pc端密码是经过OllyDbg得到的64位pass,是64位,不是网上传的32位,这里是个坑
    unsigned char pass[] = { 0xc7,0x99,0x26,0xc0,0x36,0x6b,0x4f,0xee,0xb8,0xc7,0x48,0x83,0xaa,0xc9,0x6c,0x7e,0x0b,0x0a,0xda,0x3a,0x56,0x71,0x48,0xac,0xb9,0xda,0x4f,0x37,0x5c,0x4d,0x0b,58};
    int Decryptdb();
    int main() {
    	Decryptdb();
    	return 0;
    }
    int Decryptdb() {
    
    	const char*  dbfilename = "ChatMsg.db";
    	FILE* fpdb;
    	fopen_s(&fpdb, dbfilename, "rb+");
    	if (!fpdb) {
    		printf("打开文件错!");
    		getchar();
    		return 0;
    	}
    	fseek(fpdb, 0, SEEK_END);
    	long nFileSize = ftell(fpdb);
    	fseek(fpdb, 0, SEEK_SET);
    	unsigned char* pDbBuffer = new unsigned char[nFileSize];
    	fread(pDbBuffer, 1, nFileSize, fpdb);
    	fclose(fpdb);
    
    	unsigned char salt[16] = { 0 };
    	memcpy(salt, pDbBuffer, 16);
    
    #ifndef NO_USE_HMAC_SHA1
    	unsigned char mac_salt[16] = { 0 };
    	memcpy(mac_salt, salt, 16);
    	for (int i = 0; i < sizeof(salt); i++) {
    		mac_salt[i] ^= 0x3a;
    	}
    #endif
    
    	int reserve = IV_SIZE;      //校验码长度,PC端每4096字节有48字节
    #ifndef NO_USE_HMAC_SHA1
    	reserve += HMAC_SHA1_SIZE;
    #endif
    	reserve = ((reserve % AES_BLOCK_SIZE) == 0) ? reserve : ((reserve / AES_BLOCK_SIZE) + 1) * AES_BLOCK_SIZE;
    
    	unsigned char key[KEY_SIZE] = { 0 };
    	unsigned char mac_key[KEY_SIZE] = { 0 };
    
    	OpenSSL_add_all_algorithms();
    	PKCS5_PBKDF2_HMAC_SHA1((const char*)pass, sizeof(pass), salt, sizeof(salt), DEFAULT_ITER, sizeof(key), key);
    #ifndef NO_USE_HMAC_SHA1
    	//此处源码,怀凝可能有错,pass 数组才是密码
    	//PKCS5_PBKDF2_HMAC_SHA1((const char*)key, sizeof(key), mac_salt, sizeof(mac_salt), 2, sizeof(mac_key), mac_key);
    	PKCS5_PBKDF2_HMAC_SHA1((const char*)key, sizeof(key), mac_salt, sizeof(mac_salt), 2, sizeof(mac_key), mac_key);
    #endif
    
    	unsigned char* pTemp = pDbBuffer;
    	unsigned char pDecryptPerPageBuffer[DEFAULT_PAGESIZE];
    	int nPage = 1;
    	int offset = 16;
    	while (pTemp < pDbBuffer + nFileSize) {
    		printf("解密数据页:%d/%d \n", nPage, nFileSize / DEFAULT_PAGESIZE);
    
    #ifndef NO_USE_HMAC_SHA1
    		unsigned char hash_mac[HMAC_SHA1_SIZE] = { 0 };
    		unsigned int hash_len = 0;
    		HMAC_CTX hctx;
    		HMAC_CTX_init(&hctx);
    		HMAC_Init_ex(&hctx, mac_key, sizeof(mac_key), EVP_sha1(), NULL);
    		HMAC_Update(&hctx, pTemp + offset, DEFAULT_PAGESIZE - reserve - offset + IV_SIZE);
    		HMAC_Update(&hctx, (const unsigned char*)& nPage, sizeof(nPage));
    		HMAC_Final(&hctx, hash_mac, &hash_len);
    		HMAC_CTX_cleanup(&hctx);
    		if (0 != memcmp(hash_mac, pTemp + DEFAULT_PAGESIZE - reserve + IV_SIZE, sizeof(hash_mac))) {
    			printf("\n 哈希值错误! \n");
    			getchar();
    			return 0;
    		}
    #endif
    		//
    		if (nPage == 1) {
    			memcpy(pDecryptPerPageBuffer, SQLITE_FILE_HEADER, offset);
    		}
    
    		EVP_CIPHER_CTX* ectx = EVP_CIPHER_CTX_new();
    		EVP_CipherInit_ex(ectx, EVP_get_cipherbyname("aes-256-cbc"), NULL, NULL, NULL, 0);
    		EVP_CIPHER_CTX_set_padding(ectx, 0);
    		EVP_CipherInit_ex(ectx, NULL, NULL, key, pTemp + (DEFAULT_PAGESIZE - reserve), 0);
    
    		int nDecryptLen = 0;
    		int nTotal = 0;
    		EVP_CipherUpdate(ectx, pDecryptPerPageBuffer + offset, &nDecryptLen, pTemp + offset, DEFAULT_PAGESIZE - reserve - offset);
    		nTotal = nDecryptLen;
    		EVP_CipherFinal_ex(ectx, pDecryptPerPageBuffer + offset + nDecryptLen, &nDecryptLen);
    		nTotal += nDecryptLen;
    		EVP_CIPHER_CTX_free(ectx);
    
    		memcpy(pDecryptPerPageBuffer + DEFAULT_PAGESIZE - reserve, pTemp + DEFAULT_PAGESIZE - reserve, reserve);
    		char decFile[1024] = { 0 };
    		sprintf_s(decFile, "dec_%s", dbfilename);
    		FILE * fp;
    		fopen_s(&fp, decFile, "ab+");
    		{
    			fwrite(pDecryptPerPageBuffer, 1, DEFAULT_PAGESIZE, fp);
    			fclose(fp);
    		}
    
    		nPage++;
    		offset = 0;
    		pTemp += DEFAULT_PAGESIZE;
    	}
    	printf("\n 解密成功! \n");
    	system("pause");
    	return 0;
    }
    

    实际效果

    运行程序

    在这里插入图片描述

    最后生成的dec_ChatMsg.db就是解密出来的文件,对比一下解密前后的文件

    在这里插入图片描述

    解密前

    在这里插入图片描述

    解密后 看到这个MAGIC头,不用验证我就知道已经解密成功了。接下来还是验证一下结果

    在这里插入图片描述

    用Navicat新建一个SQLite连接,

    在这里插入图片描述

    选择解密后的数据库

    在这里插入图片描述

    可以看到所有的表数据已经出现了。解密完成

    动态获取数据库密钥

    找到了密钥之后就结束了吗?这个密钥目前是写死的,如果变化的话,我们又要重新找,然后再次输入。所以我们需要动态获取到数据库密钥。想要动态获取数据库密钥,就必须定位到数据库密钥的基址。步骤如下:

    直接在CE中搜索之前找到的密钥

    在这里插入图片描述

    在这里插入图片描述

    接着依次搜索这两个地址,找到了一个绿色的基址

    在这里插入图片描述

    这个基址以指针的形式保存了微信数据库的密钥,这个地址就是我们要的微信密钥的基址了。

    动态获取数据库密钥的代码如下:

    char databasekey[0x20] = { 0 };
    //获取WeChatWin的基址
    DWORD dwKeyAddr = (DWORD)GetModuleHandle(L"WeChatWin.dll")+ WxDatabaseKey;
    
    LPVOID* pAddr =(LPVOID*)(*(DWORD*)dwKeyAddr);
    
    DWORD dwOldAttr = 0;
    VirtualProtect(pAddr, 0x20, PAGE_EXECUTE_READWRITE, &dwOldAttr);
    
    memcpy(databasekey, pAddr, 0x20);
    
    VirtualProtect(pAddr, 0x20, dwOldAttr, &dwOldAttr);
    

    定位数据库文件句柄

    在拿到数据库密码之后,我们还需要对数据库文件进行解密,解密完成之后才能查询数据库。那么有没有更好的方法可以不需要获取密码也不需要解密数据库文件就能直接进行数据库的查询操作呢?当然是有的,就是通过微信的数据库句柄!

    关于微信数据库句柄

    微信的数据库句柄在一些地方会经常用到,比如查询好友的详细信息的时候,需要传入一个数据库的句柄。然后通过句柄去查询信息,最后返回好友详细信息。

    如果我们直接拿到密码,然后对数据库进行解密,再查询好友信息,这种方法当然也是可以的。但是拿到的数据并不是实时的。

    如果我们拿到这个数据库的句柄,就能实时的去查询好友的详细信息了,而且也不需要进行解密和获取数据库密码的操作了。

    获取微信数据库句柄的思路

    找微信数据库句柄的思路和找数据库密码的思路是一样的,微信在点击登录的时候,肯定是要打开本地的数据库,然后获得一个句柄,所以我们可以通过在CreateFileW下断点,接着单步跟踪,就能找到数据库的句柄

    定位微信的数据库句柄

    在这里插入图片描述

    在CreateFileW下断,当微信读取数据库文件时让程序断下。

    在这里插入图片描述

    接着来到CreateFileW的返回地址处,点击K查看调用堆栈
    在这里插入图片描述

    经过排查,这个地址的call最像我们需要的找的call,在这个call的地址下断,点击F9运行

    在这里插入图片描述

    程序断下,此时ecx指向数据库文件的路径
    在这里插入图片描述

    edx指向一个空的缓冲区,那么这个就非常像我们要找的call

    在这里插入图片描述

    单步步过这个call,发现缓冲区里写入了一个地址,那么就可以确定这个就是我们要找的call,只要我们HOOK这个地址,那么就能拿到所有的数据库文件的句柄了。而数据库的名称就在堆栈里,可以自己去找到偏移然后获取数据。

    至于代码,等我研究下怎么调用SQlite再告诉你们,最后附上用代码解密数据库的工程。

    9运行

    [外链图片转存中…(img-bkvnRcVG-1563613749040)]

    程序断下,此时ecx指向数据库文件的路径

    [外链图片转存中…(img-ZLt43xxD-1563613749045)]

    edx指向一个空的缓冲区,那么这个就非常像我们要找的call

    [外链图片转存中…(img-xzU5iL5H-1563613749048)]

    单步步过这个call,发现缓冲区里写入了一个地址,那么就可以确定这个就是我们要找的call,只要我们HOOK这个地址,那么就能拿到所有的数据库文件的句柄了。而数据库的名称就在堆栈里,可以自己去找到偏移然后获取数据。

    至于代码,等我研究下怎么调用SQlite再告诉你们,最后附上用代码解密数据库的工程。

    链接:YPSuperKey Unlockedhttps://pan.baidu.com/s/14fqLn8qUt2qr34UIb6Qd1Q
    提取码:t48w

    目前微信机器人的成品已经发布,需要代码请移步Github。还请亲们帮忙点个star
    https://github.com/TonyChen56/WeChatRobot

    展开全文
  • 数据库文件系统

    千次阅读 2018-06-26 16:57:42
    由于工作需要,我简单的了解了一下文件系统与数据库系统,现总结如下,希望对广大读者有所帮助。文件系统的简单介绍文件系统是操作系统的子系统,用于操作系统明确存储设备或分区上的文件的方法和数据结构。文件系统...
  • 如何使用数据库保存文件

    万次阅读 2018-04-09 11:05:07
    最近在做专业设计,好多同学讨论上传的文件应该以什么形式保存到数据库中 对于这个问题,有两种解决方案 一:将文件copy到项目下一个包中(这里设定的是在专业设计、SSH小项目中),数据库存储文件的路径 二:...
  • 数据库文件有哪些格式以及类型呢? 一般有.sql、.bak 文件格式 对应的数据库类型分别为 mysql的数据库文件是.sql后缀的,mssql是.bak后缀的。access是最基本的数据库可以是任何文件名,一般是mdb,我们的所有虚拟...
  • SQL Server的数据库文件保存在哪儿?

    万次阅读 2019-08-26 16:16:48
    1.数据库文件类型 数据库分2个文件 一个主数据文件,一个日志文件 主数据文件后缀名为:MDF 日志文件后缀名为:Log 如数据库Test: Test.mdf 与test.log 2.数据库文件保存位置 1.在SQL Server Management ...
  • 错误提示:自检时提示“Reporting Services目录数据库文件存在”失败,“Reporting Services目录临时数据库文件存在”失败。 症状如图: 解决方法: 1、打开 SQL Server 数据库的安装目录,例如:C:\...
  • 如何将sql文件导入mysql

    万次阅读 多人点赞 2018-07-03 13:48:00
    第三步:如果sql文件的内容中有创建数据库的语句或者你想将表存放在你已有的数据库,在这里就不用创建数据库。第四步:输入“show databases;”就能看到自己创建的数据库。第五步:输入“use 数据库名”,开始使用这...
  • 使用工具 navicat for mysql,查看、修改等操作均很...1、数据库A文件全部复制到另一个数据库B 将待复制数据库导出。文件格式为.sql 点选数据库A,右击 --&gt; 转储SQL文件 --&gt;结构和数据 导入数...
  • 文件地理数据库是以文件夹形式存储的各种类型的GIS数据集的集合,可以存储、查询和管理空间数据和非空间数据。在不使用DBMS的情况下能够扩展并存储大量数据。文件地理数据库可同时有多个用户使用,但一个数据只能有...
  • 如何将数据库文件附加进去

    万次阅读 2019-01-17 09:49:04
    如何将数据库文件附加进去 开发工具与关键技术:SQL Server 2014 Management Studio 作者: 作夜星辰 撰写时间:2019年 1月 16日 下面我们使用SQLServer2014ManagementStudio部分, 如何将别人数据库里面的数据拷贝...
  • 首先通过cmd的net start mysql57 启动mysql的服务器。然后最后上图画红圈的部分是.sql文件存放的位置。
  • 本文详细讲解了如何查找mysql数据库真实物理文件的存储位置,只要我们直接复制数据库文件,即可对数据库进行搬迁,也可以对数据库文件的存放位置进行改变。 工具/原料 mysql数据库 方法/步骤 第1...
  • 数据库系统与文件系统的区别

    万次阅读 2016-03-21 15:15:36
    很多人刚刚接触数据库时都有疑问:在很多程序中都会是有的直接读取一个静态文件,有的是读取数据库。直接读取静态文件,不访问数据库速度是会很快,但是为什么还要访问数据库呢?它们两则肯定是有区别的,那么区别是...
  • 只有mdf文件和ldf文件--怎么恢复数据库
  • 背景上一次附加数据库的时候出现了问题,结果是由于路径存放问题。这一次直接附加数据库的时候出现了如下图的问题:解决方法首先新建一个数据库,名字为Blogs在Blogs上右键单击---&gt;任务---&gt;还原---&...
  • mysql的数据库迁移到另一个机器上

    万次阅读 2018-05-28 11:38:31
    将你要迁移的数据库文件放到这里如下:然后打开my.ini:找到datadir,然后将你的Data文件路径复制到下面,你要启动哪一个Data文件就用那个文件的地址,只能存在一个。如下:然后在重启MySQL服务...
1 2 3 4 5 ... 20
收藏数 2,396,926
精华内容 958,770
关键字:

数据库文件