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.
至于为什么正好取到字符串长度而不越界,是因为调试器会根据字符串对象存储的长度来安全的截取长度。
WinDebug查看C#程序运行内存中的数据库连接字符串的更多相关文章
- 在ASP.NET项目中的web.config文件里配置数据库连接并在程序代码中获取连接字符串
1.在<connectionStrings> 标签里添加连接 <connectionStrings> <add name="ConnectionName&q ...
- Enterprise Library 中加密数据库连接字符串
看了SHY520写的关于Data Access Application Block的文章,写得不错,忽略了一点就是如何去加密数据库连接字符串,这儿我简单的介绍一下.我们知道,在Enterprise L ...
- 从App.config中读取数据库连接字符串
1.首先在App.config文件中添加如下代码注意<connectionStrings>插入位置. <connectionStrings> <add name=&quo ...
- 关于IBatisNet的配置文件中数据库连接字符串加密处理
我们通常在IBatisNet配置文件 properties.config 加入数据库连接字符串.数据库连接字符串直接放在里面,没有被加密,很不安全.如果我们把 properties.config 文件 ...
- 【转】ASP.NET数据库连接字符串总结
来源:http://blog.csdn.net/lutinghuan/article/details/5973897 ASP.NET数据库连接字符串总结 一.使用OleDbConnection对象连接 ...
- [转]ASP.NET数据库连接字符串总结
这个不难,而且很重要,但总忘,找了篇比较全的,作为资料. 原文链接http://developer.51cto.com/art/201107/275406.htm 关于数据库链接字符串的相关知识,我们 ...
- web config数据库连接字符串加密
ASP.NET web.config中,数据库连接字符串的加密与解密 ASP.NET web.config中,数据库连接字符串的加密与解密. 开始--->运行,输入cmd,接着输入以下内容 加密 ...
- ASP.NET数据库连接字符串总结
一.使用OleDbConnection对象连接OLE DB数据源 1.连接Access 数据库 Access 2000: “provider=Microsoft.Jet.Oledb.3.5;Data ...
- winform中读取App.config中数据连接字符串
1.首先要在工程引用中导入System.Configuration.dll文件的引用. 2.通过System.Configuration.ConfigurationManager.Connection ...
- ASP.NET数据库连接字符串的加密与解密
ASP.NET web.config中,数据库连接字符串的加密与解密. 虽然不怎么新鲜,但相信还是有许多人不知道,好,不说废话,直接给方法:开始--->运行,输入cmd,接着输入以下内容 加密: ...
随机推荐
- 开放研究实验:配置和保护SSH
- 一种面向混合云平台基于LSTM预测模型的资源池配额方法。
本文分享自天翼云开发者社区<一种面向混合云平台基于LSTM预测模型的资源池配额方法.>,作者:l****n 基于用户的历史配额申请情况和实际资源使用情况组成数据集搭建LSTM时序预测模型. ...
- Keepalived基本原理
本文分享自天翼云开发者社区<Keepalived基本原理>,作者:Ujnrfc Keepalived简介 Keepalived是Linux下一个轻量级别的高可用解决方案.高可用:广义来讲, ...
- RocketMQ实战—5.消息重复+乱序+延迟的处理
大纲 1.根据RocketMQ原理分析为什么会重复发优惠券 2.引入幂等性机制来保证数据不会重复 3.如何用死信队列处理优惠券系统数据库宕机 4.基于RocketMQ的订单库同步为什么会消息乱序 5. ...
- Jenkins+Ant+JaCoCo的代码覆盖率集成实践
Jenkins+Ant+JaCoCo的代码覆盖率集成实践 一.工具介绍 Jenkins: Jenkins是一个开源的.基于Java开发的持续集成工具,它可以帮助开发人员自动化构建.测试和部署软件项目. ...
- 0帧起手将腾讯混元大模型集成到Spring AI的全过程解析
在前面,我们已经为大家铺垫了大量的知识点,并深入解析了Spring AI项目的相关内容.今天,我们将正式进入实战环节,从零开始,小雨将带领大家一步步完成将第三方大模型集成到Spring AI中的全过程 ...
- Bean的原始版本与最终版本不一致?记一次Spring IOC探索之旅
前言 在这个信息技术发展迅速的时代,万万没想到,Spring自2003年发展至今,仍是技术选型中的首选,某些项目甚至有Spring全家桶的情况. 在Java开发者面试当中,Spring的原理也常被面试 ...
- QT5笔记: 35. QGraphicsView 视图
 三者关系:View中可以有多个Scene,Scene放在Vi ...
- Scala List集合 List 有序不唯一,元素可重复
package com.wyh.day01 import scala.collection.mutable.ListBuffer /** * List 有序不唯一,元素可重复 */ object Sc ...
- 我的公众号接入了DeepSeek-R1模型,成为了一个会深度思考的强大.NET AI智能体!
前言 前不久腾讯元器宣布接入满血版 Deepseek R1 模型,模型免费使用且不限量,为智能体开发提供更多样化的模型选择,带来更丰富的智能体功能和玩法. 今天咱们一起来把我公众号的.NET AI智能 ...