转载自公众号:取证者联盟

目录

1. 前言

2. 准备工作

3. 内存镜像解析

4. 踩过的坑和感悟

5. 技术要点总结

前言

某年月日,我司在项目中遇到了一个不太常见的需求:根据内存镜像解析电脑中的某即时通讯软件(即“某信”)的聊天信息。在与供应商进行沟通以后我们了解到,市面上国内外几款比较流行的取证软件虽然支持针对某信Windows端的解析,但是大多还是需要用户扫描二维码进行登录。对内存的解析只有一家产品支持,实际试用后也遗憾地失败了。事后分析可能是与操作系统及某信软件的版本有关。

然后我们又在网上进行了一系列的搜索。虽然确实查到许多资料描述如何解析某信数据库,但是其中对内存镜像进行解析的内容几乎为零。我们只能摸着前人的石头过河。所幸走了不少弯路以后还算有了一个比较满意的结果,这才有了这篇小文。

****对于Volatility内存分析工具有一定认识的朋友可以直接查看结尾的技术总结。***

准备工作

登录某信后,使用FTK Imager制作笔记本电脑的内存镜像。

  1. 登录某信
图片

  1. 使用FTK Imager制作内存镜像
图片

图片

在这里有几个选项,是否需要保存pagefile(“Include pagefile”)以及是否需要制作AD1格式的镜像(“Create AD1 file”)。经过测试在解析密钥时并不需要这两个功能,所以为了节约时间我们这里就不用勾选了,毕竟pagefile的文件大小还是很惊人的。

图片

图片

这一步大概花费5到10分钟,根据内存的大小不同。

3. 拿到内存镜像后不要就觉得万事大吉了。密钥密钥光有钥匙没有门我们不是一顿白忙活?

请记得制作笔记本电脑镜像并从中导出某信数据库文件。具体步骤这里就略过了。某信数据库的默认地址为“C:\Users[Windows User Name]\Documents\WeChat Files[WeChat account]”。

图片

内存镜像解析-Volatility

铺垫了这么久终于可以上主菜了。这里解析内存镜像我们还是用Volatility。

Volatility是一款开源内存取证框架,能够对导出的内存镜像进行分析,通过获取内核数据结构,使用插件获取内存的详细情况以及系统的运行状态。

软件官网:https://www.volatilityfoundation.org

Github主页:https://github.com/volatilityfoundation/volatility

  1. 分析内存镜像并判断适用的配置文件(profile)

命令:volatility.exe –f memdump.mem imageinfo

图片

Volatility需要从用户配置文件中读取内核的相关信息,通过这些信息来定位内存中的关键信息并对其进行解析。因此我们需要获取用户配置文件,且这些配置文件需与你要分析的内核版本相匹配,其中包含了内核数据结构以及调试符号。

这里个人将用户配置文件理解成一张地图,而内存镜像就是对应的实际地形。由于不同的系统版本对应不同的地图,只有使用相匹配的地图Volatility才能带我们找到想要的东西。

这一步会花费几个小时起步的漫长时间。所以个人建议先对笔记本硬盘镜像进行分析,然后根据操作系统的信息判断适用的配置文件会比较快。

2. 寻找某信进程的pid

命令:volatility.exe –f memdump.mem --profile=****Win7SP1x64** pslist >pslist.txt

*粗体下划的****Win7SP1x64****为配置文件名称,使用时请根据上一步结果/具体情况进行修改。

图片

图片

这里我们使用命令pslist将内存镜像中所有进程列表导出到文档文件pslist.txt中,然后查找WeChat.exe即可得到该进程pid为1072。需要注意的是在实际分析过程中这一步可能得到两个或者更多的pid。我们可以通过后面的分析或者根据是否存在Exit时间排除已经退出的进程。

  1. 寻找WeChatWin.dll的基址

命令:volatility.exe –f memdump.mem --profile= Win7SP1x64 ldrmodules –p 1072 >dlllist.txt

图片

图片

