WinDebug查看C#程序运行内存中的数据库连接字符串

真巧,昨天刷到了大佬"一线码农"的视频,大概就是讲的有人找他破解一个混淆加密的数据库连接字符串,然后大佬也提供了方案就是用WinDebug查看内存中的数据。这其实本质上就是一个用WinDebug查看对象字符串字段具体内容的需求,为啥要取这个标题?当然是骗人点进来啦

目录

准备工作(环境)

  • .net 8
  • visual studio 2022
  • sql server (非必须)

编写demo代码

复制代码
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符号
复制代码
.load C:\Users\bruce.qiu\.dotnet\sos\sos.dll
寻找SqlConnection对象
复制代码
!dumpheap -type Microsoft.Data.SqlClient.SqlConnection

可以看到Microsoft.Data.SqlClient.SqlConnection的类型方法表对应的地址为 7ff995723580 ,然后看到上面的类型只有一个对应的方法表是这个,可以断定这个类型实例就是代码中的SqlConnection实例。

查看实例细节

实例的地址为 017ce380b030

复制代码
!do 017ce380b030

找到对象实例的连接字符的对象地址。

查看连接字符串
复制代码
!do 000001bd757e04c0

可以看到字符串的基本结构,除了方法表和对象头之外,包含了字符串长度,首字符。

可以看到字符串首字符的偏移为c,也就是0xC,大概就是该对象的第12位开始就是字符串的具体内容。

复制代码
.printf "%mu", 000001bd757e04c0+0xC

这个命令就是从字符串的地址开始,取内容的偏移,

后面的+0xC就是移动了相应的偏移,偏移则是图中的offset.

至于为什么正好取到字符串长度而不越界,是因为调试器会根据字符串对象存储的长度来安全的截取长度。

相关推荐
JaydenAI1 天前
[MAF的Agent管道详解-04]如何让LLM按照要求的结构输出数据?
ai·c#·agent·maf·agent pipeline
不会编程的懒洋洋1 天前
VisionPro 中 几何相交工具 Geometry-Intersection
图像处理·笔记·c#·视觉检测·机器视觉·visionpro
不会编程的懒洋洋1 天前
VisionPro 中 图像预处理工具
图像处理·笔记·c#·视觉检测·visionpro
雪豹阿伟1 天前
9.C# —— string拓展方法、StringBuilder高性能处理
c#·上位机
李星星_Alex1 天前
如何通过 C# 抓取抖音 RTMP 推流码实现自主推流
c#·抖音
qq7422349841 天前
全面深入的C#核心知识体系与编程实践精要——从语法基础到高级特性系统学习指南
java·算法·c#
fai厅的秃头姐!1 天前
2586. 统计范围内的元音字符串数
开发语言·c#
正运动技术1 天前
C#运动控制开源(二): CAD导图和小线段速度前瞻优化
c#·正运动技术·运动控制器·运动控制卡·正运动控制器·运动控制开源·ethercat运动控制器
楼田莉子1 天前
C#学习:分支与循环
服务器·后端·学习·c#
还是叫明1 天前
C#使用YOLO26进行图像识别(目标检测)
opencv·yolo·目标检测·c#