转载来源:http://bbs.pediy.com/showthread.php?t=200818

标 题: 【原创】【原创】微信系列研究之--------管库房的小丫鬟
作 者: ggggwwww
时 间: 2015-05-22,08:06:42
链 接: http://bbs.pediy.com/showthread.php?t=200818

 0x01 前言 
 
感谢大家的支持,我也没想到大家的热情这么高,兄弟我只好舍弃娇妻,早上五点爬起来给大家写文章了,还是基友有真爱!!!!:p论坛的人气还得靠大家踊跃回贴和发贴。 
前面发的关于微信的协议和加密算法的文章,后来我看到抽抽兄弟在《微电脑世界》2015年第2期发表了相应的文章,大家也可以看看,这样结合起来理解更好。

 0x02 研究思路 
 
1.  从互联网找以前关于微信的数据库加密的文章 
2.  从LOG中找到数据库的操作记录 从LIB中找到libkkdb.so,根据名字进行推测。 SqliteConnection.java -> NativeSetkey(libkkdb.so)
3.  分析SQLITE文件结构 。
4.   分析SQLCIPHER的源码,编写相应的解密复原程序。

0x03 加密及数据安全

聊天记录保持在EnMicroMsg.db文件中  
 数据库加密机制
 
采用开源的SQLCIPHER   
加密子密钥生成 用户密钥+16位随机数 利用openssl kdf函数进行64000轮PBKDF分散 这样的好处是可以防止防止被字典攻击和已知明文攻击。
  
 加密算法

aes-256-cbc   
 主密钥 
 
hash(imei&uin).substring(0,7) 
这个研究来自一个老外在2013年对微信的一次安全分析 http://www.jinglingshu.org/?p=3035  
   
hmac密钥

16字节和0x3a异或 做和第一页的前十六字节的分散因子做 两轮分散   加密内容 第一页的前16字节为随机的16字节的SALT。

HAMC的密钥由加密密钥及两轮PBKDF算法分散生成。
加密文件结构

每页1024字节,加密的密文内容为960字节。
每页最后的32字节为20字节的HMAC值和12字节的初始向量及补位。
第一页前16字节随机salt内容。

密文解密举例:
sqlite3Codec: entered pgno=1, mode=3, page_sz=1024
cipher_ctx_key_derive: entered c_ctx->pass=xxxxxxx, c_ctx->pass_sz=7                 
ctx->kdf_salt=00A17CF8 ctx->kdf_salt_sz=16 c_ctx->kdf_iter=64000                 
ctx->hmac_kdf_salt=00A17D40, c_ctx->fast_kdf_iter=2 c_ctx->key_sz=32
cipher_ctx_key_derive: deriving key using full PBKDF2 with 64000 iterations
cipher_ctx_key_derive: deriving hmac key from encryption key using PBKDF2 with 2 iterations
sqlcipher_cipher_ctx_cmp: entered c1=00A17E00 c2=00A40E78
sqlcipher_cipher_ctx_copy: entered target=00A17E00, source=00A40E78
sqlite3Codec: switch mode=3 offset=16
codec_cipher:entered pgno=1, mode=0, size=960

codec_cipher: input page data(第一页的16字节以后内容)

