所以我只是比较了程序的 32 位和 64 位版本之间的 NTterminateProcess,将系统调用移动到 eax 的 mov 指令几乎相同,都是 5 个字节,(都是 B8 mov),但唯一的区别是最后 2 个字节在 32 位版本中是一些甚至不用作系统调用号的随机数,例如操作码是它的 B8 - 2C000700,但 64 位是 B8 - 2C000000,最后一部分甚至没有用于系统调用号,两者中的数字都是2C,那么最后2-3个字节是怎么回事?
编辑:是的,它实际上是 Wow64 进程
编辑 2 :这是图片,你可以看到它们中的一些在最后 2 个字节中有一些不是系统调用号的一部分,并且出于某种原因,只有那些显示 Zw 的才有它们,为什么!?其余的也是 Zw 函数,例如黑色的是 ZwQuerySystemInformation,但我不明白为什么它的名字没有显示!(这与 mov 的最后一个字节没有数字有什么关系吗?)
(图片为 x32dbg)
编辑3:
77C61FF0 | B8 36000000 | mov eax,36 | 36:'6'
77C61FF5 | BA 508CC777 | mov edx,ntdll.77C78C50 |
77C61FFA | FFD2 | call edx |
77C61FFC | C2 1000 | ret 10 |
77C61FFF | 90 | nop |
77C62000 | B8 37000000 | mov eax,37 | 37:'7'
77C62005 | BA 508CC777 | mov edx,ntdll.77C78C50 |
77C6200A | FFD2 | call edx |
77C6200C | C2 0C00 | ret C |
77C6200F | 90 | nop |
77C62010 | B8 38000000 | mov eax,38 | 38:'8'
77C62015 | BA 508CC777 | mov edx,ntdll.77C78C50 |
77C6201A | FFD2 | call edx |
77C6201C | C2 1400 | ret 14 |
77C6201F | 90 | nop |
77C62020 | B8 39001B00 | mov eax,1B0039 |
77C62025 | BA 508CC777 | mov edx,ntdll.77C78C50 |
77C6202A | FFD2 | call edx |
77C6202C | C2 2800 | ret 28 |
77C6202F | 90 | nop |
77C62030 | B8 3A000000 | mov eax,3A | 3A:':'
77C62035 | BA 508CC777 | mov edx,ntdll.77C78C50 |
77C6203A | FFD2 | call edx |
77C6203C | C2 1400 | ret 14 |
77C6203F | 90 | nop |
77C62040 | B8 3B000000 | mov eax,3B | 3B:';'
77C62045 | BA 508CC777 | mov edx,ntdll.77C78C50 |
77C6204A | FFD2 | call edx |
77C6204C | C2 0C00 | ret C |
77C6204F | 90 | nop |
77C62050 | B8 3C000000 | mov eax,3C | 3C:'<'
77C62055 | BA 508CC777 | mov edx,ntdll.77C78C50 |
77C6205A | FFD2 | call edx |
77C6205C | C2 1C00 | ret 1C |
77C6205F | 90 | nop |
77C62060 | B8 3D000000 | mov eax,3D | 3D:'='
77C62065 | BA 508CC777 | mov edx,ntdll.77C78C50 |
77C6206A | FFD2 | call edx |
77C6206C | C2 0800 | ret 8 |
77C6206F | 90 | nop |
77C62070 | B8 3E000300 | mov eax,3003E |
77C62075 | BA 508CC777 | mov edx,ntdll.77C78C50 |
77C6207A | FFD2 | call edx |
77C6207C | C2 0400 | ret 4 |
