使用调试器检测可执行文件中的运行时更改
detect runtime change in executable using debugger
我有一个c++的桌面应用程序。我想检查是否使用调试器在可执行文件中进行了任何运行时更改。如果完成,可执行文件将退出。我怎么检查?
我已经使用了CheckRemoteDebuggerPresent,但黑客在exe中做了更改以跳过此语句
编辑:如果调试器存在,我们可以强制停止它吗?如果不存在,它将充当一个虚拟代码。我已经尝试了DebugActiveProcessStop,但它不工作在当前进程,我猜
不幸的是,通常不可能确保您的可执行文件未被修改。你可以选择一个安全的平台(桌面应用程序不是),或者你可以从许多代码混淆/保护包中选择一个;但是可以绕过这些。
我最喜欢的关于这个主题的文章是《让海盗远离海湾》(来源)。
为了检测运行时的变化,你需要一个循环来散列内存的各个区域,以确保它们没有被修改,以及像VirtualQuery
这样的东西,以确保页面访问没有被篡改,当然这总是可以被抵消的,只要看看暴雪监守(使用这种方法)。
Veracode的Tyler Shields最近发表的一篇论文提供了相当广泛的技术选择,您可以考虑使用。
http://www.shell-storm.org/papers/files/764.pdf但是你必须接受这样一个事实:无论你选择做什么,一个老练的攻击者几乎总能找到绕过你的方法。
您可以使用CheckRemoteDebuggerPresent()来检测调试器,但我不知道是否有方法检测是否进行了更改。这里还有一些其他的选项
相关文章:
- 在 Linux 上没有 /proc/self/exe 的 C/C++ 运行时可执行文件的大小?
- 使用 g++ 和 Makefile 编译 c++ 时可执行文件非常大
- 从电子项目运行的可执行文件未加载资源
- 启动/运行外部可执行文件并查看其输出日志
- 检测系统是否可以运行 amd64 可执行文件
- 在 PHP 上运行C++可执行文件
- 获取<whatever>包含正在运行的可执行文件的 USB 驱动器C++ /dev/
- 从Ubuntu到Debian运行一个可执行文件
- 使用CreateProcess运行游戏可执行文件
- 如何在C++中获取当前运行的可执行文件的文件名
- 从另一台计算机运行opencv可执行文件
- 一个正在运行的可执行文件,用于修改自身
- 如何覆盖我当前正在运行的可执行文件
- 在 Linux 上运行C++可执行文件
- CMake :运行 ctest 时可执行文件崩溃
- 并行运行现有可执行文件的通用方式
- 如何从存储在其他文件夹中的C++运行linux可执行文件
- 通过developer studio运行qt可执行文件时出现错误STATUS_BAD_NETWORK_PATH
- 如何在Windows PE中运行c++可执行文件
- 使用PHP在Linux服务器上运行c++可执行文件