00000: e7 ec 9e ee 54 81 c7 50 a4 bf 87 cb ac cc 2d 72 
00010: b3 77 e2 7c ec 08 39 dc bd 32 7b 9c 43 21 24 d2 
00020: f7 8a 7f d0 c2 17 67 0b c5 7a 06 fd b7 a4 d7 c0 
00030: 8e bf a9 a5 bb b1 fc ec 29 2d dc 2a d2 4f 87 29 
00040: d7 f0 62 c8 1c 14 94 aa 02 77 a5 2e 1c 84 db ee 
00050: f1 58 5e d0 01 5b aa 21 86 59 ca 4b 8b b7 32 f8 
00060: e9 4f 64 6b e1 ae ed 10 f8 87 7a cd 85 fc e6 b1 
00070: d6 62 8b 96 a5 8c 52 ad bf 74 8b 98 42 21 1d 01 
00080: fa 55 09 41 0f 8e 0d f9 20 0c 21 50 69 7a 2e 66 
00090: 9a c1 2e ca 86 0e 0f bc a4 b2 49 de fc ff 33 fe 
000a0: 2b 28 6f bb 3f 0f e6 1c ec c1 be aa c3 f9 af c7 
000b0: 20 d2 d7 cb 72 98 bb 4c 65 51 d9 16 1f 77 37 41 
000c0: 0e c7 97 28 82 ce 82 4b f1 5c 21 a7 f5 37 09 7a 
000d0: 35 cf e7 f2 f0 40 26 6c 1e 62 83 44 10 b0 d2 be 
000e0: e0 cd 0b 6d a7 eb 4e aa 60 c7 af a2 5f 16 43 65 
000f0: 93 bb 9d 8e b2 3d fa 24 d7 91 24 07 71 0a aa 00 
00100: bf f6 a7 77 91 1f 5d 56 c5 1e f6 52 ff ff 74 34 
00110: c3 b1 96 79 cd 33 b2 40 44 7a 9d 10 59 1d 23 13 
00120: 82 41 da 6f 6d 68 f4 76 a7 7d d7 ee e3 03 f3 d1 
00130: 88 37 d6 ea 2f f6 1b 14 e2 68 7a 38 2a 28 09 f9 
00140: 04 f0 bc 90 8f fa 17 59 d7 eb cd 82 a5 26 9a 0b 
00150: 1d 93 68 94 83 1a a4 68 43 c6 08 af 7e 9f 66 be 
00160: 79 8a 84 5f fb fe 43 2e 11 81 49 e4 48 76 30 c7 
00170: 10 4e 27 e4 cc c0 ac 16 2c 91 66 af 20 63 22 bf 
00180: ca 93 f8 1b eb 17 17 83 2f 47 21 f8 24 36 81 3d 
00190: e2 95 8e ea 87 a9 83 38 ec 2e a1 e2 56 24 2e 31 
001a0: 68 52 e3 f5 99 13 74 5a d7 e9 c7 8b 56 21 43 a7 
001b0: 91 a8 4d a6 2b 25 36 12 d5 c4 68 44 a1 dc 21 d1 
001c0: 12 1e b5 40 a7 68 64 86 73 26 e2 ba 16 38 c0 a5 
001d0: 19 86 ce e7 76 34 65 16 26 7c 3f ee 91 ba cb 4f 
001e0: e1 c1 c1 64 fc d2 c9 c5 3d cb 69 de bc 8b 10 8d 
001f0: a9 ea 52 08 d7 b0 35 ec ca 52 13 0c e1 38 1f 77 
00200: 17 af d6 e3 c1 eb 9d 9f c1 48 21 fb c5 4d c9 36 
00210: 91 dd 78 bb 7c 21 99 22 a9 0c e5 c4 75 c3 96 61 
00220: 3a b6 32 1d d0 b0 50 b4 2e 2c 13 47 66 1f 34 3d 
00230: 0d be f3 63 9f 51 79 38 d7 dd 3e e3 90 f8 ed cb 
00240: 37 43 ec 6c ca af 79 74 f2 06 6b 96 3f a0 7e 55 
00250: 9b b9 e3 6f 90 6e ec 99 5c c2 ca 58 a7 60 74 8b 
00260: 47 2b fd 4a 56 76 9c b6 64 e6 92 64 b8 54 d2 27 
00270: 39 58 f7 9b 8b 81 a2 96 7e ca 2a dc 77 93 c7 47 
00280: 5d c5 49 c7 a9 60 45 8e dd 1d 48 0a 47 fc ba 64 
00290: 16 52 b0 b7 7c 4c f1 95 89 32 c5 03 47 25 9d ff 
002a0: 81 c1 f3 2b aa 0b e7 5a 38 27 0f f2 32 cf 95 63 
002b0: ae df 89 5b bc 1f 68 58 57 ae 37 92 a7 64 0b 7f 
002c0: b1 46 b9 14 eb 31 d8 9a 20 b1 82 d3 d9 c6 88 24 
002d0: 65 08 1d d2 54 94 60 98 a0 26 dc 6c da 71 d4 a6 
002e0: bc 5e d5 57 a9 11 8f 9b 17 0e ac c7 77 a9 90 f4 
002f0: e7 bd 02 6e df 6e 0e 98 7b 62 74 dc 5c b9 06 93 
00300: 2d 93 8c b6 86 30 7e 12 ab a7 70 48 66 4d ff 2d 
00310: a9 7c 56 ad 85 49 14 09 77 44 79 43 66 cc 2c fb 
00320: 60 85 36 e1 7c de 58 e2 55 f4 7c e9 4b 4c 10 34 
00330: 0a 51 a5 6d 2a 9a 85 fb fe e8 dc d6 90 48 16 de 
00340: 0c 92 3c 68 18 ae 09 78 ec 42 6f 67 fc 09 53 62 
00350: 18 72 6e 4f aa 67 17 52 9a 23 a5 c6 7f f4 be 35 
00360: 7b be 4a 47 5e 38 a9 f2 b4 15 56 24 40 a1 2f f1 
00370: 1b dc e2 bd ec f0 68 32 70 f8 6b 10 bf a6 c0 1d 
00380: 00 92 fd f0 77 1a 5c f6 38 23 9b 86 61 10 33 e7 
00390: f1 92 c5 27 1d 09 8f 5d f4 f4 83 f1 95 43 7f 49 
003a0: 97 71 85 db 7a 13 9c 44 92 d0 a2 c6 b1 39 42 6d 
003b0: ac 8b 61 64 49 10 a8 82 6f 3b 55 2e bb 13 1b 08 
003c0: 00 46 f6 43 8d 84 10 67 e0 2a e4 c9 8f a2 89 2b 
003d0: 81 9d c7 5a f3 2e 64 e2 69 97 e7 cb 94 1b fe 82 
003e0: a3 4a ed c2 94 5c fe 39 1d 0c fc d8 fb 13 02 76 
codec_cipher: comparing hmac on in=00A193C8 out=00A40E20 hmac_sz=20

