KakaoTalk数据库和加密文件密钥生成方法

KakaoTalk数据库密钥

KakaoTalk的数据库为sqlite3数据库,经过加密处理,不同类别的数据库采用不同的密钥加密。聊天记录的数据库由一个称为PRAGMA KEY的密钥进行加密,这里简称为PK。

PK的生成

PK的格式如下:

ODSnnkkwyAHsXwgCEIQLCpAxdSZhGsKegV0Y8EsSd74dV5szZ37+CsqNKGkxIlZfg8p5VXIPd/LTjoRj2kFx4A==410545402

由2部分组成,即一个Hash的Base64编码值 + 登录成功后服务器返回的唯一标识,这里简称这个唯一标识为UID。

基本算法如下

PK_Hash = SHA512(AES-128-CBC(UUID + Disk Model Name + Disk SerialNumber))
PK =  Base64Encode(PK_HASH) + UID

首先获取主机系统的UUID,通过命令行获取方式如下:

wmic csproduct get "UUID"

也可通过编码方式获取

然后获取主机系统所在磁盘名Model、磁盘序列号SerialNumber,通过命令行获取方式如下:

wmic diskdrive get Model, SerialNumber

将以上获取的元素信息拼成字符串

4D5882F5-E72C-41E0-9ADA-E2DAD13438C6|Samsung SSD 870 EVO 1TB SCSI Disk Device|S6PVNX0A101380D

因为后面要进行AES-128-CBC加密,所以需要Padding,按16字节对齐后

4D5882F5-E72C-41E0-9ADA-E2DAD13438C6|Samsung SSD 870 EVO 1TB SCSI Disk Device|S6PVNX0W101380D\x03\x03\x03

或如

D1EA91EE-8E1C-D4C3-D204-0C9D9280E10B|Samsung SSD 860 EVO 250GB|S4CKNF0NB09400F\x02\x02

AES-128-CBC key的生成

SHA1(BIN(1DC1B6C365BA5451DA4F730F237CF6635E272D273636363636363636363636363636363636363636363636363636363636363636363636363636363636363636)) = 9FBAE3118FDE5DEAEB8279D08F1D4C79

其中
BIN(1DC1B6C365BA5451DA4F730F237CF6635E272D273636363636363636363636363636363636363636363636363636363636363636363636363636363636363636)是KakaoTalk内置固定值,所以最终的SHA1值9FBAE3118FDE5DEAEB8279D08F1D4C79也是固定值。
最终AES-128-CBC密钥组成如下:

key: 9FBAE3118FDE5DEAEB8279D08F1D4C79
iv:  00000000000000000000000000000000

使用AES-128-CBC加密拼接后的字符串

AES-128-CBC("4D5882F5-E72C-41E0-9ADA-E2DAD13438C6|Samsung SSD 870 EVO 1TB SCSI Disk Device|S6PVNX0W101380D\x03\x03\x03") = E68133E9 ... D397E363752

使用SHA512计算加密后的HASH值

SHA512(BIN("E68133E9 ... 7E363752")) = 3834a79e ... da4171e0

使用Base64进行编码

Base64Encode(BIN(3834a79e ... da4171e0)) = ODSnnkkwyAHsXwgCEIQLCpAxdSZhGsKegV0Y8EsSd74dV5szZ37+CsqNKGkxIlZfg8p5VXIPd/LTjoRj2kFx4A==

最后就是获取用户唯一标识UID,该UID在登录成功后由KakaoTalk服务器返回,所以可以通过抓包的方式提取;通过分析,发现KakaoTalk的进程虚拟内存中也存在UID,主要为残留在的内存中的HTTP数据库格式中,可以通过WinHex搜索KakaoTalk进程内存获取UID。
内存中UID
来自服务器的用户UID: 410545402
最后得到PK值

ODSnnkkwyAHsXwgCEIQLCpAxdSZhGsKegV0Y8EsSd74dV5szZ37+CsqNKGkxIlZfg8p5VXIPd/LTjoRj2kFx4A==410545402

数据库密钥的生成

