茫茫内存,我该如何用 windbg 找到你 ?

一:背景

1. 讲故事

前天wx上有个朋友丢给我一个dump,让我帮忙鉴定一下某些敏感信息在内存中是否也是加密的,现在数据安全很重要,不仅数据库中的信息要加密,灌到内存后数据同样也需密文存储,随用随解密,争取安全最大化????,此为背景,接下来就是我艹,这咋让我鉴定呀?????????????

二:如何鉴定

1. 思考

我艹几秒后,冷静下来想想还是有一定解决办法的,我先把问题化简一下。

  • 判断内存中是否有字符串为 张三 or 李四 or 王五 的明文字符。

  • 判断内存中是否存在各自明文对应的密文。

上面两点检索一下,基本就能确定那些敏感信息是否加密了。

像 C# 这种托管语言有一个好处,就是所有的托管对象都是存放在 托管堆 上,言外之意就是字符串也在 托管堆 上,所以接下来的问题是如何在堆上检索 string=张三 的字符串。

问题来了,很多时候 托管堆 上的 string 是海量的,我见过最高有几千万个,string茫茫,何时才能找到我最靓的崽呀 ???????????? ,理论时间结束,接下来开始打怪。

2. 案例演示

为了能够继续聊下去,我用一个简单的例子演示一下如何通过人肉搜索 string=张三, 先看代码。

class Program{static List<string> strList = new List<string>();static void Main(string[] args){strList.Add("fake");strList.Add("张三");Console.ReadLine();}}

接下来祭出 windbg。

  • !dumpheap -type System.String -min 8 -max 15 找到所有 10-15byte 范围的字符串。


