Function at 0x422890
Capabilities:
Encrypt data using aes
Reference aes constants

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x130
mov ebp, dword [esp + 0x150]
mov esi, dword [esp + 0x144]
mov ecx, ebp
call fcn.00422790
test eax, eax
je 0x4228c5
mov dword [esi + 4], eax
mov dword [esi + 8], 0x55d72c
mov byte [esi], 1
jmp 0x423029
mov eax, ebp
mov dword [esp + 0x3c], ebp
shr eax, 2
cmp eax, 4
je 0x4228e8
cmp eax, 6
je 0x4228ef
cmp eax, 8
jne 0x423036
mov ebx, 0xe
jmp 0x4228f4
mov ebx, 0xa
jmp 0x4228f4
mov ebx, 0xc
mov ecx, dword [esp + 0x148]
pxor xmm1, xmm1
mov edx, dword [esp + 0x14c]
lea esi, [esp + 0x40]
movdqu xmm0, xmmword [ecx]
mov ecx, esi
movdqa xmm2, xmm0
punpcklbw xmm0, xmm1
punpckhbw xmm2, xmm1
pshufd xmm1, xmm0, 0xe7
pshufd xmm0, xmm0, 0xe8
pshufd xmm3, xmm2, 0xe7
pshufd xmm2, xmm2, 0xe8
pshuflw xmm1, xmm1, 0x72
pshuflw xmm0, xmm0, 0xd8
pshuflw xmm3, xmm3, 0x72
pshuflw xmm2, xmm2, 0xd8
punpckldq xmm1, xmm3
punpckldq xmm0, xmm2
packuswb xmm0, xmm1
movdqu xmmword [esp], xmm0
push ebx
push eax
push ebp
call fcn.004222b0
add esp, 0xc
mov edx, esp
mov ecx, ebx
push esi
call fcn.00422600
add esp, 4
jmp 0x42297d
mov ebx, dword [esp + 0x1c]
cmp ebx, 1
jbe 0x422ec9
movzx eax, byte [esp + 6]
movzx ecx, byte [esp + 0xc]
movzx edi, byte [esp + 7]
movzx esi, byte [esp + 4]
movzx ebp, byte [esp + 9]
movzx edx, byte [esp + 0xb]
mov dword [esp + 0x18], eax
movzx eax, byte [esp + 5]
mov dword [esp + 0x14], ecx
mov ecx, ebx
movzx ebx, byte [esp + 0xd]
dec ecx
mov dword [esp + 0x34], eax
movzx eax, byte [esp + 8]
mov dword [esp + 0x30], ebx
movzx ebx, byte [esp + 0xe]
mov dword [esp + 0x20], eax
movzx eax, byte [esp + 0xa]
mov dword [esp + 0x38], ebx
movzx ebx, byte [esp + 0xf]
mov dword [esp + 0x1c], eax
movzx eax, byte [esp]
mov dword [esp + 0x10], ebx
movzx eax, byte [eax + 0x55d580]
mov byte [esp], al
movzx eax, byte [esp + 1]
movzx eax, byte [eax + 0x55d580]
mov byte [esp + 1], al
movzx eax, byte [esp + 2]
movzx eax, byte [eax + 0x55d580]
mov byte [esp + 2], al
movzx eax, byte [esp + 3]
movzx eax, byte [eax + 0x55d580]
mov byte [esp + 3], al
movzx eax, byte [edi + 0x55d580]
mov byte [esp + 4], al
movzx eax, byte [esi + 0x55d580]
mov byte [esp + 5], al
mov eax, dword [esp + 0x34]
movzx eax, byte [eax + 0x55d580]
mov byte [esp + 6], al
mov eax, dword [esp + 0x18]
movzx eax, byte [eax + 0x55d580]
mov byte [esp + 7], al
mov eax, dword [esp + 0x1c]
mov dword [esp + 0x1c], ecx
movzx eax, byte [eax + 0x55d580]
mov byte [esp + 8], al
movzx eax, byte [edx + 0x55d580]
mov edx, esp
mov byte [esp + 9], al
mov eax, dword [esp + 0x20]
movzx eax, byte [eax + 0x55d580]
mov byte [esp + 0xa], al
movzx eax, byte [ebp + 0x55d580]
mov byte [esp + 0xb], al
mov eax, dword [esp + 0x30]
movzx eax, byte [eax + 0x55d580]
mov byte [esp + 0xc], al
mov eax, dword [esp + 0x38]
movzx eax, byte [eax + 0x55d580]
mov byte [esp + 0xd], al
mov eax, dword [esp + 0x10]
movzx eax, byte [eax + 0x55d580]
mov byte [esp + 0xe], al
mov eax, dword [esp + 0x14]
movzx eax, byte [eax + 0x55d580]
mov byte [esp + 0xf], al
lea eax, [esp + 0x40]
push eax
call fcn.00422600
add esp, 4
mov ebp, 0xfffffffc
jmp 0x422b14
movzx esi, byte [esi + 0x55d0ce]
lea edi, [esi + 0xffe0]
lea ebx, [esi + 0xdf]
cmp esi, 0x20
cmovb edi, ebx
movzx esi, di
movzx ebx, byte [esi + 0x55d230]
xor cl, al
xor cl, dl
xor cl, bl
mov byte [esp + ebp + 0x10], cl
inc ebp
je 0x422970
movzx eax, byte [esp + ebp + 4]
movzx ebx, byte [esp + ebp + 8]
movzx edi, byte [esp + ebp + 0xc]
movzx esi, byte [esp + ebp + 0x10]
test eax, eax
mov dword [esp + 0x20], ebx
je 0x422bf0
movzx ecx, byte [eax + 0x55d0ce]
lea edx, [ecx + 0xffe0]
lea ebx, [ecx + 0xdf]
cmp ecx, 0x20
cmovb edx, ebx
mov ebx, dword [esp + 0x20]
movzx ecx, dx
movzx ecx, byte [ecx + 0x55d230]
mov dword [esp + 0x10], ecx
test ebx, ebx
je 0x422c00
movzx ecx, byte [ebx + 0x55d0ce]
lea edx, [ecx + 0xff69]
lea ebx, [ecx + 0x68]
cmp ecx, 0x97
cmovb edx, ebx
movzx ecx, dx
movzx ebx, byte [ecx + 0x55d230]
test edi, edi
mov dword [esp + 0x14], edi
je 0x422c0a
movzx ecx, byte [edi + 0x55d0ce]
lea edx, [ecx + 0xffef]
lea edi, [ecx + 0xee]
cmp ecx, 0x11
cmovb edx, edi
movzx ecx, dx
movzx ecx, byte [ecx + 0x55d230]
test esi, esi
mov dword [esp + 0x18], esi
je 0x422c14
movzx edx, byte [esi + 0x55d0ce]
lea edi, [edx + 0xffc8]
lea esi, [edx + 0xc7]
cmp edx, 0x38
cmovb edi, esi
movzx edx, di
movzx edx, byte [edx + 0x55d230]
jmp 0x422c16
mov dword [esp + 0x10], 0
test ebx, ebx
jne 0x422b67
xor ebx, ebx
test edi, edi
mov dword [esp + 0x14], edi
jne 0x422b92
xor ecx, ecx
test esi, esi
mov dword [esp + 0x18], esi
jne 0x422bbd
xor edx, edx
xor bl, byte [esp + 0x10]
mov edi, dword [esp + 0x14]
xor bl, cl
xor bl, dl
test eax, eax
mov byte [esp + ebp + 4], bl
je 0x422ce0
movzx ecx, byte [eax + 0x55d0ce]
lea edx, [ecx + 0xffc8]
lea esi, [ecx + 0xc7]
cmp ecx, 0x38
cmovb edx, esi
movzx ecx, dx
movzx ecx, byte [ecx + 0x55d230]
mov dword [esp + 0x10], ecx
mov ecx, dword [esp + 0x20]
test ecx, ecx
je 0x422cf4
movzx ecx, byte [ecx + 0x55d0ce]
lea edx, [ecx + 0xffe0]
lea esi, [ecx + 0xdf]
cmp ecx, 0x20
cmovb edx, esi
movzx ecx, dx
movzx ebx, byte [ecx + 0x55d230]
test edi, edi
je 0x422cfa
movzx ecx, byte [edi + 0x55d0ce]
lea edx, [ecx + 0xff69]
lea esi, [ecx + 0x68]
cmp ecx, 0x97
cmovb edx, esi
movzx ecx, dx
movzx ecx, byte [ecx + 0x55d230]
mov edx, dword [esp + 0x18]
test edx, edx
je 0x422d04
movzx edx, byte [edx + 0x55d0ce]
lea esi, [edx + 0xffef]
lea edi, [edx + 0xee]
cmp edx, 0x11
cmovb esi, edi
movzx edx, si
movzx edx, byte [edx + 0x55d230]
jmp 0x422d06
mov dword [esp + 0x10], 0
mov ecx, dword [esp + 0x20]
test ecx, ecx
jne 0x422c61
xor ebx, ebx
test edi, edi
jne 0x422c88
xor ecx, ecx
mov edx, dword [esp + 0x18]
test edx, edx
jne 0x422cb3
xor edx, edx
xor bl, byte [esp + 0x10]
xor bl, cl
xor bl, dl
test eax, eax
mov byte [esp + ebp + 8], bl
je 0x422dd0
movzx ecx, byte [eax + 0x55d0ce]
lea edx, [ecx + 0xffef]
lea esi, [ecx + 0xee]
cmp ecx, 0x11
cmovb edx, esi
movzx ecx, dx
movzx ecx, byte [ecx + 0x55d230]
mov dword [esp + 0x10], ecx
mov ecx, dword [esp + 0x20]
mov edi, dword [esp + 0x14]
test ecx, ecx
je 0x422de8
movzx ecx, byte [ecx + 0x55d0ce]
lea edx, [ecx + 0xffc8]
lea esi, [ecx + 0xc7]
cmp ecx, 0x38
cmovb edx, esi
movzx ecx, dx
movzx ebx, byte [ecx + 0x55d230]
test edi, edi
je 0x422dee
movzx ecx, byte [edi + 0x55d0ce]
lea edx, [ecx + 0xffe0]
lea esi, [ecx + 0xdf]
cmp ecx, 0x20
cmovb edx, esi
movzx ecx, dx
movzx ecx, byte [ecx + 0x55d230]
mov edx, dword [esp + 0x18]
test edx, edx
je 0x422df8
movzx edx, byte [edx + 0x55d0ce]
lea esi, [edx + 0xff69]
lea edi, [edx + 0x68]
cmp edx, 0x97
cmovb esi, edi
movzx edx, si
movzx edx, byte [edx + 0x55d230]
jmp 0x422dfa
mov dword [esp + 0x10], 0
mov ecx, dword [esp + 0x20]
mov edi, dword [esp + 0x14]
test ecx, ecx
jne 0x422d51
xor ebx, ebx
test edi, edi
jne 0x422d78
xor ecx, ecx
mov edx, dword [esp + 0x18]
test edx, edx
jne 0x422da3
xor edx, edx
xor bl, byte [esp + 0x10]
xor bl, cl
xor bl, dl
test eax, eax
mov byte [esp + ebp + 0xc], bl
je 0x422ea0
movzx ecx, byte [eax + 0x55d0ce]
lea edx, [ecx + 0xff69]
lea esi, [ecx + 0x68]
cmp ecx, 0x97
cmovb edx, esi
movzx ecx, dx
movzx eax, byte [ecx + 0x55d230]
mov ecx, dword [esp + 0x20]
mov edi, dword [esp + 0x14]
test ecx, ecx
je 0x422eae
movzx ecx, byte [ecx + 0x55d0ce]
lea edx, [ecx + 0xffef]
lea esi, [ecx + 0xee]
cmp ecx, 0x11
cmovb edx, esi
movzx ecx, dx
movzx ecx, byte [ecx + 0x55d230]
test edi, edi
je 0x422eb4
movzx edx, byte [edi + 0x55d0ce]
lea esi, [edx + 0xffc8]
lea edi, [edx + 0xc7]
cmp edx, 0x38
cmovb esi, edi
movzx edx, si
movzx edx, byte [edx + 0x55d230]
mov esi, dword [esp + 0x18]
test esi, esi
jne 0x422ae0
jmp 0x422ec2
xor eax, eax
mov ecx, dword [esp + 0x20]
mov edi, dword [esp + 0x14]
test ecx, ecx
jne 0x422e3d
xor ecx, ecx
test edi, edi
jne 0x422e64
xor edx, edx
mov esi, dword [esp + 0x18]
test esi, esi
jne 0x422ae0
xor ebx, ebx
jmp 0x422b03
movzx eax, byte [esp + 0xc]
mov esi, dword [esp + 0x144]
movzx eax, byte [eax + 0x55d580]
movd xmm5, eax
movzx eax, byte [esp + 9]
movzx eax, byte [eax + 0x55d580]
movd xmm2, eax
movzx eax, byte [esp + 6]
punpcklbw xmm2, xmm5
movzx eax, byte [eax + 0x55d580]
movd xmm4, eax
movzx eax, byte [esp + 3]
movzx eax, byte [eax + 0x55d580]
movd xmm0, eax
movzx eax, byte [esp + 0xf]
punpcklbw xmm0, xmm4
punpcklwd xmm0, xmm2
movzx eax, byte [eax + 0x55d580]
movd xmm1, eax
movzx eax, byte [esp + 8]
movdqu xmmword [esp + 0x20], xmm1
movdqu xmm2, xmmword [esp + 0x20]
movzx eax, byte [eax + 0x55d580]
movd xmm3, eax
movzx eax, byte [esp + 5]
punpcklbw xmm3, xmm2
movzx eax, byte [eax + 0x55d580]
movd xmm7, eax
movzx eax, byte [esp + 2]
movzx eax, byte [eax + 0x55d580]
movd xmm1, eax
movzx eax, byte [esp + 0xe]
punpcklbw xmm1, xmm7
punpcklwd xmm1, xmm3
punpckldq xmm1, xmm0
movzx eax, byte [eax + 0x55d580]
movd xmm6, eax
movzx eax, byte [esp + 0xb]
movzx eax, byte [eax + 0x55d580]
movd xmm4, eax
movzx eax, byte [esp + 4]
punpcklbw xmm4, xmm6
movzx eax, byte [eax + 0x55d580]
movd xmm5, eax
movzx eax, byte [esp + 1]
movzx eax, byte [eax + 0x55d580]
movd xmm2, eax
movzx eax, byte [esp + 0xd]
punpcklbw xmm2, xmm5
punpcklwd xmm2, xmm4
movdqu xmm4, xmmword [esp + 0x40]
movzx eax, byte [eax + 0x55d580]
movd xmm7, eax
movzx eax, byte [esp + 0xa]
movzx eax, byte [eax + 0x55d580]
movd xmm3, eax
movzx eax, byte [esp + 7]
punpcklbw xmm3, xmm7
movzx eax, byte [eax + 0x55d580]
movd xmm0, eax
movzx eax, byte [esp]
movzx eax, byte [eax + 0x55d580]
movd xmm6, eax
punpcklbw xmm6, xmm0
punpcklwd xmm6, xmm3
punpckldq xmm6, xmm2
punpcklqdq xmm6, xmm1
pxor xmm6, xmm4
movdqu xmmword [esi + 1], xmm6
mov byte [esi], 0
mov eax, esi
add esp, 0x130
pop esi
pop edi
pop ebx
pop ebp
ret
lea eax, [esp + 0x3c]
mov dword [esp + 0x40], 0x55d6a8
mov dword [esp + 0x44], 1
mov dword [esp + 0x50], 0
mov dword [esp], eax
mov eax, esp
mov dword [esp + 4], fcn.00483650
mov dword [esp + 0x48], eax
mov dword [esp + 0x4c], 1
lea eax, [esp + 0x40]
push 0x55d6b0
push eax
call fcn.0051ed60
add esp, 8
ud2