KakaoTalk\users\5fea7626aa67c9a1771a5187f2d76a0f72cea0ba\chat_data\chatLogs_***.edb
KakaoTalk\users\5fea7626aa67c9a1771a5187f2d76a0f72cea0ba\chat_data\chatListInfo.edb
KakaoTalk\users\5fea7626aa67c9a1771a5187f2d76a0f72cea0ba\chat_data\openLinkListInfo.edb
KakaoTalk\users\5fea7626aa67c9a1771a5187f2d76a0f72cea0ba\chat_data\talkfile.edb
KakaoTalk\users\5fea7626aa67c9a1771a5187f2d76a0f72cea0ba\chat_data\talkmedia.edb
KakaoTalk\users\5fea7626aa67c9a1771a5187f2d76a0f72cea0ba\TalkUserDB.edb
KakaoTalk\users\5fea7626aa67c9a1771a5187f2d76a0f72cea0ba\floatingList.edb
KakaoTalk\users\5fea7626aa67c9a1771a5187f2d76a0f72cea0ba\CalendarDB.edb
以上数据库密钥生成方法:
用PK循环拼接,凑够512字节,大于512字节截取512字节,然后计算512字节的MD5值最为key值,

key = MD5(PK * 512)
iv = MD5(Base64Encode(BIN(key)))

KakaoTalk\users\5fea7626aa67c9a1771a5187f2d76a0f72cea0ba\talk_user_prf.edb
以上数据库密钥生成方法:

pk_b64 = Base64Encode(BIN(MD5(PK)))
key = MD5(pk_b64 * 512)
iv = MD5(Base64Encode(BIN(key)))

KakaoTalk\users\5fea7626aa67c9a1771a5187f2d76a0f72cea0ba\Contacts*.edb
KakaoTalk\users\5fea7626aa67c9a1771a5187f2d76a0f72cea0ba\chat_data\url_image_v2.edb
KakaoTalk\users\5fea7626aa67c9a1771a5187f2d76a0f72cea0ba\chat_data\ocii_v2.edb
KakaoTalk\users\5fea7626aa67c9a1771a5187f2d76a0f72cea0ba\chat_data\oci_v2.edb
KakaoTalk\users\5fea7626aa67c9a1771a5187f2d76a0f72cea0ba\chat_data\mci_v2.edb
KakaoTalk\users\5fea7626aa67c9a1771a5187f2d76a0f72cea0ba\chat_data\gfve_t_v2.edb
KakaoTalk\users\5fea7626aa67c9a1771a5187f2d76a0f72cea0ba\chat_data\gfbe_t_v2.edb
KakaoTalk\users\5fea7626aa67c9a1771a5187f2d76a0f72cea0ba\chat_data\fci_v2.edb
KakaoTalk\users\5fea7626aa67c9a1771a5187f2d76a0f72cea0ba\chat_data\cli_http_v2.edb
KakaoTalk\users\5fea7626aa67c9a1771a5187f2d76a0f72cea0ba\OCH*.edb
KakaoTalk\users\5fea7626aa67c9a1771a5187f2d76a0f72cea0ba\DigitalItem*.edb
以上数据库密钥生成方法:

pk_sha512 = SHA512(PK)
key = MD5(pk_sha512 * 512)
iv = MD5(Base64Encode(BIN(key)))

KakaoTalk\CardList*.edb
KakaoTalk\OpenLinkPreset*.edb
以上数据库密钥生成方法:

pk_hash_sha512 = SHA512(PK_HASH) 
key = MD5(pk_hash_sha512  * 512)
iv = MD5(Base64Encode(BIN(key)))

这里计算的是PK_HASH的SHA512不是PK

KakaoTalk\users\5fea7626aa67c9a1771a5187f2d76a0f72cea0ba\MultiProfileDB.edb
以上数据库密钥生成方法:

key = MD5((multiprofile + PK) * 512)
iv = MD5(Base64Encode(BIN(key)))

KakaoTalk\users\5fea7626aa67c9a1771a5187f2d76a0f72cea0ba\emoticon.edb
以上数据库密钥生成方法:

pk_b64 = Base64Encode(BIN(MD5(emoticon + PK_HASH + emoticon))) 
key = MD5(pk_b64 * 512)
iv = MD5(Base64Encode(BIN(key)))

聊天缓存文件密钥生成方法(该密钥可以解密缓存文件)(解密算法AES-128-CBC)

key = MD5(PK) 
iv = MD5(Base64Encode(key))

资源文件(.xml)key、iv计算:

key = MD5("KAKAOTALK_PC_FOREVER")
iv = MD5(Base64Encode(key))