解密后的页数据明文
codec_cipher: output page data
00000: 04 00 01 01 30 40 20 20 c9 15 cb e4 00 00 01 57 
00010: 00 00 00 00 00 00 00 00 00 00 00 9c 00 00 00 04 
00020: 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 
00030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00040: 00 00 00 00 00 00 00 00 00 00 00 00 c9 15 cb e4 
00050: 00 2d e6 00 05 00 00 00 31 02 ce 00 00 00 01 03 
00060: 03 cb 03 c6 03 c1 03 bc 03 b7 03 b2 03 ad 03 a8 
00070: 03 a3 03 9e 03 99 03 94 03 8f 03 8a 03 85 03 80 
00080: 03 7b 03 76 03 71 03 6c 03 67 03 62 03 5d 03 58 
00090: 03 53 03 4e 03 49 03 44 03 3f 03 3a 03 35 03 30 
000a0: 03 2b 03 26 03 21 03 1c 03 16 03 10 03 0a 03 04 
000b0: 02 fe 02 f8 02 f2 02 ec 02 e6 02 e0 02 da 02 d4 
000c0: 02 ce 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
000d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
000e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
000f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00110: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00120: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00130: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00140: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00150: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00170: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00190: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
001a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
001b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
001c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
001d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
001e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
001f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00200: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00210: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00220: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00230: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00240: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00250: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00260: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00270: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00280: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00290: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
002a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
002b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
002c0: 00 fb 81 4c 00 00 00 f4 81 47 00 00 00 ec 81 42 
002d0: 00 00 00 e3 81 3b 00 00 00 d9 81 33 00 00 00 d0 
002e0: 81 2a 00 00 00 c8 81 22 00 00 00 bf 81 1b 00 00 
002f0: 00 b6 81 13 00 00 00 b3 81 0b 00 00 00 b1 81 09 
00300: 00 00 00 ac 81 07 00 00 00 a5 81 03 00 00 00 9e 
00310: 7d 00 00 00 99 77 00 00 00 94 73 00 00 00 8e 6f 
00320: 00 00 00 8a 6a 00 00 00 86 68 00 00 00 83 64 00 
00330: 00 00 7e 61 00 00 00 79 5d 00 00 00 75 5b 00 00 
00340: 00 72 58 00 00 00 70 56 00 00 00 6b 53 00 00 00 
00350: 66 50 00 00 00 5f 4c 00 00 00 5c 47 00 00 00 59 
00360: 44 00 00 00 56 42 00 00 00 52 40 00 00 00 4d 3d 
00370: 00 00 00 4a 39 00 00 00 46 37 00 00 00 41 35 00 
00380: 00 00 3c 31 00 00 00 37 2c 00 00 00 30 27 00 00 
00390: 00 2b 22 00 00 00 25 1f 00 00 00 20 1a 00 00 00 
003a0: 18 15 00 00 00 15 0f 00 00 00 10 0c 00 00 00 0d 
003b0: 07 00 00 00 0a 06 00 00 00 07 03 00 00 00 06 02 
003c0: 00 46 f6 43 8d 84 10 67 e0 2a e4 c9 8f a2 89 2b 
003d0: 81 9d c7 5a f3 2e 64 e2 69 97 e7 cb 94 1b fe 82 
003e0: a3 4a ed c2 00 00 00 00 00 00 00 00 00 00 00 00