使用插件ldrmodules将pid为1072的进程所有关联的dll文件导出并查找WeChatWin.dll的基址。此处为0x53210000。

这里我们也可以使用Volatility自带的命令dlllist来查询关联的dll文件。但是插件ldrmodules可以关联部分隐藏的dll,功能更为强大。实际项目过程中我们发现部分电脑ldrmodules可以找到,而部分电脑ldrmodules无法找到而dlllist可以找到。所以个人建议两个命令都试下。

  1. 查询某信数据库密钥

命令:

volatility.exe –f memdump.mem --profile= Win7SP1x64 volshelll

cc(name=”WeChat.exe”)

dd(****base address of** WeChatWin.dll + **fixed offset****, length=4)

#返回结果为数据库密钥地址

db(****address of decryption key****, length=32)

#返回结果为数据库密钥

图片

Volshell插件用来进入Volatility的shell,在该shell中可以使用cc命令来切换当前进程,使用dd和db命令分别打印dwords和具体bytes内容到屏幕上。

这里我们使用volshell插件进入shell以后使用cc命令切换到WeChat.exe进程。由于数据库密钥地址为32位的dwords,所以这里我们使用dd命令将该地址打印到屏幕上。需要注意的是这里我们使用“0x17734a8”来获取密钥地址,该常数根据某信版本不同可能有所变化。在这里测试所使用的版本为某信2.9.5.41。该常数的获取需要一定的逆向工程知识,网上也有很多现成的资料,在这里就不赘述了。

