windows - 什么样的反调试技术不允许附加用户模式调试器?
问题描述
我目前正在学习恶意软件用来防止调试的不同技术,我遇到了一个我似乎无法真正理解的问题。我目前正在尝试找出和调试的这个恶意软件使用了某种反调试技术,它一开始就不允许我附加调试器。我尝试过使用诸如 Scylla-hide 之类的东西,我也尝试过手动进入并挂钩常见的反调试 API 调用以查看发生了什么,但到目前为止还没有运气。我也尝试过使用 WinDbg,希望它能给我一些我可以摆脱的错误消息,它给了我这个: 尝试调试程序时的 WinDbg 输出
所以这让我想到它正在做一些事情来阻止线程启动,这就是导致任何调试器能够附加的原因。我还尝试使用典型的 LoadLibrary CreateRemoteThreadEx 技术注入 DLL,似乎它也不允许我以这种方式创建线程。我已经尽可能多地研究了反调试,但似乎无法找到答案。任何朝着正确方向的轻推将不胜感激。
我希望能够在用户模式下规避这个问题,因为我试图了解它到底在做什么来阻止我进行调试,而不是简单地绕过它。这是我第一次问一个问题,如果有什么难以理解的话,非常抱歉。
解决方案
这是 Peter Ferrie 的事实上的反调试参考,它是一个了不起的资源:https ://anti-reversing.com/Downloads/Anti-Reversing/The_Ultimate_Anti-Reversing_Reference.pdf
它包含几乎所有已知的反调试方法,您可以使用此参考并在列表中勾选每种方法,直到找到已实现的方法,这本书还应该帮助您轻松缓解每种方法。
根据我们在评论中的对话,您的问题的答案是该过程同时连接了 DbgBreakPoint 和 DbgUiRemoteBreakig。修补它们使您能够然后附加调试器。
推荐阅读
- node.js - Nodejs Mongodb无法读取未定义的属性'then'
- conda - 修改某些包的源代码后,如何将 Conda 环境“复制”到另一台机器?
- r - 从概率值计算 Z 分数 - R 编程
- javascript - 在我的字谜问题中,我不明白为什么计数器是 16
- javascript - 未捕获的类型错误:btnz.appendChild 不是函数
- c++ - 当模板类的特化允许使用比声明更多的模板参数时?
- pandas - 在 python pandas 中从上一年和下一年的同一月份中插入一年中选定月份的每小时负载?
- javascript - 遍历对象数组并获取每个对象的唯一值
- c# - 我如何实现 JWT 身份验证 C#
- python - 关于 init_Ember,py 中的 File not Found 错误