【问题标题】:Program that modifes string inside its exe在其 exe 中修改字符串的程序
【发布时间】:2010-12-29 14:11:08
【问题描述】:

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

我使用 C++、Windows 下的 Visual Studio。

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

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

string strTest = "";
(if strTest != "")
{
   cout << "Modified: " << strTest << endl;
}
cin >> strText;

并且代码应该重写:

string strTest = "";

到输入用户的字符串:

string strTest = "SomeStringFromUser"; 

在 C++ 中,如何将字符串(从字符串 strTest = "")修改为字符串,即用户键入的内容? (例如到 strTest = "foo")?

【问题讨论】:

  • 这是假设所有正确的权限等吗?因为典型的程序会安装在“程序文件”中,而普通用户帐户无权更改那里的二进制文件...
  • 你能描述一下为什么你想这样做吗?闻起来好像有更好的方法。
  • 也许您最好单独存储 MAC 地址,但使用硬编码在二进制文件中的密钥对其进行加密?
  • 如果用户更换网卡会发生什么?这会使许可证无效吗?
  • @Jasmin25:我不会指望所有的 AV 公司合作。事实上,如果你发现一些会相信你的话它不是恶意软件,请告诉我,这样我就再也不能使用那个 AV 软件了。我也不想依赖所有用户都更新了 AV 软件。

标签: c++ visual-studio self-modifying


【解决方案1】:

当 EXE 在 Windows 机器上运行时,exe 文件作为 CreateFileMapping 对象保持打开状态,其页面标记为 READONLY 或 COPY_ON_WRITE

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

除了破解页面保护以关闭 COPY_ON_WRITE - 我不确定这是否可行。我能想到的唯一方法是编写一个小程序,在您的 exe 完成后运行 并打开 .exe 文件并写入它。

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

--- 稍后----

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

这就是我要做的。

  • 声明一个必要大小的全局字符串变量,比如const char g_szWatermark[100] = "";
  • 构建我的 exe,然后在映射文件中查找变量在其段中的地址(记住 C++ 名称修饰)
  • 解析 EXE 标头以查找该段在 exe 中的开始位置。
  • 将这两个数字相加得到字符串在 exe 文件中的位置,将此数字提供给我的安装程序
  • 让安装程序运行一个小程序,询问用户信息,然后将其写入 .exe。注意:您必须在 exe 运行之前执行此操作,否则它将无法运行!

【讨论】:

  • 我也喜欢你的编辑,但因为我已经给你投了赞成票,所以我不能再这样做了。
【解决方案2】:

这个怎么样:

#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";
    }
 }

【讨论】:

    【解决方案3】:

    基于一些开放的、已建立的加密机制的许可方案将是您最强大的解决方案。使用标准 PKI 的东西应该比尝试实现自修改代码更简单、更安全。

    说实话,有很多公司在研发上花费大量资金来创建复制保护,而这些系统在发布后几天内就被破解了。因此,如果您想阻止饼干,那么您将面临漫长而艰难的道路。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-12
      • 2020-06-05
      • 1970-01-01
      • 1970-01-01
      • 2014-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多