茫茫内存,我该如何用 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,一经查实,立即删除!

相关文章

初中数学知识点总结_初中数学知识点总结大全_经典版_

初中数学必考知识点总结一、基本知识㈠、数与代数A、数与式&#xff1a;1、有理数有理数&#xff1a;①整数→正整数/0/负整数②分数→正分数/负分数数轴&#xff1a;①画一条水平直线&#xff0c;在直线上取一点表示0(原点)&#xff0c;选取某一长度作为单位长度&#xff0c;规…

官方的正则表达式组件 RegularExpressions (4) : 表达式选项

TRegExOption (roNone, //无roIgnoreCase, //不区分大小写roMultiLine, //多行模式; 可使 ^ 和 $ 匹配每个行首或行尾roExplicitCapture, //只捕获指定了名称或编号的子表达式roCompiled, //预编译表达式; 这在反复使用更有效率roSing…

一篇文章,带你了解 “机器学习工程师” 必备技能图谱

5月8日&#xff0c;谷歌召开一年一度的Google I/O大会。在现场演示的演示中&#xff0c;Google Assistant表现得自然流畅&#xff0c;电话那头的理发店员工丝毫没有察觉到自己竟然是在和AI对话&#xff01;阿里的王坚博士曾在一次主题演讲里谈到&#xff1a;「不要担心 AI 毁灭…

俄语使用计算机怎么说,计算机俄语常用词汇

计算机俄语常用词汇аксессуары 附件микрофон 话筒наушники 耳机MIDI клавиатура MIDI键盘MP3 плеер MP3播放器очки 眼镜иктофон 录音机ержатель копий 拷贝存放夹Принтеры 打印机матричный…

一日一技:在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…

Insus Binary Utility

一个将数据流转换为binary(二进制)数据小工具&#xff0c;返回字符串。可以在三层架构中的二层程序处理数据流。 使用时需要引用名称空间using Insus.NET; 类别名称InsusBinaryUtility&#xff0c;需要实例化。 下载地址&#xff1a;http://download.cnblogs.com/insus/library…

圆周率里有每个人的银行卡密码和生日?混知乎的程序员果然都是神一般的存在...

有人好奇&#xff0c;既然圆周率是无限不循环小数&#xff0c;会不会包括这个世界上的任何信息&#xff0c;包含了这个世界&#xff1f;能否包含“任何信息”不好说&#xff0c;但一个冷知识是&#xff0c;圆周率里有每个人的银行卡密码&#xff01;不信&#xff1f;看看这位来…

如何提高Debug效率

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

中断原理在计算机中的应用,最新 计算机原理与应用 复习3-判断题

最新 计算机原理与应用 复习题目1.INTR、INTA和NMI信号都是与中断有关的信号。( ) √2.8088在访问存储器时&#xff0c;必须用HOLD和HLDA两条信号线指示出总线是否可用。( )3.在8088时序中&#xff0c;在时钟周期T4状态期间&#xff0c;S2S1S0的任何变化指示一个总线周期的开始…

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

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

open*** 结合pam_mysql认证 failed to authenticate: Permission denied

open***的认证有很多方式&#xff0c;比如证书认证&#xff0c;用户名密码认证&#xff0c;而用户名密码认证也可用通过两种方式实现&#xff0c;一是使用pam_mysql实现open***利用mysql认证&#xff0c;二是使用radius实现open***利用mysql认证&#xff0c;网上这种配置都很多…

用文本挖掘剖析近5万首《全唐诗》,发现了这些有趣的秘密

楔子近些年来&#xff0c;弘扬中华传统文化的现象级综艺节目不断涌现&#xff0c;如《中国汉字听写大会》、《中国成语大会》、《中国谜语大会》、《中国诗词大会》等&#xff0c;其背后的社会成因&#xff0c;在于人们对中国文化中最精致文字的膜拜心理&#xff0c;虽然浸淫于…

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

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

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

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

web页面在线编辑功能

首先在web.config文件中添加 <system.web> <httpHandlers> <add verb"GET" path"FtbWebResource.axd" type"FreeTextBoxControls.AssemblyResourceHandler,FreeTextBox"/> </httpHandlers></system.web> 注…

html哪个是最大标题,在下面的HTML中,哪个是最大的标题( )

参考答案如下下中单选(2分) 新民主主义革命的三大法宝是( )单选(2分) 关于计算机为什么基于二进制数来实现&#xff0c;标题下列说法不正确的是单选(3分) “某些人天生具有一些特质&#xff0c;下中这些特质会使他们成为伟大的领导者。”这是以下哪种理论的观点?标题单选(3分)…

C#通过工厂模式,我把一大堆if干掉了

概述之前做微信项目的时候&#xff0c;会涉及到一个回调&#xff0c;大家都知道回调事件是很多类型的&#xff0c;一般是根据不同的类型在进行不同的逻辑处理。这样就会延伸出一个问题&#xff0c;就是入口处会有一大堆if判断。这样本身是没什么问题的&#xff0c;只是看起来比…

再过四十年,你的女朋友可能是个美丽的机器人!不信你看

“美国西部、科幻、人工智能 、 机器人革命”&#xff0c;这 4 个看似不相关的元素却组成了一部新神剧《西部世界&#xff1a;Westworld》。《西部世界》可是聚粉丝千万&#xff0c;由1973年迈克尔克里奇顿执导的同名电影改编而成的电视剧。在剧中&#xff0c;整个“西部世界”…

mac下nvm_Mac OS 使用 nvm 管理 node 与 npm 版本

nvm 是 Mac 下的 node 管理工具&#xff0c;有点类似管理 Ruby 的 rvm&#xff0c;如果是需要管理 Windows 下的 node&#xff0c;官方推荐是使用 nvmw 或 nvm-windows 。以下具体说下 Mac 系统中的安装与使用细节(Windows 系统仅供类比参考)。1. 卸载已安装到全局的 node/npm如…