C++ 如何在程序内存中隐藏纯文本?

C++ 如何在程序内存中隐藏纯文本?,c++,encoding,data-protection,C++,Encoding,Data Protection,我正在编写一个程序,将编码的字符串加载到内存中,并用特殊算法对其进行解码 程序工作顺序: 从编码文件加载数据(base64string) 将base64字符串解码为编码数据字符串(Rijndael 256) 将编码数据字符串(Rijndael256)解码为纯文本代码 在数据结构中运行代码并存储状态 从内存中删除纯文本 问题出在sequence#3中,如果用户创建程序内存转储,他可以以明文形式获取必须安全的代码。 我的问题是-有没有办法保护内存中的纯文本字符串 程序是用C++编写的 大概在内存中

我正在编写一个程序,将编码的字符串加载到内存中,并用特殊算法对其进行解码

程序工作顺序:

  • 从编码文件加载数据(
    base64
    string)
  • base64
    字符串解码为编码数据字符串(
    Rijndael 256
  • 将编码数据字符串(
    Rijndael256
    )解码为纯文本代码
  • 在数据结构中运行代码并存储状态
  • 从内存中删除纯文本
  • 问题出在
    sequence#3
    中,如果用户创建程序内存转储,他可以以明文形式获取必须安全的代码。 我的问题是-有没有办法保护内存中的纯文本字符串


    程序是用
    C++
    编写的

    大概在内存中需要纯文本,至少是短暂的,以便正确执行。如果此时发生内存转储,是的,他们可以访问它,不是的,你对此无能为力。在尽可能短的时间内以纯文本形式保存它会有所帮助,并且在使用完它之后可以“安全地归零”内存。

    不,没有任何方法可以保护它-可能即使是OllyDbg也足以获得解码值(只是放置一个断点的问题,在此之后,内存归零或移动或其他任何事情都无关紧要)


    你应该重新考虑你的安全模型。

    Base64和明文一样安全。这意味着它们都不安全。不,不可能。考虑,有人可能会编写x86仿真器(Heck,Windows仿真器)。他们可以在上面运行您的代码,但其属性是他们可以随时中断模拟器并检查其状态的每个细节。真正的游戏是,您是否可以使其在解释内存转储时变得足够尴尬和恼人,而用户在管理它之前会放弃它。例如,可能只有一小部分文本是deco在任何时候都可以使用ded,甚至可以在多个对象之间进行分割。但这只是一个游戏,谁更有耐心,你还是你的对手。
    Base64
    是在
    Rijndael 256
    中隐藏丑陋编码文本的唯一方法。阅读工作序列。你在这里试图避免什么(XY问题)?以某种方式分配内存来保存纯文本可能会很有用,这样它就不会被交换到磁盘上。它似乎不太可能在很小的使用窗口中交换出去,但我同意这是可能的。如果加载场景是一个问题,您可以在操作系统中启用交换文件加密。