Function at 0x40566e
Capabilities:
Encrypt data using aes via x86 extensions

Disassembly:
cmp byte [esi + 2], 0
dec esp
mov dword [esp + 0x48], ebp
jne 0x404d49
dec ecx
mov esp, ebp
dec eax
lea eax, [ebp*4]
dec eax
add eax, ebp
dec eax
lea ebp, [esi + eax*8]
dec eax
add ebp, 0x48
dec eax
mov ecx, esi
dec eax
add ecx, 0x40
dec eax
mov dword [esp + 0x30], ecx
call dword [0x20f268]
test al, al
je 0x404dfe
invalid
add byte [eax], al
dec eax
mov eax, dword [ebp]
dec eax
mov ebx, dword [eax]
dec eax
test ebx, ebx
jne 0x404e0d
dec eax
lea eax, [esp + 0x7f]
dec eax
mov dword [esp + 0x28], eax
dec eax
mov dword [esp + 0x20], 0x4000
dec eax
mov ecx, ebp
dec eax
mov edx, esi
inc ebp
xor eax, eax
dec esp
mov ecx, dword [esp + 0x60]
call 0x4e7bd0
dec eax
test eax, eax
je 0x405896
dec eax
mov ebx, eax
dec eax
mov ecx, eax
dec eax
and ecx, 0xffe00000
dec eax
mov edx, eax
dec eax
shr edx, 9
and edx, 0xfe0
dec eax
lea eax, [edx + ecx]
movzx ecx, byte [edx + ecx + 0x101e]
and ecx, 0x3f
dec eax
shl ecx, 5
dec eax
sub eax, ecx
dec eax
add eax, 0x1000
dec eax
mov eax, dword [eax + 0x10]
mov eax, dword [eax + 0x18]
dec eax
add eax, dword [esi + 0xa98]
dec eax
mov dword [esi + 0xa98], eax
dec eax
mov ecx, dword [esi + 0xaa0]
dec eax
cmp ecx, eax
dec eax
cmova eax, ecx
dec eax
mov dword [esi + 0xaa0], eax
dec eax
mov ecx, dword [esp + 0x30]
call dword [0x20f06e]
inc esp
mov esp, dword [esi + 0xc]
dec ecx
add esp, ebx
fadd qword [eax + 0x4800067e]
mov eax, dword [esp + 0x40]
jne 0x404e6c
cmp byte [esp + 0x38], 2
je 0x404e8d
dec eax
mov eax, dword [eax]
mov eax, dword [eax]
inc ecx
mov dword [esp + 0x10], eax
xorps xmm0, xmm0
inc ecx
movups xmmword [esp + 0x18], xmm0
inc ecx
movups xmmword [esp + 0x28], xmm0
inc ecx
movups xmmword [esp + 0x38], xmm0
inc ecx
movups xmmword [esp + 0x48], xmm0
dec ebp
mov dword [esp + 8], ebp
dec ecx
mov dword [esp], 0
dec eax
mov eax, dword [edi + 0x18]
dec eax
inc eax
js 0x4049c0
xorps xmm0, xmm0
dec eax
cvtpi2ps xmm0, mm0
jmp 0x4049d8
dec eax
mov ecx, eax
dec eax
shr ecx, 1
and eax, 1
dec eax
or eax, ecx
xorps xmm0, xmm0
dec eax
cvtpi2ps xmm0, mm0
addss xmm0, xmm0
dec eax
lea eax, [edi + 0x10]
dec eax
mov dword [esp + 0x40], eax
dec esp
mov ecx, esi
dec eax
shr ecx, 1
inc esp
mov eax, esi
and eax, 1
dec eax
or eax, ecx
dec ebp
test esi, esi
js 0x4049fc
dec ecx
cvtpi2ps xmm1, mm6
jmp 0x404a05
dec eax
cvtpi2ps xmm1, mm0
addss xmm1, xmm1
movss xmm2, dword [edi + 0x20]
je 0x404a19
mulss xmm1, xmm2
ucomiss xmm0, xmm1
jbe 0x404ca1
divss xmm0, xmm2
call 0x53c960
dec eax
cvttps2pi mm1, xmm0
dec eax
mov edx, ecx
subss xmm0, dword [0x1f82ee]
dec eax
sar edx, 0x3f
dec eax
cvttps2pi mm0, xmm0
dec eax
and eax, edx
dec eax
or eax, ecx
dec ebx
lea edx, [esi + esi]
mov ecx, 1
dec ecx
cmp esi, 3
jae 0x404f06
dec eax
or ecx, edx
dec eax
cmp ecx, eax
dec eax
cmovbe ecx, eax
mov ebp, 2
dec eax
cmp ecx, 1
jne 0x404f17
dec eax
mov ebx, dword [edi + 8]
dec eax
cmp ebp, ebx
jbe 0x404f2c
dec eax
mov esi, ebp
dec eax
mov dword [esp + 0x50], edi
call 0x4cf4a0
dec eax
mov dword [esp + 0x38], esi
dec eax
lea ecx, [esi*8]
dec eax
test ecx, ecx
mov edx, 1
dec eax
cmovne edx, ecx
inc esp
mov esi, dword [eax + 8]
dec ecx
add esi, edx
dec ecx
cmp esi, ecx
jb 0x404f52
dec eax
mov esi, eax
dec ecx
mov edi, eax
cmp byte [esi + 3], 0
dec esp
mov ebp, esi
jne 0x404ad6
dec ecx
lea ecx, [esi - 0x101]
dec esp
mov ebp, esi
dec eax
cmp ecx, 0x7fefe
jbe 0x405312
mov edx, 0x40
mov ecx, 0x40
dec eax
test ebp, ebp
je 0x404aed
dec eax
bsr ecx, ebp
dec eax
xor ecx, 0x3f
dec eax
sub edx, ecx
dec eax
lea eax, [0x1f7fb9]
mov cl, byte [edx + eax]
dec eax
mov eax, ebp
dec eax
shr eax, cl
and eax, 3
dec eax
lea ecx, [0x1f7ff6]
dec eax
and ebp, dword [ecx + edx*8]
dec eax
lea eax, [eax + edx*4]
dec eax
cmp ebp, 1
dec eax
sbb eax, 0xffffffff
dec eax
lea ecx, [0x1f7b7f]
movzx ebx, word [ecx + eax*2 + 0x200]
mov byte [esp + 0x7f], 0
dec eax
mov eax, 0xaaaaaaaa
stosb byte es:[edi], al
stosb byte es:[edi], al
stosb byte es:[edi], al
stosb byte es:[edi], al
dec eax
mov dword [esp + 0x70], eax
inc ecx
mov al, byte [edi]
mov byte [esp + 0x60], al
cmp al, 2
je 0x404f55
inc ecx
cmp byte [edi + 2], 0
jne 0x404f6d
dec eax
lea eax, [ebx + ebx*4]
dec esp
lea ebp, [esi + eax*8]
dec ecx
add ebp, 0x48
dec eax
add esi, 0x40
dec eax
mov dword [esp + 0x30], esi
dec eax
mov ecx, esi
call dword [0x20ef9b]
test al, al
je 0x40501f
dec ecx
mov eax, dword [ebp]
dec eax
mov ebp, dword [eax]
dec eax
test ebp, ebp
dec eax
mov ecx, dword [esp + 0x30]
je 0x40502e
mov byte [esp + 0x7f], 0
dec eax
mov esi, dword [ebp]
dec eax
test esi, esi
je 0x40509b
dec eax
lea edx, [ebx + ebx*4]
dec eax
bswap esi
inc ecx
mov ebx, dword [edi + edx*8 + 0x60]
dec eax
mov edx, esi
dec eax
xor edx, ebp
dec eax
cmp edx, 0x1fffff
ja 0x404cfc
mov edx, esi
and edx, 0x1fc000
je 0x404cfc
prefetcht0 byte [esi]
dec eax
mov dword [eax], esi
mov ebx, dword [eax + 0x18]
lea edx, [ebx + 2]
and edx, 0x3ffe
and ebx, 0xffffc001
or ebx, edx
mov dword [eax + 0x18], ebx
dec eax
mov eax, dword [eax + 0x10]
adc byte [ebx + 0x3491840], cl
xchg dword [eax + 0x4900000a], ebx
mov dword [edi + 0xa98], eax
movaps xmm0, xmmword [0x1f733d]
dec eax
lea esi, [esp + 0x80]
movaps xmmword [esi], xmm0
dec esp
mov eax, dword [ebp]
dec eax
lea edx, [0x1f7977]
dec eax
mov ecx, esi
call 0x55cae0
dec eax
mov ecx, esi
call fcn.00408770
dec eax
mov ecx, ebx
call 0x55cbc0
mov al, byte [0x222d82]
test al, 1
je 0x404871
call 0x55cf30
jmp 0x404871
dec eax
mov dword [esp + 0x30], ebp
mov eax, dword [0x225994]
dec eax
mov ecx, dword [0x58]
dec eax
mov eax, dword [ecx + eax*8]
dec eax
mov ebp, dword [eax + 0x120]
dec eax
cmp ebp, 2
jb 0x40555a
dec eax
inc dword [ebp + 8]
cmp word [esp + 0x30], 0x10
jae 0x4055d5
dec esp
mov esp, dword [esp + 0x30]
dec ecx
shl esp, 4
dec ebp
lea ebp, [esp + ebp]
dec ecx
add ebp, 0x58
dec ecx
mov ebx, dword [ebp]
dec eax
test ebx, ebx
je 0x405752
dec eax
inc dword [ebp + 0x10]
inc edx
movzx eax, word [ebp + 0x62]
dec eax
mov dword [esp + 0x58], eax
dec eax
mov eax, dword [ebx]
dec eax
test eax, eax
je 0x4053c0
dec eax
bswap eax
test eax, 0x1fc000
je 0x4057d4
prefetcht0 byte [eax]
dec ecx
lea ecx, [esp + ebp]
dec eax
add ecx, 0x62
dec byte [ecx - 2]
dec ecx
mov dword [ebp], eax
dec eax
mov eax, dword [esp + 0x58]
dec eax
mov dword [esp + 0x70], eax
movzx eax, word [ecx]
sub dword [ebp], eax
dec eax
test ebx, ebx
dec esp
mov ebp, dword [esp + 0x48]
jne 0x40495a
jmp 0x4055dd
dec eax
mov ecx, dword [esp + 0x30]
call 0x4e7b60
jmp 0x4048b0
mov byte [esp + 0x7f], 0
dec eax
mov ecx, dword [ebx]
dec eax
test ecx, ecx
je 0x4053b9
dec ebx
lea edx, [esp]
dec eax
bswap ecx
mov ebp, dword [esi + edx*8 + 0x60]
dec eax
mov edx, ecx
dec eax
xor edx, ebx
dec eax
cmp edx, 0x1fffff
ja 0x4057a0
mov edx, ecx
and edx, 0x1fc000
je 0x4057a0
prefetcht0 byte [ecx]
dec eax
mov dword [eax], ecx
mov ecx, dword [eax + 0x18]
lea edx, [ecx + 2]
and edx, 0x3ffe
and ecx, 0xffffc001
or ecx, edx
mov dword [eax + 0x18], ecx
jmp 0x404925
dec eax
mov eax, ebx
dec eax
shl eax, 0x34
je 0x405574
dec eax
lea eax, [ebx - 4]
mov dword [eax], 1
dec eax
mov eax, dword [esp + 0x40]
jmp 0x404970
dec eax
mov eax, 0
invalid
dec ecx
lea ebp, [esi - 1]
xor ecx, ecx
dec ecx
test esi, ebp
setne cl
jmp 0x404a54
dec eax
lea eax, [ecx - 1]
dec eax
test ecx, eax
jne 0x405361
dec eax
mov ebp, ecx
jmp 0x404a6d
jae 0x404c82
dec ebp
mov esi, ebp
dec ecx
mov edi, edi
dec eax
mov eax, dword [edi + 0x18]
dec eax
test eax, eax
js 0x4053ce
xorps xmm0, xmm0
dec eax
cvtpi2ps xmm0, mm0
jmp 0x4053e6
int3
mov al, byte [0x222b5e]
test al, 1
je 0x404b4c
call 0x55cf30
jmp 0x404b4c
dec eax
mov dword [esp + 0x30], esi
mov eax, dword [0x225770]
dec eax
mov ecx, dword [0x58]
dec eax
mov eax, dword [ecx + eax*8]
dec eax
mov edi, dword [eax + 0x120]
dec eax
cmp edi, 2
jb 0x405598
dec eax
inc dword [edi + 8]
cmp bx, 0x10
jae 0x405693
dec eax
mov eax, ebx
dec eax
shl eax, 4
dec ecx
mov ebp, eax
dec eax
add eax, edi
dec eax
add eax, 0x58
dec eax
mov esi, eax
dec eax
mov eax, dword [eax]
dec eax
test eax, eax
je 0x405779
dec eax
mov ebp, eax
dec eax
inc dword [edi + 0x10]
inc edx
movzx eax, word [edi + ebp + 0x62]
dec eax
mov dword [esp + 0x58], eax
dec eax
mov eax, dword [ebp]
dec eax
test eax, eax
je 0x4053c7
dec eax
bswap eax
test eax, 0x1fc000
je 0x4057eb
prefetcht0 byte [eax]
dec edx
lea ecx, [edi + ebp]
dec eax
add ecx, 0x62
dec byte [ecx - 2]
dec eax
mov dword [esi], eax
dec eax
mov eax, dword [esp + 0x58]
dec eax
mov dword [esp + 0x70], eax
movzx eax, word [ecx]
sub dword [edi], eax
dec eax
test ebp, ebp
jne 0x404c1e
jmp 0x40569b
dec eax
mov ecx, dword [esp + 0x30]
call 0x4e7b60
jmp 0x404b7d
dec eax
lea eax, [esp + 0x7f]
dec eax
mov dword [esp + 0x28], eax
dec eax
mov dword [esp + 0x20], 0x4000
dec esp
mov ecx, ebp
dec esp
mov edx, edi
inc ebp
xor eax, eax
dec ebp
mov ecx, esi
call 0x4e7bd0
dec eax
test eax, eax
je 0x405917
dec eax
mov ebp, eax
dec eax
mov ecx, eax
dec eax
and ecx, 0xffe00000
dec eax
mov edx, eax
dec eax
shr edx, 9
and edx, 0xfe0
dec eax
lea eax, [edx + ecx]
movzx ecx, byte [edx + ecx + 0x101e]
and ecx, 0x3f
dec eax
shl ecx, 5
dec eax
sub eax, ecx
dec eax
add eax, 0x1000
dec eax
mov ecx, dword [esp + 0x30]
jmp 0x404bee
xor esi, esi
jmp 0x404bd4
inc esp
mov eax, esi
dec eax
je 0x405550
bsr ecx, eax
xor ecx, 0x1f
neg cl
mov eax, 1
shl eax, cl
dec eax
arpl ax, cx
dec eax
mov eax, ecx
dec eax
shr eax, 1
dec eax
lea ebp, [eax + eax*4]
dec eax
shr ebp, 2
dec esp
cmp ebp, esi
dec eax
cmovb ebp, ecx
jmp 0x404ad6
call 0x50ef10
dec eax
mov ebp, eax
jmp 0x404a6d
xor ecx, ecx
jmp 0x404e4d
xor eax, eax
jmp 0x404dcc
xor eax, eax
jmp 0x404ff4
dec eax
mov ecx, eax
dec eax
shr ecx, 1
and eax, 1
dec eax
or eax, ecx
xorps xmm0, xmm0
dec eax
cvtpi2ps xmm0, mm0
addss xmm0, xmm0
inc ecx
divps xmm0, xmmword [edi + 0x20]
call 0x53c960
dec eax
cvttps2pi mm0, xmm0
dec eax
mov ecx, eax
subss xmm0, dword [0x1f791f]
dec eax
cvttps2pi mm2, xmm0
dec eax
sar ecx, 0x3f
dec eax
and edx, ecx
dec eax
or edx, eax
dec eax
mov eax, edx
dec eax
cmp ebx, 3
jb 0x4054ea
dec eax
mov edx, ebx
dec eax
shr edx, 1
dec eax
mov ecx, 0x55555555
push ebp
push ebp
push ebp
push ebp
dec eax
and ecx, edx
dec eax
mov esi, ebx
dec eax
sub esi, ecx
dec eax
mov ecx, 0x33333333
xor esi, dword [ebx]
xor esi, dword [ebx]
dec eax
mov edx, esi
dec eax
shr edx, 2
dec eax
and esi, ecx
dec eax
and edx, ecx
dec eax
add edx, esi
dec eax
mov esi, edx
dec eax
shr esi, 4
dec eax
add esi, edx
dec eax
mov ecx, 0xf0f0f0f
invalid
dec eax
mov ecx, eax
call 0x50ef10
dec eax
mov esi, eax
dec eax
cmp ebp, eax
dec eax
cmova esi, ebp
dec eax
cmp esi, ebx
dec ebp
mov ebp, esi
dec esp
mov edi, edi
jae 0x404c82
dec eax
test esi, esi
jne 0x404a7d
dec eax
lea esi, [edi + 8]
dec eax
mov edx, dword [edi]
dec eax
mov dword [edi], 0
dec eax
test edx, edx
je 0x405534
dec esp
mov eax, dword [esi]
dec eax
mov ecx, dword [esp + 0x40]
call fcn.00405960
dec eax
mov dword [esi], 0
dec ebp
mov ebp, esi
dec esp
mov edi, edi
jmp 0x404c82
mov ecx, 0x20
jmp 0x405323
dec esp
lea eax, [esp + 0x70]
dec eax
mov ecx, esi
dec eax
mov edx, dword [esp + 0x30]
call 0x423660
dec eax
mov ebx, eax
jmp 0x404deb
dec eax
mov eax, ebx
dec eax
and eax, 0xffe00000
dec eax
mov ecx, ebx
dec eax
shr ecx, 9
and ecx, 0xff8
dec eax
add eax, ecx
dec eax
add eax, 0x2000
jmp 0x404e7d
dec esp
lea eax, [esp + 0x70]
dec esp
mov ecx, edi
mov edx, ebx
call 0x423660
dec eax
mov ebp, eax
jmp 0x405011
dec eax
inc dword [ebp + 0x28]
dec eax
inc dword [ebp + 0x18]
dec eax
mov eax, dword [esp + 0x30]
dec eax
lea ebp, [eax + eax*4]
dec esp
lea esp, [esi + ebp*8]
dec ecx
add esp, 0x48
dec eax
mov ecx, esi
dec eax
add ecx, 0x40
dec eax
mov dword [esp + 0x30], ecx
call dword [0x20e510]
test al, al
jne 0x40560e
dec eax
mov ecx, dword [esp + 0x30]
call 0x4e7b60
dec ecx
mov eax, dword [esp]
dec eax
mov ebx, dword [eax]
dec eax
test ebx, ebx
je 0x405830
mov byte [esp + 0x7f], 0
dec eax
mov ecx, dword [ebx]
dec eax
test ecx, ecx
je 0x405822
dec eax
bswap ecx
mov ebp, dword [esi + ebp*8 + 0x60]
dec eax
mov edx, ecx
dec eax
xor edx, ebx
dec eax
cmp edx, 0x1fffff
ja 0x4057a0
mov edx, ecx
and edx, 0x1fc000
je 0x4057a0
prefetcht0 byte [ecx]
dec eax
mov dword [eax], ecx
mov ecx, dword [eax + 0x18]
lea edx, [ecx + 2]
and edx, 0x3ffe
and ecx, 0xffffc001
dec dword [ecx]
ror dword [ecx - 0x74b7e7b8], 1
inc eax
adc byte [ebx + 0x3481840], cl
xchg byte [eax + 0x4800000a], bl
mov dword [esi + 0xa98], eax
dec esp
mov ebp, dword [esp + 0x48]
jmp 0x40493a
dec eax
inc dword [edi + 0x28]
dec eax
inc dword [edi + 0x18]
dec eax
lea ebx, [ebx + ebx*4]
dec eax
mov ecx, dword [esp + 0x30]
dec esp
lea ebp, [ecx + ebx*8]
dec ecx
add ebp, 0x48
dec eax
add ecx, 0x40
dec eax
mov dword [esp + 0x30], ecx
call dword [0x20e455]
test al, al
jne 0x4056c9
dec eax
mov ecx, dword [esp + 0x30]
call 0x4e7b60
dec ecx
mov eax, dword [ebp]
dec eax
mov ecx, dword [eax]
dec eax
test ecx, ecx
je 0x4058b3
dec eax
mov ebp, ecx
mov byte [esp + 0x7f], 0
dec eax
mov ecx, dword [ecx]
dec eax
test ecx, ecx
dec eax
inc dword [ebp + 0x20]
dec eax
inc dword [ebp + 0x18]
dec eax
mov ecx, ebp
dec eax
mov edx, dword [esp + 0x30]
call 0x4e7920
dec ecx
mov ebx, dword [ebp]
dec eax
test ebx, ebx
jne 0x404da4
jmp 0x4055dd
dec eax
inc dword [edi + 0x20]
dec eax
inc dword [edi + 0x18]
dec eax
mov ecx, edi
dec eax
mov edx, ebx
call 0x4e7920
dec eax
mov eax, dword [esi]
dec eax
mov ebp, eax
dec eax
test eax, eax
jne 0x404fcb
jmp 0x40569b
movaps xmm0, xmmword [0x1f6899]
dec eax
lea esi, [esp + 0x80]
movaps xmmword [esi], xmm0
dec esp
mov eax, dword [ebx]
dec eax
lea edx, [0x1f6ed4]
dec eax
mov ecx, esi
call 0x55cae0
dec eax
mov ecx, esi
call fcn.00408770
dec eax
mov ecx, ebp
call 0x55cbc0
movaps xmm0, xmmword [0x1f6865]
dec eax
lea esi, [esp + 0x80]
movaps xmmword [esi], xmm0
dec esp
mov eax, dword [ebx]
jmp 0x405801
movaps xmm0, xmmword [0x1f684e]
dec eax
lea esi, [esp + 0x80]
movaps xmmword [esi], xmm0
dec esp
mov eax, dword [ebp + 0x4d]
pop edx
js 0x405804
add dword [eax], eax
add byte [eax], al
add al, 0
add byte [eax], al
add byte [eax], al
add byte [eax], al
add byte [eax], al
add byte [eax], al
add byte [eax], al
add byte [eax], al
inc eax
add byte [eax], al
add byte [eax], al
add byte [eax], al
add byte [eax], al
add byte [eax], al
add byte [eax], al
add byte [eax], al
add byte [eax], al
add byte [eax], al
add byte [eax], al
add byte [eax], al
add byte [eax], al
add byte [eax], al
add byte [eax], al
add byte [eax], al
add byte [eax], al
add byte [eax], al
add byte [eax], al
add byte [eax], al
add byte [eax], al
add byte [eax], al
js 0x40583e
or al, 0
add byte [eax], al
add al, byte [eax]
add byte [0x200], al
add byte [eax], al
push eax
ltr word [ebp + ebp*2]