Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 检测内存入侵_Delphi_Memory - Fatal编程技术网

Delphi 检测内存入侵

Delphi 检测内存入侵,delphi,memory,Delphi,Memory,还有一些软件应用程序,例如,可以编辑其他应用程序的内存 有没有一种方法可以检测其他应用程序何时正在编辑我的应用程序的内存?许多病毒检查器使用的一种方法是对可执行文件或内存执行校验和并保存它。运行时,偶尔计算新校验和并与原始校验和进行比较。大多数程序不会故意修改其可执行文件。防止基本内存修改的基本思想是加密您关心的内存部分,并进行冗余检查以确保不被修改 所有这些都不能阻止一个坚定的黑客,但足以让脚本小子远离你的地址空间。简短的回答是不,在一般情况下是不可能的。即使您实现了已经给出的一些建议,也没有

还有一些软件应用程序,例如,可以编辑其他应用程序的内存


有没有一种方法可以检测其他应用程序何时正在编辑我的应用程序的内存?

许多病毒检查器使用的一种方法是对可执行文件或内存执行校验和并保存它。运行时,偶尔计算新校验和并与原始校验和进行比较。大多数程序不会故意修改其可执行文件。

防止基本内存修改的基本思想是加密您关心的内存部分,并进行冗余检查以确保不被修改


所有这些都不能阻止一个坚定的黑客,但足以让脚本小子远离你的地址空间。

简短的回答是不,在一般情况下是不可能的。即使您实现了已经给出的一些建议,也没有什么可以阻止某人修补执行检查的代码

我不知道ArtMonkey是如何工作的,但是如果它作为一个调试器工作,你可以尝试定期检查DebugHook是否为0,如果是,你可以做出适当的反应。(只需确保将该代码放在{$IFNDEF DEBUG}块中,这样就不会给您带来麻烦!)


不过,你可能会问自己,为什么要阻止人们修补你的记忆。除非存在真正的安全问题,否则您甚至不应该尝试。请记住,您的程序将运行在用户的计算机上,这是他们的财产,而不是您的财产。如果您对用户的财产选择干预过多,您的程序在道德上与恶意软件是无法区分的。

我不知道它是如何工作的,我认为可以通过三种方式完成:

  • ReadProcessMemory和WriteProcessMemory Windows API
  • 使用调试器(检查debughook,但这太容易了,所以它不会使用它)
  • 注入dll,以便它可以访问所有内存(因为它处于同一进程中)
最后一个更容易(检查注入的dll或类似的东西)。第一个比较棘手,但我找到了一些关于它的文章:

  • 内存断点:
  • 钩子“WriteProcessMemory”api:

    • 我问了一个类似的问题,得出的结论基本上是你无法阻止这一点。

      否,
      DebugHook
      对于检查进程是否正在调试是完全无用的,它仅由IDE调试器使用。Windows API中有
      IsDebuggerPresent()
      (或直接访问PEB),但它非常容易被愚弄,请参见。对于不可变内存,它工作得很好。但大多数内存并不是一成不变的