这里的KAKAOTALK_PC_FOREVER为KakaoTalk内置固定字符串。

connect_conf文件内容解密:
密钥生成方法:

key = MD5(PK_HASH + 20150201)
iv = MD5(Base64Encode(key))

mss.dat文件内容解密:
密钥生成方法:

key = MD5("PK_HASH20220725") 
iv = MD5(Base64Encode(key))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2822015.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【数学建模获奖经验】2023第八届数维杯数学建模:华中科技大学本科组创新奖获奖分享

2024年第九届数维杯大学生数学建模挑战赛将于:2024年5月10日08:00-5月13日09:00举行,近期同学们都开始陆续进入了备赛阶段,今天我们就一起来看看上一届优秀的创新奖选手都有什么获奖感言吧~希望能帮到更多热爱数学建模的同学。据说点赞的大佬…

20240301-2-ZooKeeper面试题(二)

11. Chroot 特性 3.2.0 版本后,添加了 Chroot 特性,该特性允许每个客户端为自己设置一个命名空间。如果一个客户端设置了 Chroot,那么该客户端对服务器的任何操作,都将会被限制在其自己的命名空间下。 通过设置 Chroot&#xff…

羊大师分享,羊奶奶有哪些对健康有益的喝法?

羊大师分享,羊奶奶有哪些对健康有益的喝法? 羊奶奶有多种对健康有益的喝法,以下是一些建议: 直接饮用:将羊奶直接煮沸后饮用,可以保留羊奶中的营养成分,为身体提供全面的滋养。羊奶的丰富蛋白质…

Spring11、整合Mybatis

11、整合Mybatis 步骤&#xff1a; 导入相关jar包 junit <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version> </dependency> mybatis <dependency><groupId>org.my…

【MySQL】redo log和undo log

引入 在介绍redo log和undo log之前&#xff0c;我们需要了解 MySQL 中的两个概念&#xff1a;缓冲池和数据页。 缓冲池(buffer pool)&#xff1a;主内存中的一个区域&#xff0c;里面可以缓存磁盘上经常操作的真实数据&#xff0c;在执行 CRUD 操作时&#xff0c;先操作缓冲…

Java 封装阿里云 oss 上传图片时抽取配置到 application 使用 @Value 获取值

Java 封装阿里云 oss 上传图片时抽取配置到 application 使用 Value 获取值 application .yml 配置 alioss: # 阿里云配置endpoint: "https://oss-cn-beijing.aliyuncs.com" # Endpoint以华东1&#xff08;杭州&#xff09;为例&#xff0c;其它Region请按实际…

任务系统之API子任务

日常运维工作中有许多的任务要执行&#xff0c;例如项目发布/数据备份/定时巡检/证书更新/漏洞修复等等&#xff0c;大部分的任务都会有多个步骤共同完成&#xff0c;例如一个发布任务会有拉代码、编译、分发、通知等等步骤&#xff0c;而不同的任务可能还包含相同或相似的步骤…

应用稳定性优化1:ANR问题全面解析

闪退、崩溃、无响应、重启等是应用稳定性常见的问题现象&#xff0c;稳定性故障大体可归类为ANR/冻屏、Crash/Tombstone、资源泄露三大类。本文通过对三类故障的产生原因、故障现象、触发机制及如何定位等&#xff0c;展开深度解读。 本文将详解ANR类故障&#xff0c;并通过一…

如何在群晖Docker运行本地聊天机器人并结合内网穿透发布到公网访问

文章目录 1. 拉取相关的Docker镜像2. 运行Ollama 镜像3. 运行Chatbot Ollama镜像4. 本地访问5. 群晖安装Cpolar6. 配置公网地址7. 公网访问8. 固定公网地址 随着ChatGPT 和open Sora 的热度剧增,大语言模型时代,开启了AI新篇章,大语言模型的应用非常广泛&#xff0c;包括聊天机…

【MicroPython教程】SSD1306 oled

文章目录 前言一、OLED的介绍二、下载ssd1306驱动三、ssd1306驱动的使用3.1 oled屏连线3.2 初始化oled3.3 画图函数填充整个屏幕显示画点滚动写字画圆形画弧画无填充的矩形画填充矩形画线画xbm图像 四、示例代码——正弦函数总结 前言 SSD1306 OLED 是一种常见的小型显示屏&am…

