C++ 在其exe中修改字符串的程序

C++ 在其exe中修改字符串的程序,c++,visual-studio,self-modifying,C++,Visual Studio,Self Modifying,我正在寻找一个程序的例子,它修改其exe中的字符串 我在Windows下使用C++,VisualStudio。 我在Windows中搜索了工作示例,但找不到任何工作代码 我需要简单的代码,它将要求用户输入字符串: string strTest = ""; (if strTest != "") { cout << "Modified: " << strTest << endl; } cin >> strText; 要对键入的用户设置字符串,请

我正在寻找一个程序的例子,它修改其exe中的字符串

<>我在Windows下使用C++,VisualStudio。

我在Windows中搜索了工作示例,但找不到任何工作代码

我需要简单的代码,它将要求用户输入字符串:

string strTest = "";
(if strTest != "")
{
   cout << "Modified: " << strTest << endl;
}
cin >> strText;
要对键入的用户设置字符串,请执行以下操作:

string strTest = "SomeStringFromUser"; 

如何在C++中,将字符串(从String Strest=“”)修改为String,用户输入了什么?(例如到strTest=“foo”)?

在Windows计算机上运行EXE时,EXE文件作为
CreateFileMapping
对象保持打开状态,页面标记为只读或只读

因此,当exe写入自身时,文件不会被修改。它只是创建一个由交换文件支持的新页面。但由于文件保持打开状态,其他人也无法打开EXE文件并对其进行写入

除了攻击页面保护以关闭写时拷贝之外——我甚至不确定这是否可能。我能想到的唯一方法是编写一个小程序,在exe完成并打开.exe文件并写入后运行

我必须相信,无论你想做什么,都有更好的方法

---后来----

好的,我现在明白了。你正在寻找你的exe水印。事情是这样的,在exe启动之前,在安装程序中很容易做到这一点。但是一旦.exe运行起来,就很难做到这一点

这是我要做的

  • 声明一个必要大小的全局字符串变量,例如
    const char g_szWatermark[100]=“”
  • < LI>构建我的EXE,然后查看映射文件,以查找其段内变量的地址(请记住C++名称修饰)
  • 解析EXE头以查找段在EXE中的起始位置
  • 添加这两个数字以获取exe文件中字符串的位置,请将此数字提供给我的安装程序
  • 让安装程序运行一个小程序,询问用户信息,然后将其写入.exe。注意:您必须在exe运行之前执行此操作,否则它将无法工作
      基于某种开放的、已建立的加密机制的许可方案将是您最稳健的解决方案。使用标准PKI的东西应该比尝试实现自修改代码更简单、更安全

      不过,老实说,有很多公司花了大量资金进行研发以创建拷贝保护,这些系统在发布后几天内就被破解了。所以,如果你试图阻止爆竹,那么你还有一条漫长而艰难的路要走

      如果您只是想让诚实的人保持诚实,那么使用GUID作为“许可证密钥”的简单在线激活将非常有效。

      这样如何:

      #include <string>
      #include <iostream>
      
      int main()
      {
          std::string strTest = "";
          std::getline(std::cin,strTest);
      
          if (strTest != "")
          {
              std::cout << "Modified String: " << strTest << "\n";
          }
          else
          {
              std::cout << "Not modified\n";
          }
       }
      
      #包括
      #包括
      int main()
      {
      std::string strTest=“”;
      std::getline(std::cin,strTest);
      如果(strTest!=“”)
      {
      
      std::这是假设所有权限都正确吗?因为典型的程序将安装在“程序文件”中,并且普通用户帐户没有权限在那里更改二进制文件…你能描述一下你为什么要这样做吗?闻起来有更好的方法。也许你最好单独存储MAC地址,但用二进制文件中硬编码的密钥加密它。如果用户更改网卡会发生什么情况?这会无效吗@Jasmin25:我不指望所有的AV公司都能合作。事实上,如果你发现一些公司会相信你的话,那不是恶意软件,请告诉我,这样我就再也不能使用那个AV软件了。我也不想依赖所有的用户都更新了AV软件。我也喜欢你的编辑,但因为我已经超过了你,所以我不能再这么做了在里面
      #include <string>
      #include <iostream>
      
      int main()
      {
          std::string strTest = "";
          std::getline(std::cin,strTest);
      
          if (strTest != "")
          {
              std::cout << "Modified String: " << strTest << "\n";
          }
          else
          {
              std::cout << "Not modified\n";
          }
       }