Windows 中 32 位应用程序中 MOV 指令的结束字节是什么?(B8 mov)

逆向工程 拆卸 视窗 x86 x64dbg x86-64
2021-06-13 21:04:18

所以我只是比较了程序的 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                                                                                          |
1个回答

看来您正在查看 32 位的 Wow64 系统调用存根ntdll.dllWOW64 可以在所谓的Turbo thunks的系统调用号的高部分使用一个特殊值来自“wbenny”的WoW64 内部

typedef struct _WOW64_SYSTEM_SERVICE
{
    ULONG SystemCallNumber  : 12;
    ULONG ServiceTableIndex :  4;
    ULONG TurboThunkNumber  :  5; // Can hold values 0 - 31
    ULONG AlwaysZero        : 11;
} WOW64_SYSTEM_SERVICE, *PWOW64_SYSTEM_SERVICE;

这样做似乎是为了加快从 x86 堆栈区域提取系统调用参数的速度。NtTerminateProcess包装器 (7) 中使用的 thunk 编号对应于Thunk2ArgSpNSp具有以下代码:

.text:000000006B101C40                 movsxd  r10, dword ptr [r11]
.text:000000006B101C43                 mov     edx, [r11+4]
.text:000000006B101C47                 jmp     short Thunk0Arg

因此,x86 堆栈中的第一个双字(指向哪个r11点)被符号扩展,r10而第二个被复制到rdx(相当于零扩展到rdx)。