​MPV,汽车产品里一个特殊品类的进化过程

「汽车」可能是整个工业革命以来&#xff0c;所诞生出的最有趣的工业产品。 它不仅能产生工业的机械美&#xff0c;还诞生了一个独立的文化体系&#xff0c;在汽车的发展过程中&#xff0c;我们也能看到一些本来应功能而诞生的产品&#xff0c;最终走向了千家万户。 MPV 就是…

【王道数据结构】【chapter8排序】【P371t6】

试设计一个算法&#xff0c;判断一个数据序列是否构成一个小根堆&#xff08;下面代码中的堆排序的部分仅仅是为了方便设计测试用例&#xff09; #include <iostream> #include<time.h> #include<stdlib.h>int * buildarray(int size) {int* tmp(int *) mall…

Java毕业设计-基于springboot开发的家政服务管理平台系统-毕业论文+答辩PPT(有源代码)

文章目录 前言一、毕设成果演示&#xff08;源代码在文末&#xff09;二、毕设摘要展示1.开发说明2.需求分析3、系统功能结构 三、系统实现展示1、前台模块设计2、后台功能模块2.1管理员功能模块2.2用户功能模块2.3服务人员功能模块 四、毕设内容和源代码获取总结 Java毕业设计…

P2040 打开所有的灯

题目传送门&#xff1a;P2040 打开所有的灯 用深度优先搜索实现的一个填色题。 题目步骤&#xff1a; 1..dfs 首先dfs要判断是否符合题意&#xff0c;如果符合题意就更新最短路&#xff1b; 如果不符合题意就枚举 如果是关的就把周围四个包括 给标记上和原来相反的&#xf…

文件怎么减小内存?4个简单的方法~

随着我们在电脑或移动设备上创建、下载和收集越来越多的文件&#xff0c;存储空间的管理变得尤为重要。有时&#xff0c;文件太大会占用过多的内存&#xff0c;导致存储空间不足的问题。但别担心&#xff0c;本文将向您介绍五种简单有效的方法&#xff0c;帮助您轻松减小文件的…

SpringBoot启动扩展应用:干预优化+加快启动时间(干货典藏版)

一、SpringBoot启动过程干预 Spring Boot启动过程中我们可以实现以下干预工作&#xff1a; 修改Spring Boot默认的配置属性。使用ConfigurationProperties和EnableConfigurationProperties注解&#xff0c;可以获取和修改Spring Boot的配置属性。 加载配置文件。Spring Boot会…

深度伪造,让网络钓鱼更加难以辨别

网络钓鱼一直是安全领域的一个突出话题&#xff0c;尽管这类诈骗形式已经存在了几十年&#xff0c;依旧是欺诈攻击或渗透组织的最有效方法之一。诈骗分子基于社会工程原理&#xff0c;通过邮件、网站以及电话、短信和社交媒体&#xff0c;利用人性&#xff08;如冲动、不满、好…

JavaWeb之 Web概述

目录 前言1.1 Web和 JavaWeb的概念1.2 JavaWeb技术栈1.2.1 B/S架构1.2.2 静态资源1.2.3 动态资源1.2.4 数据库1.2.5 HTTP协议1.2.6 Web服务器 1.3 JavaWeb 学习内容 前言 博主将用 CSDN 记录 Java 后端开发学习之路上的经验&#xff0c;并将自己整理的编程经验和知识分享出来&a…

2024年腾讯云服务器优惠活动,3月份价格曝光可领代金券

腾讯云优惠活动2024新春采购节活动上线&#xff0c;云服务器价格已经出来了&#xff0c;云服务器61元一年起&#xff0c;配置和价格基本上和上个月没什么变化&#xff0c;但是新增了8888元代金券和会员续费优惠&#xff0c;腾讯云百科txybk.com整理腾讯云最新优惠活动云服务器配…

[VNCTF2024]-PWN:preinit解析(逆向花指令,绕过strcmp,函数修改,机器码)

查看保护&#xff1a; 查看ida&#xff1a; 这边其实看反汇编没啥大作用&#xff0c;需要自己动调。 但是前面的绕过strcmp还是要看一下的。 解题&#xff1a; 这里是用linux自带的产生随机数的文件urandom来产生一个随机密码&#xff0c;然后让我们输入密码&#xff0c;用st…