gpt4 book ai didi

c - .exe c文件执行后自修改

转载 作者:太空宇宙 更新时间:2023-11-04 08:14:15 24 4
gpt4 key购买 nike

我有一个 C 代码,其中的字符数组初始化为“hello world”。

我想知道是否有可能在每次执行代码时将此字符数组重新初始化为其他一些随机字符串。如果不是 C,我可以知道这样的实现是否可以用任何其他编程语言实现吗?

详细来说,假设我的代码如下所示:

char c[] = "hello world";
.
.

执行此代码一次后,我希望将 char 数组 c 自动初始化为其他一些随机字符串(而不是“hello world”),这应该是一个永久更改。这种需要是出于安全原因。我可以知道这样的事情是否可能吗?

如果不行,请问是否可以让代码执行一次后自毁?

最佳答案

如果您能描述您正在努力实现的目标,而不是您想到的实现目标的特定机制,那么回答这个问题会容易得多。

现代操作系统通常会出于充分的理由(安全性、完整性等)阻止修改正在运行的可执行文件。出于类似的原因,修改磁盘上的可执行文件也是不可取的。我敢肯定还有其他方法可以在不诉诸自修改代码的情况下实现您的愿望。

I have a c code with a character array initialized to "hello world'. I would like to know if there is a possibility to re-initialize a this character array upon each execution of the code, to some other random string.

是的,这是可能的,但您需要授予用户对可执行文件的写入权限才能这样做,在二进制文件中找到正确的偏移量,修补文件并自动保存它,等等。有很多方法这可能会出错。不要这样做。

不是在可执行文件本身中静态分配的字符串,而是有一个单独的资源文件,其中包含字符串和所需的任何其他状态。您可以更改此资源文件(INI 文件、数据文件等)以在需要时修改字符串(甚至删除它)。为提供安全性,您可以对文件进行数字签名,以验证内容是否合法。如果签名失败,软件可以拒绝工作。您还可以加密内容,使其无法被好奇的用户读出。 (除非他们使用调试器很方便!)

If not C, may I know if such an implementation is possible in any other programming language?

这主要是操作系统限制,包括普通用户能够写入系统文件夹中已安装的应用程序(通常是您不想允许的操作)。如果您不能用 C 语言做到这一点,那么您可能也不能用其他语言做到这一点!

After executing this code once, I want the char array c to be initialized automatically to some other random string (and not "hello world") and this should be a permanent change. ... May I know if such a thing is even possible?

是的,但如上所述使用单独的文件。不要修改可执行文件本身。

This need is for security reasons.

自修改代码被禁止的首要原因是出于安全原因。如果您正在尝试实现某种复制保护,您最好研究现有的方法和工具以及最佳实践,甚至可能使用现成的解决方案。这东西很难,有些人以破解软件为乐,他们可以轻松绕过除最复杂的保护方案之外的所有软件。

If not, may I know if it is possible to let the code self-destroy after executing it once?

您可以让可执行文件删除自身,但这通常也需要提升权限。

只需让程序检查资源文件上的签名,如果签名无效则拒绝运行。

关于c - .exe c文件执行后自修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36732768/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com