我一直在研究一些拆包机,但发现它们的末端大部分都使用:

mov edx, [ebp+oep]
call edx ; now, you're at the OEP of the original binary


或者这样:

mov ecx, [ebp+oep]
jmp ecx


或者这样:

mov eax, [ebp+oep]
push eax
ret


知道了这一点,通过快速跳转到绝对的跳转/调用,您就可以在几秒钟内解包。除此之外,某些软件使用cpuidrdstc来识别您的身份,同时通过大量混淆来保护组装件。在其中一个上放置一个“指令断点”,您绕过所有内容的速度就比眨眼更快!

我想说的是可能的,而不会严重影响性能?我知道跟踪,但这确实很慢,因此它不是一种选择。

编辑:我知道虚拟机监控程序的存在,我只是不知道它们是否适合我的情况,是否可以,我不知道如何将这些技术应用到工作中,因此任何指针(即使有Google关键字)也都很棒。

评论

您可以在类似的地方放置一个物理断点,但是程序可能会检测到它。使用虚拟机监控程序级别的调试器,可以放置虚拟断点,并且性能良好,但是程序可能会检测到虚拟机监控程序。没有单一的解决方案。

#1 楼

编写虚拟机管理程序

当前最好的方法是创建一个微型虚拟机管理程序,利用最初为支持更快的虚拟化而创建的技术来监视用户模式和内核模式代码。一旦SSDT挂钩受到Microsoft使用补丁保护程序的保护,这便成为AV的相当普遍的替代品。此外,一些安全公司如雨后春笋般涌现,它们使用虚拟机管理程序和微内核来保护和分离操作系统的不同组件(例如Bromium),并且微软最近宣布了他们的Application Guard,它使用相同的技术并实际上在Windows上安装了虚拟机管理程序。已安装。

技术实现

尽管设置虚拟机监控程序似乎是灵丹妙药,但它有许多缺点:


尽管当今大多数CPU支持虚拟机管理程序,但并非全部都支持。
Windows尚不支持嵌套虚拟化,并且正在安装虚拟机管理程序。下一步虚拟化具有多种复杂性,并使虚拟机管理程序开发过程更加复杂。除非安装的第一个虚拟机监控程序支持嵌套,否则就只能有一个虚拟机监控程序。
虚拟化软件严重依赖CPU的虚拟化支持,并且运行VM和虚拟机监控程序的主机可能会变得很棘手。在虚拟机中运行虚拟机监控程序也是如此(因此您可以对其进行正确调试)。这是对如何在VMWare中执行此操作的一个很好的解释。

今天,有几种可用的开源虚拟机管理程序,大多数用于实验目的,并且不包含许多基础架构所需的实际功能。设置功能性管理程序。

以下是一些概念的开源证明,可以用作起点:


https:// github.com/hzqst/Syscall-Monitor
https://github.com/ionescu007/SimpleVisor
https://github.com/asamy/ksm
https://github.com / tandasat / HyperPlatform

覆盖IVT / IDT / SSTD

在不那么遥远的过去,连接中断向量表,中断描述符表或系统服务调度表是非常普遍的。尽管这不会提供管理程序所具有的相同粒度,并且您将无法检测到特定指令,但通常的做法是部分替换为管理程序,以获取操作系统未提供的低级监视。

其背后的基本思想是重写某些中断触发时CPU执行的地址列表。操作系统通常负责处理中断,并且操作系统提供多少底层功能(例如管理内存和权限,分页,多任务支持,外围设备的输入/输出等)。使用某些技术(例如PatchGuard)使该技术与某些OS无关。

rdtsc技巧

rtdsc指令在某种程度上有些特殊,其他指令可能不是。从此处引用:


在保护或虚拟8086模式下,寄存器CR4中的时间戳禁用(TSD)标志限制了RDTSC指令的使用,如下所示。当TSD标志清零时,可以在任何特权级别执行RDTSC指令;当设置了该标志时,该指令只能在特权级别0上执行。


它的特殊之处在于它在CR4中具有自己的禁用控制位(“ timest disable”)。当该控制位置1时,仅允许内核模式代码执行rdtsc指令,但更有趣的是,当该控制位置1时,使用usermode中的rdtsc将触发一般保护错误,从而使此类指令可由内核检测到。

评论


Windows确实支持嵌套虚拟化。不确定确切时间,但至少从此答案之前

–phuclv
19年5月25日,3:30