数据安全删除

secure_delete PRAGMA [database.]secure_delete=ON/OFF 设为ON时,删除的内容会用0来覆盖。缺省值由宏SQLITE_SECURE_DELETE 决定。那就是OFF了。 微信在libkkdb.so编译时默认secure_delete=ON 。
5.3以后增加了该安全措施。

操作的原子性 
    
采用WAL机制   
WAL机制的原理是:修改并不直接写入到数据库文件中,而是写入到另外一个称为WAL的文件中;如果事务失败,WAL中的记录会被忽略,撤销修改;   如果事务成功,它将在随后的某个时间被写回到数据库文件中,提交修改。通过checkpoint,将WAL内容写入到数据库文件中
 
 0x04总结: 
 
1. 介绍了相应的SQLCIPHER的加密机制。
2. 微信的数据库主密钥容易受到攻击。不过前提是需要越过相应的权限后才能访问相应的数据库文件。
3. 是否考虑SQLLOG获取相应的数据库操作日志。
*转载请注明来自看雪论坛@PEdiy.com

微信系列研究之--------管库房的小丫鬟相关推荐

  1. 微信系列研究之-----资源文件保护的小把戏

    前言 微信对APK进行多维度的保护,包括我们以前提到的客户端到服务器验证签名,插件验证,文件变动检测,代码混淆,把核心功能放在SO中等. 其中比较有特色的是对资源文件的保护,防止被恶意分析和山寨. 目 ...

  2. 微信系列研究之-手把手教你脱掉微信的外衣

    转载来源:http://bbs.pediy.com/showthread.php?t=200230 标 题: [原创][原创]微信系列研究之-手把手教你脱掉微信的外衣 作 者: ggggwwww 时 ...

  3. 【高仿微信系列】03、微信录制小视频

    本文为个人原创,欢迎转载,但请务必在明显位置注明出处! GitHub地址:https://github.com/motianhuo/wechat 微信从6.0版本开始推出小视频功能,随着4G网络的出现 ...

  4. 【报告分享】全球产业趋势系列研究之人工智能.pdf(附下载链接)

    今天给大家分享华泰证券于2020年5月份发布的报告<全球产业趋势系列研究之人工智能.pdf>,报告核心观点如下: 从产业生态来看,我国人工智能产业侧重于技术层和应用层,尤其是终端 产品落地 ...

  5. Python爬虫系列之爬取某奢侈品小程序店铺商品数据

    Python爬虫系列之爬取某奢侈品小程序店铺商品数据 小程序爬虫接单.app爬虫接单.网页爬虫接单.接口定制.网站开发.小程序开发> 点击这里联系我们 < 微信请扫描下方二维码 代码仅供学 ...

  6. 投资时钟系列研究(一)

    引导语:本文参考了国信证券关于经济周期与股市研究的几篇研报,简单介绍了国信投资时钟,为经济周期系列研究第一篇.感兴趣的朋友可以直接前往BigQuant人工智能量化投资平台进行克隆复现. 一.背景介绍 ...

  7. 微信公众号如何结合答题活动小程序进行拓客引流?

    如果你是新媒体运营者,如果你也有自己的微信公众号,那么,相信你也会问过这么的一个问题:微信公众号引流的方法有哪些? 你会看见的回答是这样的: 是这样的: 还有这样的: 然而,大部分都是上面那些套路,是 ...

  8. 微信公众号可快速创建“门店小程序” 不用开发

    "门店小程序"是啥?"门店小程序"是小程序的一项新能力.无需开发,商户就可在微信公众号后台快速创建"门店小程序".这个小程序类似一张&quo ...

  9. 快手小店电脑版_微信PC版更新!支持在小程序中使用微信支付 | 一周资讯

    小程序1. 微信PC版更新,支持在小程序中使用微信支付.12月19日,微信PC端推出内测版2.7.2.73,新版本支持以下新功能:新增看一看精选内容,新的订阅号浏览体验,支持在小程序中使用微信支付.( ...

最新文章

  1. LeetCode实战:LRU缓存机制
  2. 当中台遇上DDD,我们该如何设计微服务?
  3. Android园区部队人脸识别源码门禁项目讲解
  4. Oracle-内存管理解读
  5. Leecode 1218. 最长定差子序列——Leecode每日一题系列
  6. elementUI之switch应用的坑
  7. java 做项目踩坑,web项目踩坑过程
  8. [刘阳Java]_CSS数字分页效果
  9. SpringMVC-day01
  10. python新手入门.pdf_所有Python入门书籍的整理,初学者必看,附赠所有电子版(一)...
  11. 普通最小二乘法讲解OLS线性回归
  12. 互联网券商线上开户系统设计与开发技术分享
  13. 手写:下划线转为驼峰命名法
  14. 《祝你一路顺风》-吴奇隆(吉他谱)
  15. python称号_Python成为2018年度编程语言,遥遥领先于其他语言
  16. Jungle Roads丛林道路(最小生成树PrimKruskal算法)
  17. Firefox全面兼容中国银联“在线支付”
  18. audioread.NoBackendError
  19. 三个堪称神器,却很少人使用的手机软件
  20. YouDianCMS建站系统|什么是五站合一?

热门文章

  1. 新天龙八部自动喊话重写版
  2. 显示本地图片以及网络图片
  3. 陕西信息工业技师学院计算机老师,陕西信息工业技师学院 全国技能大赛再传喜讯...
  4. redis梦魇:阻塞问题(鼠标打开图片更清晰)
  5. 查看自己的mac是macOS x64还是macOS ARM64
  6. 量子隐形传态过程的推导(Quantum teleportation)
  7. java流程图什么代表活动_举例分析流程图和活动图的区别与联系
  8. (一)学习英特尔处理器一般架构原则
  9. 【计算机毕业设计】255疫情信息管理系统
  10. 印象笔记无法连接服务器解决办法无法同步