感觉安全方面很重要啊.看到好文章,大家分享一下了.
某些时候,我们需要在内存中保存一些非常敏感的数据,比如信用卡账号密码、软件注册码等等。那么危险随之而来,使用一些高级软件调试工具查看进程的内存数据,居心不良的人就会有机会拿到这些本该严格保密的数据。
Microsoft Windows 2000 SP4 以上版本的操作系统提供了用于数据保护的 API —— DPAPI,我们可以使用 .NET Framework 2.0 提供的相关类型来保护我们的数据。
下面,我们使用一个简单的例子来说明其使用方法。Personal 类的 CreditPassword 属性用来模拟保存用户信用卡密码,对于下面这样的例子危险可想而知。
public class Personal
{
private string creditPassword;
public string CreditPassword
{
get { return creditPassword; }
set { creditPassword = value; }
}
}
好了,我们用 DPAPI 改写这个例子。.NET Framework 2.0 提供了 ProtectedMemory 和 ProtectedData 两个静态类来进行这个操作。使用前我们需要添加 System.Security.dll 的引用,缺省的 System.Security.Cryptography 名字空间并不包含这两个类。
using System.Security.Cryptography;
public class Personal
{
private byte[] creditPassword;
public string MyProperty
{
get
{
ProtectedMemory.Unprotect(creditPassword, MemoryProtectionScope.SameProcess);
return Encoding.Unicode.GetString(creditPassword);
}
set
{
creditPassword = Encoding.Unicode.GetBytes(value);
ProtectedMemory.Protect(creditPassword, MemoryProtectionScope.SameProcess);
}
}
}
ProtectedMemory 提供了两个静态方法,Protected 用来加密数据,UnProtected 解密还原数据。在改写的例子中我们使用 byte[] 来保存加密后的信用卡密码,而且使用 MemoryProtectionScope 参数指定只有当前进程才能解密,安全性自然高出很多。
我们另外写一个例子,看看 MemoryProtected.Protect 加密后的数据是什么样子。
using System.Security.Cryptography;
static void Main(string[] args)
{
byte[] data = Encoding.Unicode.GetBytes("Credit Card Password");
// ProtectedMemory.Protect 要求字节数组长度必须是 16 的倍数,因此我们需要调整 data 长度。
if (data.Length % 16 > 0) Array.Resize(ref data, data.Length + (16 - (data.Length % 16)));
ProtectedMemory.Protect(data, MemoryProtectionScope.SameProcess);
Console.WriteLine(Encoding.Unicode.GetString(data));
ProtectedMemory.Unprotect(data, MemoryProtectionScope.SameProcess);
// 由于我们调整了 data 的长度,因此需要删除字符串尾部的空字节。
Console.WriteLine(Encoding.Unicode.GetString(data).TrimEnd('\0'));
}
输出:
??亭??氶?埠?剡??????锬????
Credit Card Password
加密后的数据由乱码组成,且能正确被还原。(多次运行或不同的机器,加密结果有所不同。)
ProtectedData 同样提供 Protect 和 UnProtect 两个方法,但在使用上和 ProtectedMemory 还是有所差别的。
1. ProtectedData 的两个方法都多了一个参数 optionalEntropy,这个 byte[] 类似我们平常加密时所使用的 key,从而提供更强的安全性。
2. ProtectedData 不会改写要操作的字节数组,而是创建副本来保存加密或解密结果。
3. DataProtectionScope 枚举提供 CurrentUser、LocalMachine 两种限制选择,和 MemoryProtectionScope 不同。
基于这些差异,我们使用 ProtectedMemory 保护内存中的数据,而使用 ProtectedData 保护写到硬盘等存储器上的数据。
using System.Security.Cryptography;
static void Main(string[] args)
{
byte[] key = Encoding.Unicode.GetBytes("MyKey");
byte[] data = Encoding.Unicode.GetBytes("Credit Card Password");
byte[] encBytes = ProtectedData.Protect(data, key, DataProtectionScope.CurrentUser);
Console.WriteLine(Encoding.Unicode.GetString(encBytes));
byte[] orgBytes = ProtectedData.Unprotect(encBytes, key, DataProtectionScope.CurrentUser);
Console.WriteLine(Encoding.Unicode.GetString(orgBytes));
}
分享到:
相关推荐
5. **安全性与隐私**:内存提取涉及敏感数据,因此在进行此类操作时必须遵循严格的法规和伦理规定。特别是在涉及他人设备或数据时,需确保有合法授权,并且妥善处理可能包含的个人隐私信息。 6. **工具使用**:...
尽管现有的安全措施已经在一定程度上提高了移动应用的安全性,但是它们往往忽视了对敏感数据的深度防护,这包括程序中常驻内存的数据、网络传输过程中的明文数据以及关键逻辑函数中的参数和返回值。 产品简介中介绍...
Go-MemGuard是一个专门设计用于在内存中安全处理敏感数据的库,特别是在Go语言的上下文中。这个库的出现是为了应对现代网络安全中的一个重要问题:如何有效地保护存储或处理的敏感信息,如密码、密钥或其他个人隐私...
在医院信息化(I Hospital Digitalization)进程中,保护健康信息系统(HIS)中的敏感数据至关重要。Oracle 10G R2作为一款强大的关系型数据库管理系统,提供了多种加密手段来确保军事医疗项目“军卫一号”中的数据...
2. **全面检测**:对内存中的敏感数据和关键业务逻辑进行全面、深入的分析,揭示潜在的安全风险和漏洞。 3. **定制化防护方案**:基于检测报告,安全技术团队将为客户提供专业、全面的敏感数据防护策略,帮助客户...
总结起来,本文介绍的基于激光扫描的网络敏感数据智能存储系统是一种集成先进技术和创新设计的解决方案,它克服了传统方法的不足,强化了数据安全,为现代网络环境中的敏感信息保护提供了新的思路。这一设计充分展示...
例如,在云计算、 big data、物联网等领域中,磁盘剩余信息保护技术可以保护敏感数据免受未经授权的访问和修改。在企业环境中,磁盘剩余信息保护技术可以保护商业机密和员工个人信息免受未经授权的访问和修改。 ...
此外,由于内存dump可能包含敏感信息,因此在使用此类工具时,必须确保遵循数据保护和隐私法规。 总之,DumpIt作为一款强大的Windows内存获取工具,为系统管理员、安全研究人员和开发者提供了便捷的手段,用于诊断...
同时,源码的目的是读取游戏内存,这通常是在反作弊或游戏修改工具中常见的做法,以获取如HP、HS等敏感数据。 【知识点详解】 1. **Visual Basic (VB)**:VB是一种面向对象的编程语言,由Microsoft开发,常用于...
5. **内存保护(Memory Protection)**:为了防止意外修改或访问敏感区域,内存保护功能可以改变内存区域的权限。在易语言中,可能有类似`设置内存保护`的函数来控制内存的读写权限。 6. **跨进程内存操作**:更...
由于内存中存储了系统的实时状态,包括活动进程、网络连接、密码信息和其他敏感数据,因此对物理内存进行取证可以揭示在硬盘上可能无法找到的信息。 在计算机犯罪调查中,物理内存取证的重要性在于,它能够揭示临时...
2. **隐私保护**: 相较于硬盘分析,内存分析可以避免直接读取敏感文件,从而减少数据泄露的风险。 3. **隐藏行为揭示**: 许多恶意软件会利用各种手段隐藏在系统中,内存分析能揭示这些隐蔽的行为,例如隐藏进程、...
这种技术的应用不仅限于游戏领域,对于任何处理敏感数据的内存辅助程序都至关重要。如果内存辅助程序没有采取保护措施,其内部的游戏数据信息可能被竞争对手窃取,从而导致开发者的努力付诸东流。因此,掌握驱动级...
在汇编语言中,读取和写入内存是基本的操作,它们对于程序的数据交互和处理起着关键作用。本篇将详细探讨“汇编读内存”和“汇编写内存”的概念、实现方法以及相关知识点。 1. **内存结构与地址** - 内存是计算机...
9. **安全性**:考虑到内存虚拟硬盘可能会存储敏感数据,安全性和隐私保护也是需要考虑的因素。可能需要实现加密技术,防止数据在内存中被非法获取。 通过对这些关键点的理解,我们可以深入研究并学习如何构建一个...
该程序包试图减少敏感数据在内存中时被暴露的可能性。 它旨在支持所有主要的操作系统,并且使用纯Go语言编写。 功能敏感数据使用XSalsa20Poly1305在内存中进行加密和身份验证。 使用的方案还可以防御冷启动攻击。 ...
总的来说,网络游戏中的内存保护方法和系统是防止作弊、维护游戏公平性和保护用户数据的关键技术。它们通过多种手段防止恶意行为,同时也需要不断应对新的攻击手段,保持自身的更新和进化。对于开发者而言,理解并...
7. 安全性:由于内存盘的数据在关机后不保留,所以它也可以作为存储敏感数据的临时空间,提供一定的隐私保护。 "ramdisk.exe"是内存盘软件的可执行文件,可能是安装程序或者直接运行的内存盘服务程序。在使用时,...
在Windows中,可以通过`VirtualQueryEx`系统调用来获取进程地址空间的详细信息,如页面大小、保护标志(读/写/执行权限)和状态(已分配、未分配、已映射等)。此外,`GetSystemInfo`函数可以提供系统的基本信息,...