0

我听过,您可能会使用LockBytes()/UnlockBytes()WinAPI 中的此类函数(不知道 *nix 替代方案中的确切名称)来实现此类目标。

我很感兴趣:“是否可以在执行过程中更改某些 *.exe 的内容?”

我认为,由于线程锁柜模型(例如:信号量、自旋锁和其他...

但是存在某种方式吗?

也许,如果将资源嵌入 EXE 并使其为准备好的自己的线程模型和执行锁定,然后解锁它的字节区域并更改您需要的值。

我对这个问题很感兴趣,原因如下:

  • 安全在线检查。我想更改一些值,这些值将用于在线密钥检查器(例如将校验和和会话写入此类字节区域并在线检查等...)

  • 我不想写入另一个文件或注册表或其他东西,因为我想通过 UAC/chmod 阻止访问文件系统空间或系统注册表。

附言

我不想制造病毒,只是为我自己的程序提供良好的保护,使其免受黑客试验检查/反汇编的影响。

4

1 回答 1

1

一种可能的解决方案:

  1. 将要保护的大量代码移到自己的 DLL 中,而不是将其保存在 EXE 中;
  2. 在主可执行文件中,将 DLL 读入内存并使用https://github.com/fancycode/MemoryModule加载它。

然后DLL不会被锁定,您可以根据需要更新其资源(如果您有权限)。

以上是针对Windows系统的,MemoryModule是针对PE格式的。在 unix 上,有两点不同:

  1. 您可以在运行时重命名和替换可执行文件,因此无需写入同一个文件,但是
  2. 没有一个头脑正常的人会在系统范围内安装程序,并允许普通用户编写程序的可执行文件或目录(顺便说一句,在 Windows 上有什么不同吗?你似乎确信 UAC 不会阻止你如果可以的话,编写自己的可执行文件,但可能不是这样)。
于 2013-01-11T12:42:57.520 回答