沙箱通常用于分析恶意软件。它们提供了一个临时、隔离且安全的环境,用于观察可疑文件是否表现出任何恶意行为。然而,恶意软件开发人员也开发了逃避沙箱和分析环境的方法。一种方法是通过检查来确定恶意软件运行的机器是不是由真人操作。其中一项检查是 RAM 大小。如果 RAM 大小小得不切实际(例如 1GB),则可能表明该机器是沙盒。如果恶意软件检测到沙箱,它不会执行其真正的恶意行为,并且可能看起来是一个良性文件。
GetPhysicallyInstalledSystemMemory
API 从 SMBIOS
固件表中获取计算机的物理内存量。它传入一个 PULONGLONG
参数并在函数成功时返回 TRUE
,将 TotalMemoryInKilobytes
设置为非零值。如果函数失败,则返回 FALSE
从GetPhysicallyInstalledSystemMemory
函数获取的物理内存量必须等于或大于 GlobalMemoryStatusEx
函数报告的量;如果小于,则 SMBIOS
数据格式错误且函数失败并显示 ERROR_INVALID_DATA
,格式错误的 SMBIOS 数据可能表明用户计算机存在问题。
rcx
保存参数 TotalMemoryInKilobytes
。为了修改 GetPhysicallyInstalledSystemMemory
的跳转地址,我使用了以下操作码:mov qword ptr ss:[rcx],4193B840
。这会将值 4193B840
(或 1.1 TB)移动到 rcx
。然后,ret
指令用于从堆栈弹出返回地址并跳转到它,因此,无论何时调用 GetPhysicallyInstalledSystemMemory
,它都会将 rcx
设置为自定义值。