(参考:《PC某信逆向:两种姿势教你解密数据库文件》,链接地址:https://blog.csdn.net/qq_38474570/article/details/96606530)

最后在获得密钥地址为“0x07bc0a70”后,我们使用db命令将32位的密钥打印到屏幕上。

5. 使用获得的密钥即可解密数据库并查看具体内容。

图片

某信Windows端使用sqlcipher进行加密,配置环境后可以使用SQLite进行解密。

那么关于某信数据库的解析到这里也就圆满结束了,剩下的工作就是将数据导出成Excel等易于查看的格式。

踩过的坑和感悟

首先是第一个大坑,不知道是不是我搜索的姿势有误,但是感觉内存取证方面的资料明显没有计算机取证/移动端取证那样丰富,仅有的资料也有些晦涩难懂。不知是否因为内存取证门槛相对较高?市场上能找到的也就Volatility一家,官网最近的更新时间还是2016年。虽然Github上能看到他们家在推新版本(Volatility3,Github主页:https://github.com/volatilityfoundation/volatility3),但是插件的开发好像还没有跟上。我们一度由于陈旧的版本缺少支持最新Windows系统的profile而无法进行。然后在实际项目中也遇到了由于不同系统版本和某信版本导致的众多小问题。例如在查询某信进程pid时碰到多个进程,需要仔细分辨那些是之前已经结束的进程而那个才是当前运行的。在查询WeChatWin.dll时也有ldrmodules插件无法查询到而Volatility自带的命令dlllist反而可以找到的情况。在最后查询数据库密钥时也碰到因为某信版本不同而需要回头对硬盘镜像中的某信程序进行逆向分析来判断所使用的常数。只有掌握全面的技能才能兵来将挡水来土掩。

絮絮叨叨说了这么多,其实最后真正有用的可能也就7行命令和1个常数。但是为了得到这些,我们却花了将近一周的时间。好在最后结果还是相对圆满的,达到的客户的期望。之前对内存取证的认识一直停留在做题的阶段。打比赛也好能力验证也罢,对这方面的内容似乎都只是浅尝辄止。在平时工作中就更少碰到这方面的需求了。通过这次小小的研究也让我对内存取证和某信解析有了更加深入的认识。之前也一直听说某信Windows端的数据库密钥只有在登陆时才能从服务器端或者从内存中获取,但是没有碰到过实践的机会。直到这次项目的实际需求对我们提出挑战。可见很多知识平时一直只停留在知其然的地方是远远不够的。只有平时多做积累,掌握各种工具,在实际遇到挑战时才能有足够的能力解决问题。

技术要点总结

  1. 分析内存镜像并判断适用的配置文件(profile)

volatility.exe –f memdump.mem imageinfo

2. 寻找某信进程的pid

volatility.exe –f memdump.mem --profile=Win7SP1x64 pslist >pslist.txt

  1. 寻找WeChatWin.dll的基址

volatility.exe –f memdump.mem --profile= Win7SP1x64 ldrmodules –p pid of WeChat.exe >dlllist.txt

  1. 查询某信数据库密钥

volatility.exe –f memdump.mem --profile= Win7SP1x64 volshell

cc(name=”WeChat.exe”)

dd(base address of WeChatWin.dll + fixed offset, length=4)

#返回结果为数据库密钥地址

#常数fixed offset根据某信版本不同可能有所变化。在这里测试所使用的版本为某信2.9.5.41,该常数为“0x17734a8”。

db(address of decryption key, length=32)

#返回结果为数据库密钥

原文地址:https://mp.weixin.qq.com/s/KQ58rPQC2id-9nO81b-EzA


http://www.taodudu.cc/news/show-1490439.html

相关文章:

  • 记一次反制追踪溯本求源
  • 技巧|BurpSuite实现监听代理流量,隐匿身份
  • 深度解读SSH免密登录
  • Python解析access数据库(mdb文件或者accdb文件)
  • 根据excel批量归类文件
  • 2013年蓝桥杯题集C本科B
  • 最高的奖励 贪心
  • 蓝桥杯2013年省赛C/C++大学组 C/C++
  • 非常可乐 BFS
  • 牛客寒假算法基础训练营3
  • 蓝桥杯2014年省赛C/C++ 本科B组
  • DeBruijin DFS
  • 牛客寒假算法基础训练营5
  • Being a good boy in the spring festival NIM博弈
  • Problem F. Grab The Tree博弈
  • 牛客寒假算法基础训练营6
  • 还是畅通工程 最小生成树
  • 食物链 并查集
  • 蓝桥杯2015 C语言大学B组 C/C++
  • STL常用函数总结-vector
  • STL常用函数总结-stack
  • STL常用函数总结-queue+priority_queue
  • STL常用函数总结-map
  • STL常用函数总结-set
  • 畅通工程再续 最小生成树
  • Minimum Inversion Number 线段树
  • 2015年C语言组混搭 C/C++
  • 蓝桥杯 2016年C语言组大学B组 C/C++
  • Aizu ITP2_6_A 二分
  • Hihocoder 1142 三分

Volatility内存分析工具-某即时通讯软件Windows端数据库密钥的分析相关推荐

  1. Volatility内存分析工具 - 某即时通讯软件Windows端数据库密钥的分析

    #本文仅供交流学习使用,切勿用于非法用途# 目录 1. 前言 2. 准备工作 3. 内存镜像解析 4. 踩过的坑和感悟 5. 技术要点总结 前言 某年月日,我司在项目中遇到了一个不太常见的需求:根据内 ...

  2. 如何选择企业即时通讯软件

    如何选择适合的企业即时通讯软件     目前来说,越来越多的大中型企业意识到上班时间使用个人通讯工具(IM)存在的危害(如:交流对象及交流内容的不可控.必须开通外网存在安全隐患等),并且已经开始寻求一 ...

  3. 目前我们再用的即时通讯软件

    1996年,三个以色列青年程序员维斯格.瓦迪和高德芬格聚在一起,决定开发一种使人与人在互联网上能够快速直接交流的软件.于是研发了第一代即时通讯系统并且取名为ICQ(I seek you,我在找你),最 ...

  4. 为什么企业选择局域网即时通讯软件?局域网即时通讯软件哪家好?

    在当今互联网普及的时代,企业内部的沟通对企业管理有着非常重要的意义,即时通讯软件已成为企业工作中广泛采用的沟通工具. 然而,随着企业内部敏感信息通过互联网泄露的频繁发生,例如在工作期间,企业员工自发地 ...

  5. 即时通讯软件:改变企业沟通方式

    十年前,当你想问同事一个问题时,你需要冲进他们的办公室或小隔间.今天,现代技术促进了业务交流,员工不再需要离开办公桌,而是选择通过各种技术工具进行交流,包括即时消息.开发即时通讯软件并非易事,需要开发 ...

  6. 企业即时通讯软件FreeEIM飞鸽传书

    企业即时通讯软件FreeEIM飞鸽传书,是一款基于TCP/IP协议.基于局域网广播消息模式的通讯软件,适合企业或政府部门局域网内部使用. 飞鸽传书用户可在企业内部或外部通过该软件进行工作上的交流,软件 ...

  7. 企业即时通讯软件,如何让沟通协作更加安全高效?

    后疫情时代,移动办公.居家办公.远程办公.多应用切换使用等混合办公模式变得越来越普遍,但多种多样.随时随地的办公模式对于企业来说,如何在安全可控的前提之下,保障组织内部各环节信息的通畅性和有序性.便捷 ...

  8. 手机视频开发即时通讯软件

    据<第30次中国互联网络发展状况统计报告>显示,即时通信在中国网民中的使用率达82.8%,用户人数4.45亿.手机上网的进一步普及,尤其是智能终端的推广,以及手机聊天工具的创新,使得即时通 ...

  9. linux 及时通讯软件,Linux平台即时通讯软件MSC 2.0版发布

    近日,米鼠网发布即时通讯软件MSC 2.0版本.这是一款针对全球IT用户量身定做的即时通讯软件,用户涉及IT企业.开源用户.程序员以及行业用户.其最大特点是可在Windows.Linux.Unix等多 ...

最新文章

  1. LLVM与Clang局部架构与语法分析
  2. Rocksdb 的优秀代码(二)-- 工业级 打点系统 实现分享
  3. Windows下使用Visual Studio Code搭建Go语言环境
  4. 35.JVM 参数(JVM中的各种参数及含义、收集器相关、PrintGC等各种辅助参数)
  5. PowerDesigner15对SQLSERVER2008S数据库进行反向工程出错
  6. 20145302张薇《Java程序设计》第十周学习总结
  7. Mac终端:pip command not found
  8. 是谁成全了我们在吃鸡、狼人杀里的实时互动?
  9. PHP字符串转数字面试,浅谈php字符串反转 面试中经常遇到的问题
  10. java长按底栏_java - 如何在导航抽屉物品中添加长按功能? - SO中文参考 - www.soinside.com...
  11. 数据库基础知识和SQL语言
  12. 数据库成绩管理系统课程设计mysql_数据库学生成绩管理系统课程设计报告
  13. 中安网培***入门教程
  14. 程序员教你如何用python制作一个牛逼的脚本
  15. BoundsChecker教程
  16. 阿铭Linux_传统IDC 部署网站学习笔记20190118
  17. 外卖小程序邀请入口获取推广路径
  18. opencv+ArcFace人脸识别
  19. element中el-select实现拼音搜索(el-autocomplete等下拉框搜索都可添加)
  20. eNom域名转出图文教程:域名解锁、获取域名转移密码

热门文章

  1. cf(聚簇因子)调优,计划调优,SQL改造
  2. Updatepanel 注册javascript 方法
  3. HTML5 canvas 模拟事件
  4. 30秒清除你电脑中的垃圾
  5. 微信网页开发 thinkphp5.0的try-catch和重定向
  6. 查看及修改当前数据库的所支持的数据库引擎以及默认数据库引擎
  7. 洛谷 P2286 [HNOI2004]宠物收养场
  8. 84直方图最大矩形覆盖 · Largest Rectangle in Histogram
  9. AOSP 安卓源码-ubuntu开发环境搭建
  10. Oracle ------ SQLDeveloper中SQL语句格式化快捷键