0:000> !dumpheap  -type System.String -min 8 -max 15Address       MT     Size
026f1228 652224e4       14     
026f164c 652224e4       16     
026f230c 65222d74       12     
...Statistics:MT    Count    TotalSize Class Name
65225468        1           12 System.Collections.Generic.GenericEqualityComparer`1[[System.String, mscorlib]]
65222d74       10          156 System.String[]
652224e4       65         1168 System.String
Total 76 objects

从输出中可以看出,当前size范围内有 1168 个 string,还发现这个 size 不是特别准,先不管了,string 虽然有点多,但还是可以人肉的,用 !do xxx 逐个查看。


0:000> !do 026f2354
Name:        System.String
MethodTable: 652224e4
EEClass:     65327690
Size:        18(0x12) bytes
File:        C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll
String:      张三
Fields:MT    Field   Offset                 Type VT     Attr    Value Name
652242a8  4000283        4         System.Int32  1 instance        2 m_stringLength
65222c9c  4000284        8          System.Char  1 instance     5f20 m_firstChar
652224e4  4000288       70        System.String  0   shared   static Empty>> Domain:Value  00a22530:NotInit  <<

看到没有,上面的 String: 张三 就是我要的结果,明文存储 实锤。

文章到此是不是可以结束啦 ????????????, 那就太没有实战经验了,刚才说了,很多时候筛选后的 string 也可能高达几万几十万,再用人肉那是不可能的。。。

那有没有代替人肉的脚本呢?????????????, 嘿嘿,还真有。。。

三:使用自动化脚本

现在的 windbg preview 支持 javacript 作为脚本扩展,接下来我准备把刚才的 人肉步骤 写入脚本,貌似专业名字叫 playbook,蹩脚脚本如下:


"use strict";function RunCommands() {var ctl = host.namespace.Debugger.Utility.Control;var str_address_list = ctl.ExecuteCommand("!dumpheap  -type System.String -min 8 -max 15 -short");for (var str_address of str_address_list) {var str_dump = ctl.ExecuteCommand("!do -nofields " + str_address);var str = str_dump.Last();var isContains = str.indexOf("张三") > 0;if(isContains) host.diagnostics.debugLog(str+"  "+str_address +"\n");}
}

脚本的逻辑还是非常简单的,就是模拟刚才的人肉,最后在输出内容中判断是否有 张三 的字符串,如果有,连同 address 地址一起打印出来,脚本保存好之后,用 dx 命令来执行 RunCommands() 函数。


0:000> dx Debugger.State.Scripts.RunCommands.Contents.RunCommands()
String:      张三  026f2354
Debugger.State.Scripts.RunCommands.Contents.RunCommands()

看到没有, 明文 张三 显示出来了,不信的话,我截一张图,证明我没有骗你 ????????????。

四:总结

在这个案例中最后使用了 js 脚本轻松搞定,可以看出,脚本给了 windbg 无限的挖掘可能, 真的是太强大了,有兴趣的话可参考 MSDN:https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/javascript-debugger-scripting

END

工作中的你,是否已遇到 ... 

1. CPU爆高

2. 内存暴涨

3. 资源泄漏

4. 崩溃死锁

5. 程序呆滞

等紧急事件,全公司都指望着你能解决...  危难时刻才能展现你的技术价值,作为专注于.NET高级调试的技术博主,欢迎微信搜索: 一线码农聊技术,免费协助你分析Dump文件,希望我能将你的踩坑经验分享给更多的人。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一日一技:在Ocelot网关中实现IdentityServer4密码模式(password)

概述IdentityServer4 是为ASP.NET Core 2.系列量身打造的一款基于 OpenID Connect 和 OAuth 2.0 认证框架。将identityserver部署在你的应用中&#xff0c;具备如下的特点可以为你的应用&#xff08;如网站、本地应用、移动端、服务&#xff09;做集中式的登录逻辑和工作流控制…

uibot在子程序执行js失败_使用 Node.js 将珍藏的 bash 脚本封装成命令行工具

阐述如何将一个常用的 bash 脚本融入 npm 生态之中&#xff0c;此处以最近遇到的一个 CR 提交脚本为例。背景作为程序猿&#xff0c;大家或多或少地都用过 GitHub 上的 merge request 功能。当然&#xff0c;除了这类 Code Review 方式&#xff0c;不少公司都有自己的 Code Rev…

如何提高Debug效率

大家好&#xff0c;我是Z哥。可以不夸张地说&#xff0c;程序员可能有一半的时间都在修bug。虽说&#xff0c;根据28原则大部分bug都可以在搜索引擎上搜到&#xff08;业务性bug除外&#xff09;&#xff0c;但是往往剩下的那20%bug会花费我们80%的时间。虽然解决这个问题最好的…

baidumap vue 判断范围_懂一点前端—Vue快速入门

01. 什么是 VueVue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式框架&#xff0c;是当下很火的一个 JavaScript MVVM 库&#xff0c;是以 数据驱动和组件化 的思想构建的。MVVM 模式简述下图不仅概括了 MVVM 模式 (Model-View-ViewModel)&#xff0c…

如何在 C#9 中使用顶级程序 (top-level)

当我们用 C# 进行编码的时候&#xff0c;总需要写很多的模板代码&#xff0c;即使是最简单的 console 程序,想象一下&#xff0c;如果去测试一个 类库 或者 API 的功能&#xff0c;通常你会用 Console 程序去实现&#xff0c;在开始工作的时候会发现你受到了 C# 标准模板的限制…

跨部门不配合工作_跨部门协作,队友总是“甩锅”,这三个方法教你快速避坑!...

在日常的工作中&#xff0c;你觉得跨部门沟通的时间占用了多少时间&#xff1f;前阵子我经常会看到有人抱怨&#xff0c;说跨部门沟通的工作实在太难了&#xff0c;同事总是推脱扯皮&#xff0c;领导交代下来的事情&#xff0c;要么说不是自己的职责&#xff0c;要么说以前没做…

模型存储在哪里_最强的模型工作收纳站「Artty Station」登场!

大部分做模型的人&#xff0c;都有同一个梦想——那就是「属于自己的模型空间」。但很少有人&#xff0c;有足够的空间去收纳自己的模型工具。而现在&#xff0c;一款号称史上最强的模型收纳站「Artty Station」横空出世了&#xff0c;现在正在日本网站Makuake上进行众筹&#…

.NET6 中的 PriorityQueue

.NET6 中的 PriorityQueueIntro.NET 6 中引入了一个新的集合类型 PriorityQueue&#xff0c;正如它的名字那样&#xff0c;在普通的 Queue 基础之上增加了优先级的支持&#xff0c;接下来就一起来看一下怎么使用&#xff0c;以及一些常用的使用场景介绍。Get Started来看一个简…

简单而不简陋﹣wp7视觉点滴

一直就很期待&#xff0c;引入了Metro设计理念的wp7的真实操作体验&#xff0c;现在终于如愿了。拿到测试机&#xff0c;首先迅速的过了一遍&#xff0c;第一印象就是界面简单明了&#xff0c;没有华丽的高光、没有跌宕的质感&#xff0c;真的感觉就像在公共场所看到的信息指示…

ros发布节点信息python_vscode开发ROS1(13)-python实现话题通信(msg)

写在最前面1, ros也是可以使用python进行编程的, 而且相比c来说, ros更加简单.使用python创建第一个ROS程序1, 在ros_test目录下, 新建一个scripts文件夹.2, 修改CMakeLists.txt文件, 在find_package中添加rospyfind_package(catkin REQUIRED COMPONENTS roscpp ... #其他的包 …

BeetleX 之 WebApi网关1.5.8发布

这一版本的主要升级了BeetleX的基础网络库&#xff0c;主要解决在某些情况导致解释http协议cpu暴增长的问题&#xff0c;同时使用BeetleX新版本针对的IndexOf的优化&#xff0c;使http协议解释上有着一定程度的性能提升。新版本同样也是支持win64和linux64两个版本&#xff0c;…

egg前面加什么_国威说阀:阀门前面为什么加国标美标日标之类的?

原标题&#xff1a;国威说阀&#xff1a;阀门前面为什么加国标美标日标之类的&#xff1f;美标阀门就是美国标准的意思&#xff0c;通常称呼的美标球阀&#xff0c;美标闸阀和其它什么阀门都是按照美国标准制造出来的阀门其中一类。标准的编制说明是一个非常重要的文件。它阐明…

读《有效需求分析》

最近在一个技术群里看到张逸大佬强力推荐一本关于需求分析的书《有效需求分析》&#xff0c;于是在 Kindle 上下单了&#xff0c;读完后有一种相见恨晚的感觉。本书特点从书中的一些案例可以看出&#xff0c;作者擅长 ToB 软件的需求分析&#xff0c;如果您是从事的 ToB 软件的…

超时锁定计算机,就会发现多了一个控制台锁定显示关闭超时选项

小技巧&#xff1a;锁定屏幕方法多在临时要离开电脑时&#xff0c;可用CtrlAltDel组合键、WinL组合键或在开始菜单中单击用户头像选择“锁定”手动锁屏;或借用“屏幕保护设置”设定自动定时锁屏。1. 探寻自动锁屏时间修改离开电脑一段时间后Windows 10会自动锁屏&#xff0c;但…

android数据存放map_ES6 的新鲜玩意儿——集合set、map、WeekSet、WeekMap

es6新增了Set、Map、WeekSet、WeekMap 四种数据结构。C#中有HashSet和Dictionary&#xff0c;HashSet和Dictionary都是范式集合&#xff0c;但是es6不支持接口开发&#xff0c;所以也就不存在范式。Set 是存唯一值的集合&#xff0c;Map是存键值对的集合。WeakSet、WeakMap分别…

大牛领导单独找我聊了两句:搞框架的同时别忘了算法

前言程序数据结构算法&#xff0c;好的算法能让程序更高效的运行&#xff1b;在当今数据信息时代&#xff0c;数据分析和数据处理肯定是避免不了&#xff0c;而算法便成为了很多公司门槛级的要求&#xff0c;特别是大厂&#xff1b;赶紧搞起来&#xff0c;说不定离进大厂就只差…

C#使用iTextSharp操作PDF文件

概述html文件怎么转成PDF文件&#xff1f;有的招聘网上的简历导成DOC文件&#xff0c;不能直接使用&#xff0c;这样造成很大的困扰&#xff0c;那么它还有一个格式&#xff0c;那就是html格式。将文件导出成html格式&#xff0c;然后再转成PDF文件&#xff0c;这样便可以直接使…

springboot 历史版本文档_Springboot看视频学太慢?来看看这份阿里深入实践Springboot文档...

前言&#xff1a;之前 Spring Boot 2.2没能按时发布&#xff0c;是由于 Spring Framework 5.2 的发布受阻而推迟。这次随着 Spring Framework 5.2.0 成功发布之后&#xff0c;Spring Boot 2.2 也紧跟其后&#xff0c;发布了第一个版本&#xff1a;2.2.0。关于Spring Boot的性能…

51CTO技术沙龙4月23日第四期:如何快速定位******

人 在江湖飘&#xff0c;哪能不挨刀&#xff1f;没有跟***打过交道的运维人员能有多少&#xff1f;恐怕工作时间长的朋友大多都遇到过。我们除了做好防御之外&#xff0c;也可以尝试着像“盗梦空间”那 样了解******的动向。也可以从追踪***到挖掘***隐藏技术。当然&#xff0c…

计算机软件损坏基本维修,学习修电脑基础没有用?客户电脑开机不显示,维修差点被坑!...

原标题&#xff1a;学习修电脑基础没有用&#xff1f;客户电脑开机不显示&#xff0c;维修差点被坑&#xff01;电脑故障分为硬件故障与软件故障&#xff0c;硬件故障指的是硬件损坏&#xff0c;软件故障指的是系统损坏&#xff0c;硬件故障还可以分为真坏与假坏&#xff0c;真…