WinDebug查看C#程序运行内存中的数据库连接字符串
笔记哥 /
04-17 /
8点赞 /
0评论 /
506阅读
>
>
> 真巧,昨天刷到了大佬“一线码农”的视频,大概就是讲的有人找他破解一个混淆加密的数据库连接字符串,然后大佬也提供了方案就是用WinDebug查看内存中的数据。这其实本质上就是一个用WinDebug查看对象字符串字段具体内容的需求,为啥要取这个标题?当然是骗人点进来啦
>
目录
- 准备工作(环境)
- 编写demo代码
- 程序启动后转储为dump文件
- WinDebug分析DUMP文件
- 加载sos符号
- 寻找SqlConnection对象
- 查看实例细节
- 查看连接字符串
#### 准备工作(环境)
- .net 8
- visual studio 2022
- sql server (非必须)
#### 编写demo代码
```csharp
SqlConnection sqlConnection = new SqlConnection();
sqlConnection.ConnectionString = "server=127.0.0.1;database=****;uid=sa;pwd=123456;Pooling=true;TrustServerCertificate=True;";
try
{
sqlConnection.Open();
SqlCommand command = sqlConnection.CreateCommand();
command.Connection = sqlConnection;
command.CommandText = "SELECT * FROM FAB_OHT";
var reader = command.ExecuteReader();
while (reader.Read())
{
Console.WriteLine(reader["OHT_ID"].ToString());
}
}
finally
{
sqlConnection.Close();
}
Console.Read();
```
#### 程序启动后转储为dump文件

#### WinDebug分析DUMP文件
在WinDebug中导入Dump文件
##### 加载sos符号
```csharp
.load C:\Users\bruce.qiu\.dotnet\sos\sos.dll
```
##### 寻找SqlConnection对象
```csharp
!dumpheap -type Microsoft.Data.SqlClient.SqlConnection
```

可以看到Microsoft.Data.SqlClient.SqlConnection的类型方法表对应的地址为 **7ff995723580** ,然后看到上面的类型只有一个对应的方法表是这个,可以断定这个类型实例就是代码中的SqlConnection实例。
##### 查看实例细节
实例的地址为 **017ce380b030**
```csharp
!do 017ce380b030
```

找到对象实例的连接字符的对象地址。
##### 查看连接字符串
```csharp
!do 000001bd757e04c0
```

可以看到字符串的基本结构,除了方法表和对象头之外,包含了字符串长度,首字符。
可以看到字符串首字符的偏移为c,也就是0xC,大概就是该对象的第12位开始就是字符串的具体内容。
```csharp
.printf "%mu", 000001bd757e04c0+0xC
```

这个命令就是从字符串的地址开始,取内容的偏移,
后面的+0xC就是移动了相应的偏移,偏移则是图中的offset.
至于为什么正好取到字符串长度而不越界,是因为调试器会根据字符串对象存储的长度来安全的截取长度。
本文来自投稿,不代表本站立场,如若转载,请注明出处:http//www.knowhub.vip/share/2/2346
- 热门的技术博文分享
- 1 . ESP实现Web服务器
- 2 . 从零到一:打造高效的金仓社区 API 集成到 MCP 服务方案
- 3 . 使用C#构建一个同时问多个LLM并总结的小工具
- 4 . .NET 原生驾驭 AI 新基建实战系列Milvus ── 大规模 AI 应用的向量数据库首选
- 5 . 在Avalonia/C#中使用依赖注入过程记录
- 6 . [设计模式/Java] 设计模式之工厂方法模式
- 7 . 5. RabbitMQ 消息队列中 Exchanges(交换机) 的详细说明
- 8 . SQL 中的各种连接 JOIN 的区别总结!
- 9 . JavaScript 中防抖和节流的多种实现方式及应用场景
- 10 . SaltStack 远程命令执行中文乱码问题
- 11 . 推荐10个 DeepSeek 神级提示词,建议搜藏起来使用
- 12 . C#基础:枚举、数组、类型、函数等解析
- 13 . VMware平台的Ubuntu部署完全分布式Hadoop环境
- 14 . C# 多项目打包时如何将项目引用转为包依赖
- 15 . Chrome 135 版本开发者工具(DevTools)更新内容
- 16 . 从零创建npm依赖,只需执行一条命令
- 17 . 关于 Newtonsoft.Json 和 System.Text.Json 混用导致的的序列化不识别的问题
- 18 . 大模型微调实战之训练数据集准备的艺术与科学
- 19 . Windows快速安装MongoDB之Mongo实战
- 20 . 探索 C# 14 新功能:实用特性为编程带来便利
- 相关联分享