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

Disassembly:
push ebp
mov ebp, esp
push ecx
push ebx
mov ebx, dword [ebp + 0x10]
push esi
push edi
mov edi, dword [ebp + 8]
push ebx
push dword [ebp + 0xc]
mov eax, ebx
shr eax, 2
lea esi, [edi + 4]
add eax, 6
push esi
mov dword [edi], eax
call fcn.004114f0
add esp, 0xc
mov eax, ebx
mov edx, esi
mov ecx, esi
call fcn.0040981f
cmp ebx, 0x10
je 0x409b6a
cmp ebx, 0x18
je 0x409a4f
cmp ebx, 0x20
jne 0x409c69
mov eax, dword [esi + 0x1c]
mov ecx, eax
shr ecx, 0x10
movzx ecx, cl
mov edx, dword [ecx*4 + str.ccccwwww]
xor edx, 0x1000000
mov ecx, eax
shr ecx, 0x18
movzx ecx, byte [ecx*4 + str.ccccwwww]
mov edi, 0xff000000
and edx, edi
xor edx, ecx
mov ecx, eax
shr ecx, 8
movzx ecx, cl
mov ebx, dword [ecx*4 + str.ccccwwww]
mov ecx, 0xff0000
and ebx, ecx
xor edx, ebx
movzx eax, al
mov ebx, dword [eax*4 + str.ccccwwww]
mov eax, 0xff00
and ebx, eax
xor edx, ebx
xor edx, dword [esi]
lea ebx, [esi + 0x20]
mov dword [ebx], edx
mov dword [ebp + 0x10], ebx
mov ebx, dword [esi + 4]
xor ebx, edx
mov edx, dword [esi + 8]
xor edx, ebx
mov dword [esi + 0x24], ebx
mov ebx, dword [esi + 0xc]
xor ebx, edx
mov dword [esi + 0x28], edx
mov dword [esi + 0x2c], ebx
mov dword [ebp - 4], 4
mov ebx, dword [esi + 0x2c]
mov edx, ebx
shr ebx, 0x18
mov ebx, dword [ebx*4 + str.ccccwwww]
and ebx, edi
shr edx, 0x10
movzx edx, dl
mov edx, dword [edx*4 + str.ccccwwww]
and edx, ecx
xor edx, ebx
mov ebx, dword [esi + 0x2c]
shr ebx, 8
movzx ebx, bl
mov ebx, dword [ebx*4 + str.ccccwwww]
and ebx, eax
xor edx, ebx
movzx ebx, byte [esi + 0x2c]
movzx ebx, byte [ebx*4 + str.ccccwwww]
xor edx, ebx
xor edx, dword [esi + 0x10]
mov ebx, dword [esi + 0x14]
xor ebx, edx
mov dword [esi + 0x34], ebx
mov dword [esi + 0x30], edx
mov edx, dword [esi + 0x18]
xor edx, ebx
mov ebx, dword [esi + 0x1c]
xor ebx, edx
mov dword [esi + 0x3c], ebx
mov dword [esi + 0x38], edx
mov esi, dword [ebp + 0x10]
mov ebx, dword [esi + 0x1c]
mov dword [ebp + 0x10], ebx
mov edx, ebx
shr ebx, 8
movzx ebx, bl
mov ebx, dword [ebx*4 + str.ccccwwww]
and ebx, ecx
shr edx, 0x18
movzx edx, byte [edx*4 + str.ccccwwww]
xor edx, ebx
mov ebx, dword [ebp + 0x10]
shr ebx, 0x10
movzx ebx, bl
mov ebx, dword [ebx*4 + str.ccccwwww]
and ebx, edi
xor edx, ebx
movzx ebx, byte [ebp + 0x10]
mov ebx, dword [ebx*4 + str.ccccwwww]
and ebx, eax
xor edx, ebx
mov ebx, dword [ebp - 4]
xor edx, dword [ebx + 0x42dd00]
add dword [ebp - 4], 4
xor edx, dword [esi]
lea ebx, [esi + 0x20]
mov dword [ebx], edx
mov dword [ebp + 0x10], ebx
mov ebx, dword [esi + 4]
xor ebx, edx
mov dword [esi + 0x24], ebx
mov edx, dword [esi + 8]
xor edx, ebx
mov dword [esi + 0x28], edx
mov ebx, dword [esi + 0xc]
xor ebx, edx
cmp dword [ebp - 4], 0x1c
mov dword [esi + 0x2c], ebx
jne 0x409965
jmp 0x409c66
mov eax, dword [esi + 0x14]
mov ecx, eax
shr ecx, 0x10
movzx ecx, cl
mov edx, dword [ecx*4 + str.ccccwwww]
xor edx, 0x1000000
mov ecx, eax
shr ecx, 0x18
movzx ecx, byte [ecx*4 + str.ccccwwww]
mov edi, 0xff000000
and edx, edi
xor edx, ecx
mov ecx, eax
shr ecx, 8
movzx ecx, cl
mov ebx, dword [ecx*4 + str.ccccwwww]
mov ecx, 0xff0000
and ebx, ecx
xor edx, ebx
movzx eax, al
mov ebx, dword [eax*4 + str.ccccwwww]
mov eax, 0xff00
and ebx, eax
xor edx, ebx
xor edx, dword [esi]
lea ebx, [esi + 0x18]
mov dword [ebx], edx
mov dword [ebp + 0x10], ebx
mov ebx, dword [esi + 4]
xor ebx, edx
mov edx, dword [esi + 8]
xor edx, ebx
mov dword [esi + 0x1c], ebx
mov ebx, dword [esi + 0xc]
xor ebx, edx
mov dword [esi + 0x20], edx
mov dword [esi + 0x24], ebx
mov dword [ebp - 4], 4
mov edx, dword [esi + 0x10]
xor edx, dword [esi + 0x24]
mov ebx, dword [esi + 0x14]
xor ebx, edx
mov dword [esi + 0x2c], ebx
mov dword [esi + 0x28], edx
mov esi, dword [ebp + 0x10]
mov ebx, dword [esi + 0x14]
mov dword [ebp + 0x10], ebx
mov edx, ebx
shr ebx, 8
movzx ebx, bl
mov ebx, dword [ebx*4 + str.ccccwwww]
and ebx, ecx
shr edx, 0x18
movzx edx, byte [edx*4 + str.ccccwwww]
xor edx, ebx
mov ebx, dword [ebp + 0x10]
shr ebx, 0x10
movzx ebx, bl
mov ebx, dword [ebx*4 + str.ccccwwww]
and ebx, edi
xor edx, ebx
movzx ebx, byte [ebp + 0x10]
mov ebx, dword [ebx*4 + str.ccccwwww]
and ebx, eax
xor edx, ebx
mov ebx, dword [ebp - 4]
xor edx, dword [ebx + 0x42dd00]
add dword [ebp - 4], 4
xor edx, dword [esi]
lea ebx, [esi + 0x18]
mov dword [ebx], edx
mov dword [ebp + 0x10], ebx
mov ebx, dword [esi + 4]
xor ebx, edx
mov dword [esi + 0x1c], ebx
mov edx, dword [esi + 8]
xor edx, ebx
mov dword [esi + 0x20], edx
mov ebx, dword [esi + 0xc]
xor ebx, edx
cmp dword [ebp - 4], 0x20
mov dword [esi + 0x24], ebx
jne 0x409ad1
jmp 0x409c66
mov eax, dword [esi + 0xc]
mov ecx, eax
shr ecx, 0x10
movzx ecx, cl
mov edx, dword [ecx*4 + str.ccccwwww]
xor edx, 0x1000000
mov ecx, eax
shr ecx, 0x18
movzx ecx, byte [ecx*4 + str.ccccwwww]
mov edi, 0xff000000
and edx, edi
xor edx, ecx
mov ecx, eax
shr ecx, 8
movzx ecx, cl
mov ebx, dword [ecx*4 + str.ccccwwww]
mov ecx, 0xff0000
and ebx, ecx
xor edx, ebx
movzx eax, al
mov ebx, dword [eax*4 + str.ccccwwww]
mov eax, 0xff00
and ebx, eax
xor edx, ebx
xor edx, dword [esi]
lea ebx, [esi + 0x10]
mov dword [ebx], edx
mov dword [ebp - 4], ebx
mov ebx, dword [esi + 4]
xor ebx, edx
mov edx, dword [esi + 8]
xor edx, ebx
mov dword [esi + 0x18], edx
xor edx, dword [esi + 0xc]
mov dword [esi + 0x14], ebx
mov dword [esi + 0x1c], edx
mov dword [ebp + 0x10], 4
mov esi, dword [ebp - 4]
mov ebx, dword [esi + 0xc]
mov edx, ebx
shr ebx, 8
movzx ebx, bl
mov ebx, dword [ebx*4 + str.ccccwwww]
and ebx, ecx
shr edx, 0x18
movzx edx, byte [edx*4 + str.ccccwwww]
xor edx, ebx
mov ebx, dword [esi + 0xc]
shr ebx, 0x10
movzx ebx, bl
mov ebx, dword [ebx*4 + str.ccccwwww]
and ebx, edi
xor edx, ebx
movzx ebx, byte [esi + 0xc]
mov ebx, dword [ebx*4 + str.ccccwwww]
and ebx, eax
xor edx, ebx
mov ebx, dword [ebp + 0x10]
xor edx, dword [ebx + 0x42dd00]
add dword [ebp + 0x10], 4
xor edx, dword [esi]
lea ebx, [esi + 0x10]
mov dword [ebx], edx
mov dword [ebp - 4], ebx
mov ebx, dword [esi + 4]
xor ebx, edx
mov dword [esi + 0x14], ebx
mov edx, dword [esi + 8]
xor edx, ebx
mov dword [esi + 0x18], edx
mov ebx, dword [esi + 0xc]
xor ebx, edx
cmp dword [ebp + 0x10], 0x28
mov dword [esi + 0x1c], ebx
jne 0x409bea
mov edi, dword [ebp + 8]
cmp dword [ebp + 0x18], 1
jne 0x409e7b
mov esi, dword [edi]
and dword [ebp + 8], 0
shl esi, 2
lea ecx, [edi + 4]
je 0x409cde
lea edx, [ecx + esi*4 + 8]
lea eax, [ecx + 8]
mov ebx, dword [eax - 8]
mov dword [ebp + 0x10], ebx
mov ebx, dword [edx - 8]
mov dword [eax - 8], ebx
mov ebx, dword [ebp + 0x10]
mov dword [edx - 8], ebx
mov ebx, dword [eax - 4]
mov dword [ebp + 0x10], ebx
mov ebx, dword [edx - 4]
add dword [ebp + 8], 4
mov dword [eax - 4], ebx
mov ebx, dword [ebp + 0x10]
mov dword [edx - 4], ebx
mov ebx, dword [eax]
mov dword [ebp + 0x10], ebx
mov ebx, dword [edx]
mov dword [eax], ebx
mov ebx, dword [ebp + 0x10]
mov dword [edx], ebx
mov ebx, dword [eax + 4]
mov dword [ebp + 0x10], ebx
mov ebx, dword [edx + 4]
mov dword [eax + 4], ebx
mov ebx, dword [ebp + 0x10]
mov dword [edx + 4], ebx
sub esi, 4
add eax, 0x10
sub edx, 0x10
cmp dword [ebp + 8], esi
jb 0x409c88
xor eax, eax
inc eax
cmp dword [edi], eax
mov dword [ebp + 8], eax
jbe 0x409e7b
mov eax, 0xff
add ecx, 0x10
mov esi, dword [ecx]
mov ebx, esi
shr ebx, 0x10
mov edx, esi
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 + 0x42f128]
and ebx, eax
xor edx, dword [ebx*4 + 0x42f528]
mov ebx, esi
shr ebx, 8
movzx esi, bl
mov esi, dword [esi*4 + str.ccccwwww]
and esi, eax
xor edx, dword [esi*4 + 0x42f928]
movzx esi, byte [ecx]
mov esi, dword [esi*4 + str.ccccwwww]
and esi, eax
xor edx, dword [esi*4 + 0x42fd28]
mov esi, dword [ecx + 4]
mov dword [ecx], edx
mov ebx, esi
shr ebx, 0x10
mov edx, esi
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 + 0x42f128]
and ebx, eax
xor edx, dword [ebx*4 + 0x42f528]
mov ebx, esi
shr ebx, 8
movzx esi, bl
mov esi, dword [esi*4 + str.ccccwwww]
and esi, eax
xor edx, dword [esi*4 + 0x42f928]
movzx esi, byte [ecx + 4]
mov esi, dword [esi*4 + str.ccccwwww]
and esi, eax
xor edx, dword [esi*4 + 0x42fd28]
mov esi, dword [ecx + 8]
mov dword [ecx + 4], edx
mov ebx, esi
shr ebx, 0x10
mov edx, esi
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 + 0x42f128]
and ebx, eax
xor edx, dword [ebx*4 + 0x42f528]
mov ebx, esi
shr ebx, 8
movzx esi, bl
mov esi, dword [esi*4 + str.ccccwwww]
and esi, eax
xor edx, dword [esi*4 + 0x42f928]
movzx esi, byte [ecx + 8]
mov esi, dword [esi*4 + str.ccccwwww]
and esi, eax
xor edx, dword [esi*4 + 0x42fd28]
mov esi, dword [ecx + 0xc]
mov dword [ecx + 8], edx
mov ebx, esi
shr ebx, 0x10
mov edx, esi
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 + 0x42f128]
and ebx, eax
xor edx, dword [ebx*4 + 0x42f528]
mov ebx, esi
shr ebx, 8
movzx esi, bl
mov esi, dword [esi*4 + str.ccccwwww]
and esi, eax
xor edx, dword [esi*4 + 0x42f928]
movzx esi, byte [ecx + 0xc]
mov esi, dword [esi*4 + str.ccccwwww]
and esi, eax
xor edx, dword [esi*4 + 0x42fd28]
inc dword [ebp + 8]
mov dword [ecx + 0xc], edx
mov edx, dword [ebp + 8]
cmp edx, dword [edi]
jb 0x409cf1
mov esi, dword [ebp + 0x14]
add edi, 0xf4
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
pop edi
pop esi
pop ebx
leave
ret