一:背景

1. 讲故事

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

二:如何鉴定

1. 思考

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

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

  • 判断内存中是否存在各自明文的 md5。

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

像 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 15
Address 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: 张三 就是我要的结果,明文存储 实锤。

文章到此是不是可以结束啦

茫茫内存,我该如何用 windbg 找到你 ?的更多相关文章

  1. 如何用Windbg找到被catch住的C++的异常

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:如何用Windbg找到被catch住的C++的异常.

  2. 如何用windbg分析内存泄露

    1.     必须在命令行中设置为要分析的进程打开用户堆栈信息:C:\Program Files\Debugging Tools for Windows (x64)>gflags.exe -i ...

  3. 如何用Windbg从dump获取计算机名、主机名

    对内存转储时发生的事情有一定的了解是非常重要的.这有助于您确定要执行哪些WinDbg命令,并为您提供一些有关如何解释这些命令输出的上下文.我正在查看一个服务器的内存转储,该服务器存在性能问题.我在内存 ...

  4. 【转】如何用WINDBG分析64位机上32位程序的DUMP文件

    将dump拖入到windbg中后,在command输入栏输入 .load wow64exts 回车 !sw 回车,就将windbg的dump,从64位模式切换到了32位模式,否则看到的call sta ...

  5. 如何用windbg查看_eprocess结构

    打开菜单: File->Symbol File Path... 输入: C:/MyCodesSymbols; SRV*C:/MyLocalSymbols*http://msdl.microsof ...

  6. 使用WinDBG调试查看C#内存转储文件

    有时候我们想查看一个正在运行的程序内存中的数据,可以在任务管理器将内存状态保存为转储文件,并使用WinDBG验证,这里我们来试试: 0.安装WinDBG 1.首先写个代码用来测试 一个class pu ...

  7. 利用windbg分析崩溃,句柄泄漏,死锁,CPU高,内存泄漏

    Windbg的一些简单使用命令 一.崩溃 1.  输入.ecxr;kbn得到崩溃的堆栈 其中源代码如下 2.  查看堆栈和源代码,发现第0帧导致崩溃,代码也是本地代码 输入.frame  0,切到第0 ...

  8. windbg分析一次大查询导致的内存暴涨

    项目上反馈了一个问题,就是在生产环境上,用户正常使用的过程中,出现了服务器内存突然暴涨,客户有点慌,想找下原因. 讲道理,内存如果是缓慢上涨一直不释放的话,应该是存在内存泄漏的,这种排查起来比较困难, ...

  9. 第二章排错的工具:调试器Windbg(下)

    感谢博主 http://book.51cto.com/art/200711/59874.htm 2.2  读懂机器的语言:汇编,CPU执行指令的最小单元2.2.1  需要用汇编来排错的常见情况 汇编是 ...

随机推荐

  1. vue render html string

    vue render html string shit element ui render string array relativeShowConvert(data) { // log(`data` ...

  2. Dart: puppeteer库

    和node的差不多,只有写API不一样 puppeteer 地址 安装依赖 dependencies: puppeteer: ^1.7.1 下载 chrome-win 到 <project_ro ...

  3. 主打开放式金融的Baccarat项目如何开疆拓土?

    DeFi在这个夏天迎来了大爆发,像无托管交易.流动性挖矿.保险协议.NFT代币都在今年看到了有别于以往的应用.随着比特币走入主流,DeFi热度下降,不少人都觉得DeFi热潮已死.但事实是,DeFi的总 ...

  4. CPU飙升的问题

    本文转载自CPU飙升的问题 问题发现 事情是这样的,最近小码仔负责的项目预定今天凌晨2点上进行版本更新.前几天测试小姐姐对网站进行压力测试,观察服务的CPU.内存.load.RT.QPS等各种指标. ...

  5. 最佳搭档:利用 SSH 及其配置文件节省你的生命

    本文转载自最佳搭档:利用 SSH 及其配置文件节省你的生命 导语 SSH 协议是事实上的互联网基石之一.在 SSH 协议出现之前(1995 年由 Tatu Ylonen 设计),通过互联网远程登录其他 ...

  6. 不可不知的 JVM 预热

    一.JVM 架构基础 JVM 进程启动时,ClassLoader 会将需要的所有类加载到内存,主要分为以下三步: Bootstrap Class: 核心类库,由 "Bootstrap Cla ...

  7. 死磕Spring之IoC篇 - 文章导读

    该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读 Spring 版本:5.1. ...

  8. Python爬虫系统化学习(3)

    一般来说当我们爬取网页的整个源代码后,是需要对网页进行解析的. 正常的解析方法有三种 ①:正则匹配解析 ②:BeatuifulSoup解析 ③:lxml解析 正则匹配解析: 在之前的学习中,我们学习过 ...

  9. 使用 xunit 编写测试代码

    使用 xunit 编写测试代码 Intro xunit 是 .NET 里使用非常广泛的一个测试框架,有很多测试项目都是在使用 xunit 作为测试框架,不仅仅有很多开源项目在使用,很多微软的项目也在使 ...

  10. 如何在netcore下,愉快的使用IServiceProvider

    之前一直做dotnet framework开发,依赖注入使用Autofac,Autofac的一般用法是服务启动时,将用到的接口.实现类名注入进去, 然后在服务其他地方如果使用该类时,直接在Contai ...