我正在分析一个恶意软件,其中首先获得了“KiUserExceptionDispatcher”的地址(使用导出名称表,转到导出序数表,最后到导出地址表)。一旦收到地址(7773A408),恶意软件就会用以下几行覆盖前 6 个字节:
(here is the finding part)
...
mov BYTE PTR DS:[EDX], 68 -> EDX contains ntdll.KiUserExceptionDispatcher
mov DWORD PTR DS:[EDX+1], malware.004035C2
mov BYTE PTR DS:[EDX+5], 0C3
....
因此,7773A408(KiUserExceptionDispatcher 的地址)处的十六进制窗口按以下方式变化:
7773A408 FC 8B 4C 24 | 04 8B .... (and so on) <- original
7773A408 68 C2 35 40 | 00 C3 .....(and so on) <- after overwriting
那么,接下来会发生什么是恶意软件到达“UD2”指令。我查了一下:它引发了一个无效的操作码异常。然后恶意软件跳转到
7773A40D RETN
然后导致我:
004035C2 DB 8B <- clear, because 004035C2 starts at 7773A40D (hex window)
然后最后到另一个地方,一个全新的功能开始。所以,我的问题是:假设恶意软件试图通过用 004035C2 覆盖它以重定向异常流来更改异常处理程序是否正确?为什么 UD2 的异常处理程序是 KiUserExceptionDispatcher 的前 6 个字节?
最好的祝福,