首页
社区
课程
招聘
[原创]钉钉V3版本 数据库key逆向
发表于: 2025-7-2 10:19 1939

[原创]钉钉V3版本 数据库key逆向

2025-7-2 10:19
1939

v2版本参考:https://bbs.kanxue.com/thread-255356.htm


逆向思路

  1. 先参考了一下V2的分析手法,Opendatabase那块是一样的。由此定位到设置key的地方。
  2. 直接从内存中把Key拿出来,测试一下是可用的,ok,找对地方了。
  3. 逆向分析key的来源,发现key其实就是一段MD5。找到求MD5的地方,找到输入参数。
  4. 再往上找,发现这个输入参数是由PKCS5_PBKDF2_HMAC_SHA1生成的。
  5. PKCS5_PBKDF2_HMAC_SHA1的输入参数是一个0x29字节的数组,前面9个字节是uid。 后面还有一段32位的数据。主要查看这段32位的数据哪里来的。
  6. 一步一步往上跟,发现来自一个全局变量的offset为0x2e8的地方,地址固定。
  7. 最后一步,监视该地址。看他什么时候设置的,最后发现是在userconfig里面的base64字符串解密之后的json字符串中的salt字段。


总结

v2版本:

  1. cpuid(0) 获取cpu信息并格式化为字符串global_key, global_key用于打开DingTalk\\globalStorage\\storage.db。
  2. 从storage.db中获取用户uid及相关user db目录,并对该uid求md5得到 key

V3版本:

  1. cpuid(0) 获取cpu信息并格式化为字符串global_key, global_key用于打开DingTalk\\globalStorage\\storage.db。
  2. 从storage.db中获取用户uid 及 相关user db目录。
  3. 读取DingTalk\\xxxxxxxx_v3\\user_config文件中的内容,Base64解密。

  4. 读取其中的salt值,并将uid+salt字符串PKCS5_PBKDF2_HMAC_SHA1再加密一次得到一个32位数组,对该数组求MD5,得到key



传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2025-7-3 20:43 被小周学习站编辑 ,原因:
收藏
免费 2
支持
分享
最新回复 (8)
雪    币: 259
活跃值: (416)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
大佬,想问一下,是salt作为盐值,还是uid直接拼接salt。还有迭代次数是多少次,我看源码PKCS5_PBKDF2_HMAC_SHA1(v7, v35, "666DingTalk888", 8LL) 是这样调用的
2025-7-19 20:49
0
雪    币: 14
活跃值: (1089)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
mb_weyfdhks 大佬,想问一下,是salt作为盐值,还是uid直接拼接salt。还有迭代次数是多少次,我看源码PKCS5_PBKDF2_HMAC_SHA1(v7, v35, "666DingTalk888& ...
uid和salt拼接得到一段数据 ,将这段数据用这个PKCS5_PBKDF2_HMAC_SHA1(v7, v35, "666DingTalk888", 8LL) 计算一下,再求MD5就可以得到db key了。
2025-7-22 16:52
0
雪    币: 259
活跃值: (416)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
但是我用python实现pkcs5_pbkdf2_hmac_sha1是需要指定迭代次数的,大佬你是怎么直接用PKCS5_PBKDF2_HMAC_SHA1(v7, v35, "666DingTalk888", 8LL) 计算的呢
2025-7-23 11:22
0
雪    币: 14
活跃值: (1089)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5

 PKCS5_PBKDF2_HMAC_SHA1(uid_salt.c_str(), uid_salt.size(), "666DingTalk888", 8, 1000, 32, out);

最后于 2025-7-23 18:23 被小周学习站编辑 ,原因:
2025-7-23 18:22
0
雪    币: 558
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
和qq好像
2025-8-7 11:59
0
雪    币: 463
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
uid为啥我是十位呢 v8.1又改了吗
2025-10-27 00:00
0
雪    币: 463
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
8

看楼下!!

最后于 2025-10-27 00:08 被yinsel编辑 ,原因:
2025-10-27 00:06
0
雪    币: 463
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
9

原来id就是10位,我以为9位呢,成功了,还是各位师傅分析能力强

最后于 2025-10-27 02:22 被yinsel编辑 ,原因:
2025-10-27 00:08
0
游客
登录 | 注册 方可回帖
返回