我试图反转一些由 metasploit 创建的 shellcode,以增加我对 shellcode 的理解。我理解代码的重点是试图在加载的模块列表中找到 kernel32.dll。
seg000:00000006 60 pusha
seg000:00000007 89 E5 mov ebp, esp
seg000:00000009 31 D2 xor edx, edx
seg000:0000000B 64 8B 52 30 mov edx, fs:[edx+30h] ; Accessing PEB
seg000:0000000F 8B 52 0C mov edx, [edx+0Ch] ; Access 0x0C PEB offset which is _PEB_LDR_DATA
seg000:00000012 8B 52 14 mov edx, [edx+14h] ; Accesses _PEB_LDR_DATA->InMemoryOrderModuleList
seg000:00000015
seg000:00000015 loc_15: ; CODE XREF: sub_6+87j
seg000:00000015 8B 72 28 mov esi, [edx+28h]
seg000:00000018 0F B7 4A 26 movzx ecx, word ptr [edx+26h]
seg000:0000001C 31 FF xor edi, edi
我在理解以下说明时遇到了一些问题。我知道 edx 会指向 _PEB_LDR_DATA->InMemoryOrderModuleList 但是为什么要引用 edx+28h 然后是 edx+26h 的一个词呢?esi 和 ecx 在随后的汇编指令中被覆盖,所以我不确定在这里填充它们的意义何在。
seg000:00000015 8B 72 28 mov esi, [edx+28h]
seg000:00000018 0F B7 4A 26 movzx ecx, word ptr [edx+26h]