前言之前研究过一段时间wx聊天记录解密和小程序解密,但是晚上搜了几篇文章,发现解密教程要么下载VisualStudio,不然会危害web安全人员不友好od调试,而且根据系统的不同,解密方式也不同,所以作者用少量的编程知识写了这篇教程--这里记录一下原理解密和一些方法分享给大家。一、原理SQLite是一个轻量级、开源的关系型数据库,是目前移动平台(如iOS、Android)数据库的最佳选择。但SQLite免费版不支持加密(官网默认为免费版),这使得人们很容易查看到SQLite中存储的数据,不法分子可能利用数据库表结构和内容字段分析我们的应用,然后发起攻击。出于安全原因,我们当然需要对数据库文件进行加密。微信数据库的类型是sqlite,不管是ios、mac、win还是android,不同的是每个数据库都是加密的但是加密密钥不一样,这里win和mac主要是利用从远程服务器获取的一些信息加上一些本地的信息由AES使用一系列算法生成的密钥进行加密。AES密钥为32位,所有数据库文件共享一个密钥。我们需要找到AES密钥来解密,然后我们就可以对数据库文件进行操作了。但是安卓不同于ios。看了一些文章,发现手机端数据库生成的key是本地已有数据生成的key。它只有7位数字。我们可以通过暴力获取密钥。解密PC数据库一般是通过附加微信到od进行动态调试https://bbs.pediy.com/thread-251303.htm另一种方法是找到微信模块的地址加上偏移量得到密钥和一些用户信息,但是还有一个问题就是每次微信版本更新时,offset都会变化。我看到的解决方案是作者需要获取每个版本的偏移量,然后更新工具,也很麻烦。所以我根据别人的文章分析了一下。如果偏移量每次都会变化,但相关信息的数据结构的相对廉价度不会变化,那么这个方法可以在所有版本中使用。通俗地说,每次私钥wxid的字符串地址虽然会变,但是相对位置是不会变的。我肯定可以通过加减wxid的字符串找到私钥的地址。2.分析这里我通过平时的动作首先发现,key出现的上下地址还有一串公钥和私钥-----BEGINPUBLICKEY-----\n。..这不是一个很好的功能吗?所以我们首先使用python中的pymem模块来操作内存。至于为什么要用这个模块,因为对初学者比较友好,封装了很多功能,方便我调用,对于不了解win系统的朋友,按照这个思路,我们先找到-----BEGINPUBLICKEY-----字符串的地址,然后反向查找这个地址的地址。根据测试,这个地址一般比WeChatWin.dll大,但也不绝对。在某些情况下,无法找到此字符串地址。但是这里有一个问题。在学习pymem的过程中通过翻阅文档找到了一个全局搜索函数pattern_scan_all,但是实际下载pymem模块的时候并没有这个函数,只好自己重写了这个函数。.```defpattern_scan_all(handle,pattern,*,return_multiple=False):frompymem.patternimportscan_pattern_pagenext_region=0found=[]user_space_limit=0x7FFFFFFF0000ifsys.maxsize>2**32else0x7fff0000whilenext_region
