Function at 0x721950
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 8
mov ebp, dword [esp + 0x20]
mov eax, dword [esp + 0x1c]
mov edx, dword [esp + 0x28]
mov byte [eax], 0
cmp ebp, 0x80
mov ecx, pe_nt_image_headers32
cmovl ecx, ebp
cmp edx, 0x400
mov edi, 0x400
mov esi, 0x400
cmovb esi, edx
test edx, edx
mov edx, eax
cmovle esi, edi
mov dword [esp + 4], esi
test ebp, ebp
jle 0x721ac2
mov edi, dword [esp + 0x24]
cmp ebp, 8
setl dl
mov ebx, dword [esp + 0x1c]
sub ebx, edi
cmp ebx, 0x20
setb dh
xor ebp, ebp
or dh, dl
mov edx, dword [esp + 0x1c]
jne 0x721a57
xor ebp, ebp
cmp dword [esp + 0x20], 0x20
jl 0x721a31
mov ebp, ecx
and ebp, 0xe0
movdqu xmm0, xmmword [edi]
movups xmm1, xmmword [edi + 0x10]
movdqu xmmword [edx], xmm0
movups xmmword [edx + 0x10], xmm1
cmp ebp, 0x20
je 0x721a24
movdqu xmm0, xmmword [edi + 0x20]
movups xmm1, xmmword [edi + 0x30]
movdqu xmmword [edx + 0x20], xmm0
movups xmmword [edx + 0x30], xmm1
cmp ebp, 0x40
je 0x721a24
movdqu xmm0, xmmword [edi + 0x40]
movups xmm1, xmmword [edi + 0x50]
movdqu xmmword [edx + 0x40], xmm0
movups xmmword [edx + 0x50], xmm1
cmp ebp, 0x60
je 0x721a24
movdqu xmm0, xmmword [edi + 0x60]
movups xmm1, xmmword [edi + 0x70]
movdqu xmmword [edx + 0x60], xmm0
movups xmmword [edx + 0x70], xmm1
cmp ecx, ebp
je 0x721ab9
test cl, 0x18
je 0x721a57
mov eax, edx
mov edx, ebp
mov ebp, ecx
and ebp, 0xf8
nop dword [eax]
movq xmm0, qword [edi + edx]
movq qword [eax + edx], xmm0
add edx, 8
cmp ebp, edx
jne 0x721a40
cmp ecx, ebp
mov edx, eax
je 0x721ab9
mov esi, edx
mov edx, ecx
mov ebx, ebp
and edx, 3
je 0x721a7b
mov ebx, ebp
nop word cs:[eax + eax]
movzx eax, byte [edi + ebx]
mov byte [esi + ebx], al
inc ebx
dec edx
jne 0x721a70
sub ebp, ecx
cmp ebp, 0xfffffffc
mov edx, esi
ja 0x721ab9
nop word cs:[eax + eax]
movzx eax, byte [edi + ebx]
mov byte [edx + ebx], al
movzx eax, byte [edi + ebx + 1]
mov byte [edx + ebx + 1], al
movzx eax, byte [edi + ebx + 2]
mov byte [edx + ebx + 2], al
movzx eax, byte [edi + ebx + 3]
mov byte [edx + ebx + 3], al
add ebx, 4
cmp ecx, ebx
jne 0x721a90
mov ebp, dword [esp + 0x20]
cmp ebp, 0x7f
jg 0x721b35
movzx ebx, byte [edx + ecx - 1]
mov eax, pe_nt_image_headers32
sub eax, ecx
xor edi, edi
cmp ebp, 0x7f
je 0x721b21
lea esi, [edx + 1]
mov dword [esp], eax
mov ebp, eax
and ebp, 0xfffffffe
neg ebp
xor edi, edi
nop word cs:[eax + eax]
add bl, byte [esi - 1]
movzx eax, bl
movzx eax, byte [eax + 0xa69194]
mov byte [esi + ecx - 1], al
add al, byte [esi]
movzx eax, al
movzx ebx, byte [eax + 0xa69194]
mov byte [esi + ecx], bl
add esi, 2
add edi, 0xfffffffe
cmp ebp, edi
jne 0x721af0
sub ecx, edi
neg edi
mov eax, dword [esp]
test al, 1
je 0x721b35
add bl, byte [edx + edi]
movzx eax, bl
movzx eax, byte [eax + 0xa69194]
mov byte [edx + ecx], al
mov esi, edx
mov ecx, dword [esp + 4]
lea edx, [ecx + 7]
shr edx, 3
neg cl
and cl, 7
mov eax, 0xff
shr eax, cl
lea ecx, [edx - 0x80]
sub esi, ecx
movzx edi, byte [esi]
and edi, eax
movzx ebx, byte [edi + 0xa69194]
mov byte [esi], bl
cmp edx, 0x80
je 0x721bc7
neg ecx
test cl, 1
je 0x721b8f
mov ecx, 0x7f
sub ecx, edx
mov eax, edx
mov edi, dword [esp + 0x1c]
xor bl, byte [edi + 0x7f]
neg eax
movzx esi, bl
movzx ebx, byte [esi + 0xa69194]
mov byte [edi + eax + 0x7f], bl
cmp edx, 0x7f
je 0x721bc7
mov eax, dword [esp + 0x1c]
lea esi, [eax - 1]
add eax, edx
dec eax
nop
xor bl, byte [eax + ecx]
movzx edx, bl
movzx edx, byte [edx + 0xa69194]
mov byte [esi + ecx], dl
xor dl, byte [eax + ecx - 1]
movzx edx, dl
movzx ebx, byte [edx + 0xa69194]
mov byte [esi + ecx - 1], bl
add ecx, 0xfffffffe
jne 0x721ba0
mov eax, dword [esp + 0x1c]
movq xmm1, qword [eax + 0x78]
pxor xmm0, xmm0
punpcklwd xmm1, xmm0
movdqu xmmword [eax + 0xf0], xmm1
movq xmm1, qword [eax + 0x70]
punpcklwd xmm1, xmm0
movdqu xmmword [eax + 0xe0], xmm1
movq xmm1, qword [eax + 0x68]
punpcklwd xmm1, xmm0
movdqu xmmword [eax + 0xd0], xmm1
movq xmm1, qword [eax + 0x60]
punpcklwd xmm1, xmm0
movdqu xmmword [eax + 0xc0], xmm1
movq xmm1, qword [eax + 0x58]
punpcklwd xmm1, xmm0
movdqu xmmword [eax + 0xb0], xmm1
movq xmm1, qword [eax + 0x50]
punpcklwd xmm1, xmm0
movdqu xmmword [eax + 0xa0], xmm1
movq xmm1, qword [eax + 0x48]
punpcklwd xmm1, xmm0
movdqu xmmword [eax + 0x90], xmm1
movq xmm1, qword [eax + 0x40]
punpcklwd xmm1, xmm0
movdqu xmmword [eax + 0x80], xmm1
movq xmm1, qword [eax + 0x30]
movq xmm2, qword [eax + 0x38]
punpcklwd xmm2, xmm0
movdqu xmmword [eax + 0x70], xmm2
punpcklwd xmm1, xmm0
movdqu xmmword [eax + 0x60], xmm1
movq xmm1, qword [eax + 0x20]
movq xmm2, qword [eax + 0x28]
punpcklwd xmm2, xmm0
movdqu xmmword [eax + 0x50], xmm2
punpcklwd xmm1, xmm0
movdqu xmmword [eax + 0x40], xmm1
movq xmm1, qword [eax + 0x18]
punpcklwd xmm1, xmm0
movdqu xmmword [eax + 0x30], xmm1
movq xmm1, qword [eax + 0x10]
punpcklwd xmm1, xmm0
movdqu xmmword [eax + 0x20], xmm1
movq xmm1, qword [eax + 8]
punpcklwd xmm1, xmm0
movdqu xmmword [eax + 0x10], xmm1
movq xmm1, qword [eax]
punpcklwd xmm1, xmm0
movdqu xmmword [eax], xmm1
add esp, 8
pop esi
pop edi
pop ebx
pop ebp
ret