建设人才网站的目的,淄博做网站多少钱,宣武网站建设,广告发布策略包括一#xff1a;背景 1. 讲故事前天wx上有个朋友丢给我一个dump#xff0c;让我帮忙鉴定一下某些敏感信息在内存中是否也是加密的#xff0c;现在数据安全很重要#xff0c;不仅数据库中的信息要加密#xff0c;灌到内存后数据同样也需密文存储#xff0c;随用随解密#… 一背景 1. 讲故事前天wx上有个朋友丢给我一个dump让我帮忙鉴定一下某些敏感信息在内存中是否也是加密的现在数据安全很重要不仅数据库中的信息要加密灌到内存后数据同样也需密文存储随用随解密争取安全最大化????此为背景接下来就是我艹这咋让我鉴定呀????????????二如何鉴定 1. 思考我艹几秒后冷静下来想想还是有一定解决办法的我先把问题化简一下。判断内存中是否有字符串为 张三 or 李四 or 王五 的明文字符。判断内存中是否存在各自明文对应的密文。上面两点检索一下基本就能确定那些敏感信息是否加密了。像 C# 这种托管语言有一个好处就是所有的托管对象都是存放在 托管堆 上言外之意就是字符串也在 托管堆 上所以接下来的问题是如何在堆上检索 string张三 的字符串。问题来了很多时候 托管堆 上的 string 是海量的我见过最高有几千万个string茫茫何时才能找到我最靓的崽呀 ???????????? 理论时间结束接下来开始打怪。2. 案例演示为了能够继续聊下去我用一个简单的例子演示一下如何通过人肉搜索 string张三 先看代码。class Program{static Liststring strList new Liststring();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.GenericEqualityComparer1[[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 无限的挖掘可能, 真的是太强大了有兴趣的话可参考 MSDNhttps://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/javascript-debugger-scriptingEND工作中的你是否已遇到 ... 1. CPU爆高2. 内存暴涨3. 资源泄漏4. 崩溃死锁5. 程序呆滞等紧急事件全公司都指望着你能解决... 危难时刻才能展现你的技术价值作为专注于.NET高级调试的技术博主欢迎微信搜索: 一线码农聊技术免费协助你分析Dump文件希望我能将你的踩坑经验分享给更多的人。