Function at 0x21877
Capabilities:
Encode data using xor
Encrypt data using aes
Reference aes constants

Disassembly:
mov edi, edi
push ebp
mov ebp, esp
push ecx
push ebx
push edi
mov ebx, eax
push ebx
push dword [ebp + 8]
mov edi, ebx
shr edi, 2
lea eax, [edi + 6]
push esi
mov dword [esi + 0xf0], eax
call sub.ntoskrnl.exe_memcpy
add esp, 0xc
xor ecx, ecx
test edi, edi
jbe 0x218c2
mov eax, dword [esi + ecx*4]
mov edx, eax
ror edx, 8
and edx, 0xff00ff00
rol eax, 8
and eax, 0xff00ff
or edx, eax
mov dword [esi + ecx*4], edx
inc ecx
cmp ecx, edi
jb 0x218a2
cmp ebx, 0x10
je 0x21b62
cmp ebx, 0x18
je 0x21a4d
cmp ebx, 0x20
je 0x218e3
mov eax, 0xffffff53
jmp 0x21e6d
mov ecx, dword [esi + 0x1c]
mov eax, ecx
shr eax, 0x10
movzx eax, al
mov eax, dword [eax*4 + str.ccccwwww]
xor eax, 0x1000000
mov edx, ecx
shr edx, 0x18
movzx edx, byte [edx*4 + str.ccccwwww]
and eax, 0xff000000
xor eax, edx
mov edx, ecx
shr edx, 8
movzx edx, dl
mov edx, dword [edx*4 + str.ccccwwww]
mov edi, 0xff0000
and edx, edi
xor eax, edx
movzx ecx, cl
mov edx, dword [ecx*4 + str.ccccwwww]
mov ecx, 0xff00
and edx, ecx
xor eax, edx
xor eax, dword [esi]
mov edx, dword [esi + 4]
xor edx, eax
mov dword [esi + 0x20], eax
mov eax, dword [esi + 8]
xor eax, edx
mov dword [esi + 0x24], edx
mov edx, dword [esi + 0xc]
xor edx, eax
mov dword [esi + 0x28], eax
mov dword [esi + 0x2c], edx
lea eax, [esi + 0x30]
mov dword [ebp - 4], 4
mov ebx, dword [eax - 4]
mov edx, ebx
shr ebx, 0x18
mov ebx, dword [ebx*4 + str.ccccwwww]
and ebx, 0xff000000
shr edx, 0x10
movzx edx, dl
mov edx, dword [edx*4 + str.ccccwwww]
and edx, edi
xor edx, ebx
mov ebx, dword [eax - 4]
shr ebx, 8
movzx ebx, bl
mov ebx, dword [ebx*4 + str.ccccwwww]
and ebx, ecx
xor edx, ebx
movzx ebx, byte [eax - 4]
movzx ebx, byte [ebx*4 + str.ccccwwww]
xor edx, ebx
xor edx, dword [eax - 0x20]
mov ebx, dword [eax - 0x1c]
xor ebx, edx
mov dword [eax + 4], ebx
mov dword [eax], edx
mov edx, dword [eax - 0x18]
xor edx, ebx
mov ebx, dword [eax - 0x14]
xor ebx, edx
mov dword [eax + 0xc], ebx
mov dword [eax + 8], edx
mov ebx, dword [eax + 0xc]
mov edx, ebx
mov dword [ebp + 8], ebx
shr ebx, 8
add eax, 0x20
movzx ebx, bl
mov ebx, dword [ebx*4 + str.ccccwwww]
and ebx, edi
shr edx, 0x18
movzx edx, byte [edx*4 + str.ccccwwww]
xor edx, ebx
mov ebx, dword [ebp + 8]
shr ebx, 0x10
movzx ebx, bl
mov ebx, dword [ebx*4 + str.ccccwwww]
and ebx, 0xff000000
xor edx, ebx
movzx ebx, byte [ebp + 8]
mov ebx, dword [ebx*4 + str.ccccwwww]
and ebx, ecx
xor edx, ebx
mov ebx, dword [ebp - 4]
xor edx, dword [ebx + 0x23968]
add dword [ebp - 4], 4
xor edx, dword [eax - 0x30]
mov dword [eax - 0x10], edx
mov ebx, dword [eax - 0x2c]
xor ebx, edx
mov dword [eax - 0xc], ebx
mov edx, dword [eax - 0x28]
xor edx, ebx
mov dword [eax - 8], edx
mov ebx, dword [eax - 0x24]
xor ebx, edx
cmp dword [ebp - 4], 0x1c
mov dword [eax - 4], ebx
jne 0x21960
jmp 0x21c5c
mov ecx, dword [esi + 0x14]
mov eax, ecx
shr eax, 0x10
movzx eax, al
mov eax, dword [eax*4 + str.ccccwwww]
xor eax, 0x1000000
mov edx, ecx
shr edx, 0x18
movzx edx, byte [edx*4 + str.ccccwwww]
and eax, 0xff000000
xor eax, edx
mov edx, ecx
shr edx, 8
movzx edx, dl
mov edx, dword [edx*4 + str.ccccwwww]
mov edi, 0xff0000
and edx, edi
xor eax, edx
movzx ecx, cl
mov edx, dword [ecx*4 + str.ccccwwww]
mov ecx, 0xff00
and edx, ecx
xor eax, edx
xor eax, dword [esi]
mov edx, dword [esi + 4]
xor edx, eax
mov dword [esi + 0x18], eax
mov eax, dword [esi + 8]
xor eax, edx
mov dword [esi + 0x1c], edx
mov edx, dword [esi + 0xc]
xor edx, eax
mov dword [esi + 0x20], eax
mov dword [esi + 0x24], edx
lea eax, [esi + 0x28]
mov dword [ebp - 4], 4
mov edx, dword [eax - 0x18]
xor edx, dword [eax - 4]
mov ebx, dword [eax - 0x14]
xor ebx, edx
mov dword [eax + 4], ebx
mov dword [eax], edx
mov ebx, dword [eax + 4]
mov edx, ebx
mov dword [ebp + 8], ebx
shr ebx, 8
add eax, 0x18
movzx ebx, bl
mov ebx, dword [ebx*4 + str.ccccwwww]
and ebx, edi
shr edx, 0x18
movzx edx, byte [edx*4 + str.ccccwwww]
xor edx, ebx
mov ebx, dword [ebp + 8]
shr ebx, 0x10
movzx ebx, bl
mov ebx, dword [ebx*4 + str.ccccwwww]
and ebx, 0xff000000
xor edx, ebx
movzx ebx, byte [ebp + 8]
mov ebx, dword [ebx*4 + str.ccccwwww]
and ebx, ecx
xor edx, ebx
mov ebx, dword [ebp - 4]
xor edx, dword [ebx + 0x23968]
add dword [ebp - 4], 4
xor edx, dword [eax - 0x28]
mov dword [eax - 0x10], edx
mov ebx, dword [eax - 0x24]
xor ebx, edx
mov dword [eax - 0xc], ebx
mov edx, dword [eax - 0x20]
xor edx, ebx
mov dword [eax - 8], edx
mov ebx, dword [eax - 0x1c]
xor ebx, edx
cmp dword [ebp - 4], 0x20
mov dword [eax - 4], ebx
jne 0x21aca
jmp 0x21c5c
mov ebx, dword [esi + 0xc]
mov eax, ebx
shr eax, 0x10
movzx eax, al
mov edx, dword [eax*4 + str.ccccwwww]
xor edx, 0x1000000
and edx, 0xff000000
mov eax, ebx
shr eax, 0x18
movzx eax, byte [eax*4 + str.ccccwwww]
xor edx, eax
mov eax, ebx
shr eax, 8
movzx eax, al
mov eax, dword [eax*4 + str.ccccwwww]
mov edi, 0xff0000
and eax, edi
xor edx, eax
movzx eax, bl
mov eax, dword [eax*4 + str.ccccwwww]
mov ecx, 0xff00
and eax, ecx
xor edx, eax
xor edx, dword [esi]
mov eax, dword [esi + 4]
xor eax, edx
mov dword [esi + 0x10], edx
mov edx, dword [esi + 8]
xor edx, eax
mov dword [esi + 0x18], edx
xor edx, ebx
mov dword [esi + 0x14], eax
mov dword [esi + 0x1c], edx
lea eax, [esi + 4]
mov dword [ebp - 4], 4
mov ebx, dword [eax + 0x18]
mov edx, ebx
mov dword [ebp + 8], ebx
shr ebx, 8
add eax, 0x10
movzx ebx, bl
mov ebx, dword [ebx*4 + str.ccccwwww]
and ebx, edi
shr edx, 0x18
movzx edx, byte [edx*4 + str.ccccwwww]
xor edx, ebx
mov ebx, dword [ebp + 8]
shr ebx, 0x10
movzx ebx, bl
mov ebx, dword [ebx*4 + str.ccccwwww]
and ebx, 0xff000000
xor edx, ebx
movzx ebx, byte [ebp + 8]
mov ebx, dword [ebx*4 + str.ccccwwww]
and ebx, ecx
xor edx, ebx
mov ebx, dword [ebp - 4]
xor edx, dword [ebx + 0x23968]
add dword [ebp - 4], 4
xor edx, dword [eax - 4]
mov dword [eax + 0xc], edx
mov ebx, dword [eax]
xor ebx, edx
mov dword [eax + 0x10], ebx
mov edx, dword [eax + 4]
xor edx, ebx
mov dword [eax + 0x14], edx
mov ebx, dword [eax + 8]
xor ebx, edx
cmp dword [ebp - 4], 0x28
mov dword [eax + 0x18], ebx
jne 0x21bde
cmp dword [ebp + 0x10], 1
jne 0x21e64
mov edx, dword [esi + 0xf0]
and dword [ebp + 8], 0
shl edx, 2
test edx, edx
jbe 0x21cbc
lea eax, [esi + edx*4 + 8]
lea ecx, [esi + 8]
mov ebx, dword [eax - 8]
mov edi, dword [ecx - 8]
add dword [ebp + 8], 4
mov dword [ecx - 8], ebx
mov ebx, dword [eax - 4]
mov dword [eax - 8], edi
mov edi, dword [ecx - 4]
mov dword [ecx - 4], ebx
mov ebx, dword [eax]
mov dword [eax - 4], edi
mov edi, dword [ecx]
mov dword [ecx], ebx
mov ebx, dword [eax + 4]
mov dword [eax], edi
mov edi, dword [ecx + 4]
mov dword [ecx + 4], ebx
mov dword [eax + 4], edi
sub edx, 4
add ecx, 0x10
sub eax, 0x10
cmp dword [ebp + 8], edx
jb 0x21c7e
xor eax, eax
inc eax
mov dword [ebp + 8], eax
cmp dword [esi + 0xf0], eax
jbe 0x21e64
lea ecx, [esi + 8]
mov eax, 0xff
mov edi, dword [ecx + 8]
mov ebx, edi
shr ebx, 0x10
mov edx, edi
shr edx, 0x18
mov edx, dword [edx*4 + str.ccccwwww]
movzx ebx, bl
mov ebx, dword [ebx*4 + str.ccccwwww]
and edx, eax
mov edx, dword [edx*4 + 0x24d90]
add ecx, 0x10
and ebx, eax
xor edx, dword [ebx*4 + 0x25190]
mov ebx, edi
shr ebx, 8
movzx edi, bl
mov edi, dword [edi*4 + str.ccccwwww]
and edi, eax
xor edx, dword [edi*4 + 0x25590]
movzx edi, byte [ecx - 8]
mov edi, dword [edi*4 + str.ccccwwww]
and edi, eax
xor edx, dword [edi*4 + 0x25990]
mov edi, dword [ecx - 4]
mov dword [ecx - 8], edx
mov ebx, edi
shr ebx, 0x10
mov edx, edi
shr edx, 0x18
mov edx, dword [edx*4 + str.ccccwwww]
movzx ebx, bl
mov ebx, dword [ebx*4 + str.ccccwwww]
and edx, eax
mov edx, dword [edx*4 + 0x24d90]
and ebx, eax
xor edx, dword [ebx*4 + 0x25190]
mov ebx, edi
shr ebx, 8
movzx edi, bl
mov edi, dword [edi*4 + str.ccccwwww]
and edi, eax
xor edx, dword [edi*4 + 0x25590]
movzx edi, byte [ecx - 4]
mov edi, dword [edi*4 + str.ccccwwww]
and edi, eax
xor edx, dword [edi*4 + 0x25990]
mov edi, dword [ecx]
mov dword [ecx - 4], edx
mov ebx, edi
shr ebx, 0x10
mov edx, edi
shr edx, 0x18
mov edx, dword [edx*4 + str.ccccwwww]
movzx ebx, bl
mov ebx, dword [ebx*4 + str.ccccwwww]
and edx, eax
mov edx, dword [edx*4 + 0x24d90]
and ebx, eax
xor edx, dword [ebx*4 + 0x25190]
mov ebx, edi
shr ebx, 8
movzx edi, bl
mov edi, dword [edi*4 + str.ccccwwww]
and edi, eax
xor edx, dword [edi*4 + 0x25590]
movzx edi, byte [ecx]
mov edi, dword [edi*4 + str.ccccwwww]
and edi, eax
xor edx, dword [edi*4 + 0x25990]
mov edi, dword [ecx + 4]
mov dword [ecx], edx
mov ebx, edi
shr ebx, 0x10
mov edx, edi
shr edx, 0x18
mov edx, dword [edx*4 + str.ccccwwww]
movzx ebx, bl
mov ebx, dword [ebx*4 + str.ccccwwww]
and edx, eax
mov edx, dword [edx*4 + 0x24d90]
and ebx, eax
xor edx, dword [ebx*4 + 0x25190]
mov ebx, edi
shr ebx, 8
movzx edi, bl
mov edi, dword [edi*4 + str.ccccwwww]
and edi, eax
xor edx, dword [edi*4 + 0x25590]
movzx edi, byte [ecx + 4]
mov edi, dword [edi*4 + str.ccccwwww]
and edi, eax
xor edx, dword [edi*4 + 0x25990]
inc dword [ebp + 8]
mov dword [ecx + 4], edx
mov edx, dword [ebp + 8]
cmp edx, dword [esi + 0xf0]
jb 0x21cd6
push dword [ebp + 0xc]
push esi
call fcn.00021774
pop edi
pop ebx
leave
ret 0xc