我正在尝试在 C#中制作一个安全软件,该软件会监控其他进程中的所有单词,并在找到特定单词时执行操作。 示例:当任何其他正在运行的进程包含单词“ torrent ”时,我的应用程序将显示一个消息框,上面写着“当心病毒!”。 我希望有人有我的想法。
更新
哦,对于谁实现它,它仍然是一个粗略的想法。这就是为什么我给出了一个非常简单的例子(我知道在真正的程序中没用)。
更新2:原因
我知道一个名为 Block Free 4 的软件。它会阻止包含列入黑名单的单词的程序。它是一个轻量级的软件,运行良好。但我想改进这些功能并制作更好的程序。
答案 0 :(得分:0)
这听起来不是一个好主意,除非是笑话程序。这将是荒谬的慢,并将被归类为恶意的,也是无用的。但是,这至少有一些教育价值。
只要您以管理员身份运行,它就应该可能。请注意,即使管理员也无法对某些系统进程执行此操作。
首先,您需要获得SeDebugPrivilege。请参阅this示例。
然后,您需要枚举所有进程。看这个例子: http://msdn.microsoft.com/en-us/library/windows/desktop/ms682623(v=vs.85).aspx
然后,使用PROCESS_ALL_ACCESS在每个PID上使用Open Process。如果你得到ERROR_ACCESS_DENIED,你可能没有正确获得SeDebugPrivilege。
使用ReadProcessMemory读取进程的内存并将其存储在缓冲区中。某些进程会有大量内存,您可能需要将其分解为块。您还需要在错误处理方面做得很好。
然后,扫描缓冲区以找到所需的字符串,并在找到它时执行某些操作。
您可能每10秒左右重复以上所有操作。
注意:从C#开始,您需要为这些API进行p调用。 C#不是这类废话的最佳语言,但它可能......我建议使用本机代码。
答案 1 :(得分:0)
Windbg等调试器具有内存中字符串搜索功能。
相关:https://stackoverflow.com/a/10602366/2855568
除了现有的答案,WinDBG还是一个GUI前端 DbgEng API。您可以使用此API编写WinDBG扩展或 其他独立应用程序。 WinDBG SDK附带了样本 两个,一个示例独立应用程序可以在中找到 WinDBG安装的\ sdk \ samples \ dumpstk子目录。
有关更多信息,我写了一篇关于DbgEng的文章 这里有扩展名:
http://www.osronline.com/custom.cfm?name=articlePrint.cfm&id=559
其中大部分内容也适用于您如何编写独立版本 应用程序,因为它主要侧重于编程模式 DbgEng界面。
答案 2 :(得分:0)
嗯, VoidStar 为我最初的问题提供了正确的答案,我认为无论如何它将来会对其他人有用。但这对我来说并不是很有用,因为我不想要所有涉及的问题。 我发现我必须坚持一种更简单的方法来实现这一目标。由:
获取窗口标题: How do I get the title of the current active window using c#?
从网络浏览器获取网址(有帮助,但没有解决): Get URL from browser to C# application
这两项行动似乎就是为了实现我的目标而做的一切。
我希望我帮助过。感谢所有帮助过的人。