更改当前可执行文件的内容。可能吗?

时间:2013-01-11 12:24:38

标签: locking byte range execution disassembly

我听过,你可以使用WinAPI中的LockBytes()/UnlockBytes()等函数(不知道* nix替代中的确切名称)来实现这些目标。

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

我认为,由于线程锁模型如:Semaphore,Spinlock等等,所以这是不可能的......

确实存在某种方式

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

由于以下原因,我对这个问题感兴趣:

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

  • 我不想写入另一个文件或注册表或其他文件,因为我想传递UAC / chmod以防止访问文件系统空间或系统注册表。

PS

我不想制造病毒,只是对我自己的程序提供良好的保护,使其免受黑客的审判/反击。

1 个答案:

答案 0 :(得分:1)

一种可能的解决方案:

  1. 将您要保护的大量代码移到自己的DLL中,而不是将其保存在EXE中;
  2. 在主可执行文件中,将DLL读入内存并使用https://github.com/fancycode/MemoryModule加载它。
  3. 然后DLL将不会被锁定,您可以根据需要更新其资源(如果您有权限)。

    以上内容适用于Windows系统,MemoryModule适用于PE格式。在unix上,有两件事是不同的:

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