2013-01-11 38 views
0

我听说,您可以使用WinAPI中的LockBytes()/UnlockBytes()等函数(不知道* nix替代方案中的确切名称)以实现这些目标。更改当前可执行文件的内容。可能吗?

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

我认为,这是rahter不可能的,因为线程更衣室车型,如:信号量,自旋锁等...

确实某种程度上存在

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

我感兴趣的是这个问题的原因如下:

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

  • 我不想写入另一个文件或注册表或别的,因为我想通过UAC/chmod防止访问文件系统空间或系统注册表。

PS

我不想让病毒从黑客试验的检查/ disassemling对我自己的计划只是很好的保护。

回答

1

一个可能的解决方案:

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

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

以上是Windows系统,MemoryModule是PE格式。在UNIX上,有两两件事是不同的:

  1. 您可以重命名和替换,而它的运行可执行文件,所以没有必要写入同一个文件,但
  2. 没有人在他的头脑将安装程序在系统范围内允许普通用户编写程序的可执行文件或目录(顺便说一句,在Windows上是不同的?你似乎确信UAC不会阻止你编写自己的可执行文件,如果你可以这样做的话,但它可能不是这样)。
+0

这是主要问题!我想更新没有权限的资源。也许有一种方法:1)。制作驱动程序,该驱动程序与纯模式中的其他* .sys驱动程序一样运行,然后通过csrss.exe在用户模式程序和驱动程序之间交换消息以更改内容(驱动程序重写应用程序内容)。 – Secret

+1

你怎么能要求安装(和用户会同意)驱动程序,但你不能有一个单一的全球可写的文件,附近的程序,因为UAC抱怨?无论如何,我怀疑这是可能的。随着您愿意走低级别,也许:例如你可以打开一个块设备,以某种方式在NTFS上找到你程序的块并在磁盘上修改它们,但是无论如何你需要一个非常多的权限来执行它。 –

+0

请注意!用户将只安装一次驱动程序。但程序会多次进行检查等。这是第一个区别。管理员可能在将来更改权限和程序可能会停止工作,但通过驱动程序的方案,它可以防止blocikg管理员对程序的访问。这是另一个细节为什么我要求。 – Secret

相关问题