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

Disassembly:
push ebp
push edi
push esi
push ebx
sub esp, 0x1c
mov ebp, dword [esp + 0x40]
mov eax, dword [esp + 0x30]
mov edx, dword [esp + 0x34]
mov esi, dword [esp + 0x38]
test ebp, ebp
mov ecx, dword [eax + 0x1e0]
mov ebx, dword [eax + 0x1e4]
jne 0x551330
movdqu xmm5, xmmword [eax + 0x40]
movdqu xmm6, xmmword [eax + 0x50]
mov edi, dword [esp + 0x3c]
test edi, edi
je 0x5512f2
mov edi, ecx
and edi, 3
test edi, edi
lea edi, [eax + 0x2f0]
mov dword [esp + 0xc], edi
je 0x551487
lea ebp, [ecx + 1]
mov dword [esp + 0x30], eax
mov dword [esp], ebp
mov ebp, eax
jmp 0x5511f1
mov edi, ecx
add dword [esp], 1
and edi, 3
test edi, edi
je 0x551485
add ecx, 1
mov eax, dword [esp]
adc ebx, 0
tzcnt edi, eax
add edi, 0xa
shl edi, 4
movdqu xmm1, xmmword [ebp + edi]
movdqu xmm0, xmmword [esi]
pxor xmm5, xmm1
pxor xmm0, xmm5
mov edi, dword [ebp + 0x3e0]
mov eax, dword [esp + 0xc]
movdqa xmm1, xmmword [eax]
pxor xmm0, xmm1
movdqa xmm1, xmmword [eax + 0x10]
aesdec xmm0, xmm1
movdqa xmm1, xmmword [eax + 0x20]
aesdec xmm0, xmm1
movdqa xmm1, xmmword [eax + 0x30]
aesdec xmm0, xmm1
movdqa xmm1, xmmword [eax + 0x40]
aesdec xmm0, xmm1
movdqa xmm1, xmmword [eax + 0x50]
aesdec xmm0, xmm1
movdqa xmm1, xmmword [eax + 0x60]
aesdec xmm0, xmm1
movdqa xmm1, xmmword [eax + 0x70]
aesdec xmm0, xmm1
movdqa xmm1, xmmword [eax + 0x80]
aesdec xmm0, xmm1
movdqa xmm1, xmmword [eax + 0x90]
aesdec xmm0, xmm1
movdqa xmm1, xmmword [eax + 0xa0]
cmp edi, 0xa
je 0x5512ce
aesdec xmm0, xmm1
movdqa xmm1, xmmword [eax + 0xb0]
aesdec xmm0, xmm1
movdqa xmm1, xmmword [eax + 0xc0]
cmp edi, 0xc
je 0x5512ce
aesdec xmm0, xmm1
movdqa xmm1, xmmword [eax + 0xd0]
aesdec xmm0, xmm1
movdqa xmm1, xmmword [eax + 0xe0]
aesdeclast xmm0, xmm1
pxor xmm0, xmm5
pxor xmm6, xmm0
movdqu xmmword [edx], xmm0
add esi, 0x10
add edx, 0x10
sub dword [esp + 0x3c], 1
jne 0x5511e0
mov eax, ebp
mov dword [eax + 0x1e0], ecx
mov dword [eax + 0x1e4], ebx
movdqu xmmword [eax + 0x40], xmm5
movdqu xmmword [eax + 0x50], xmm6
pxor xmm0, xmm0
pxor xmm1, xmm1
pxor xmm2, xmm2
pxor xmm3, xmm3
pxor xmm4, xmm4
pxor xmm5, xmm5
pxor xmm6, xmm6
add esp, 0x1c
pop ebx
pop esi
pop edi
pop ebp
ret
movdqu xmm5, xmmword [eax + 0x40]
movdqu xmm6, xmmword [eax + 0x50]
mov edi, dword [esp + 0x3c]
test edi, edi
je 0x5512f2
mov edi, ecx
and edi, 3
test edi, edi
lea edi, [eax + 0x200]
mov dword [esp + 0xc], edi
je 0x551882
lea ebp, [ecx + 1]
mov dword [esp + 0x30], eax
mov dword [esp], ebp
mov ebp, eax
jmp 0x551381
mov edi, ecx
add dword [esp], 1
and edi, 3
test edi, edi
je 0x551880
add ecx, 1
mov eax, dword [esp]
adc ebx, 0
tzcnt edi, eax
add edi, 0xa
shl edi, 4
movdqu xmm1, xmmword [ebp + edi]
movdqu xmm0, xmmword [esi]
pxor xmm5, xmm1
pxor xmm6, xmm0
pxor xmm0, xmm5
mov edi, dword [ebp + 0x3e0]
mov eax, dword [esp + 0xc]
movdqa xmm1, xmmword [eax]
pxor xmm0, xmm1
movdqa xmm1, xmmword [eax + 0x10]
aesenc xmm0, xmm1
movdqa xmm1, xmmword [eax + 0x20]
aesenc xmm0, xmm1
movdqa xmm1, xmmword [eax + 0x30]
aesenc xmm0, xmm1
movdqa xmm1, xmmword [eax + 0x40]
aesenc xmm0, xmm1
movdqa xmm1, xmmword [eax + 0x50]
aesenc xmm0, xmm1
movdqa xmm1, xmmword [eax + 0x60]
aesenc xmm0, xmm1
movdqa xmm1, xmmword [eax + 0x70]
aesenc xmm0, xmm1
movdqa xmm1, xmmword [eax + 0x80]
aesenc xmm0, xmm1
movdqa xmm1, xmmword [eax + 0x90]
aesenc xmm0, xmm1
movdqa xmm1, xmmword [eax + 0xa0]
cmp edi, 0xa
je 0x551462
aesenc xmm0, xmm1
movdqa xmm1, xmmword [eax + 0xb0]
aesenc xmm0, xmm1
movdqa xmm1, xmmword [eax + 0xc0]
cmp edi, 0xc
je 0x551462
aesenc xmm0, xmm1
movdqa xmm1, xmmword [eax + 0xd0]
aesenc xmm0, xmm1
movdqa xmm1, xmmword [eax + 0xe0]
aesenclast xmm0, xmm1
pxor xmm0, xmm5
movdqu xmmword [edx], xmm0
add esi, 0x10
add edx, 0x10
sub dword [esp + 0x3c], 1
jne 0x551370
jmp 0x5512f0
mov eax, ebp
cmp dword [esp + 0x3c], 3
jbe 0x551756
add ecx, 4
mov dword [esp + 0x34], edx
mov dword [esp + 0x38], esi
adc ebx, 0
mov dword [esp], ecx
mov dword [esp + 4], ebx
mov ebx, ecx
mov ecx, dword [esp + 0x3c]
lea ebp, [ebx + 4]
lea edi, [ecx - 4]
shr edi, 2
lea ecx, [ebp + edi*4]
mov dword [esp + 0x10], edi
mov edi, esi
mov dword [esp + 0x14], ecx
mov ecx, edx
mov esi, dword [esp + 0x14]
mov edx, dword [esp + 0xc]
jmp 0x5514d3
add ebp, 4
tzcnt ebx, ebx
movdqu xmm0, xmmword [eax + 0xa0]
movdqu xmm1, xmmword [edi]
pxor xmm5, xmm0
pxor xmm1, xmm5
movdqu xmmword [ecx], xmm5
movdqu xmm0, xmmword [eax + 0xb0]
movdqu xmm2, xmmword [edi + 0x10]
pxor xmm5, xmm0
pxor xmm2, xmm5
movdqu xmmword [ecx + 0x10], xmm5
movdqu xmm0, xmmword [eax + 0xa0]
movdqu xmm3, xmmword [edi + 0x20]
pxor xmm5, xmm0
pxor xmm3, xmm5
movdqu xmmword [ecx + 0x20], xmm5
add ebx, 0xa
shl ebx, 4
movdqu xmm0, xmmword [eax + ebx]
movdqu xmm4, xmmword [edi + 0x30]
pxor xmm5, xmm0
pxor xmm4, xmm5
mov ebx, dword [eax + 0x3e0]
movdqa xmm0, xmmword [edx]
pxor xmm1, xmm0
pxor xmm2, xmm0
pxor xmm3, xmm0
pxor xmm4, xmm0
movdqa xmm0, xmmword [edx + 0x10]
aesdec xmm1, xmm0
aesdec xmm2, xmm0
aesdec xmm3, xmm0
aesdec xmm4, xmm0
movdqa xmm0, xmmword [edx + 0x20]
aesdec xmm1, xmm0
aesdec xmm2, xmm0
aesdec xmm3, xmm0
aesdec xmm4, xmm0
movdqa xmm0, xmmword [edx + 0x30]
aesdec xmm1, xmm0
aesdec xmm2, xmm0
aesdec xmm3, xmm0
aesdec xmm4, xmm0
movdqa xmm0, xmmword [edx + 0x40]
aesdec xmm1, xmm0
aesdec xmm2, xmm0
aesdec xmm3, xmm0
aesdec xmm4, xmm0
movdqa xmm0, xmmword [edx + 0x50]
aesdec xmm1, xmm0
aesdec xmm2, xmm0
aesdec xmm3, xmm0
aesdec xmm4, xmm0
movdqa xmm0, xmmword [edx + 0x60]
aesdec xmm1, xmm0
aesdec xmm2, xmm0
aesdec xmm3, xmm0
aesdec xmm4, xmm0
movdqa xmm0, xmmword [edx + 0x70]
aesdec xmm1, xmm0
aesdec xmm2, xmm0
aesdec xmm3, xmm0
aesdec xmm4, xmm0
movdqa xmm0, xmmword [edx + 0x80]
aesdec xmm1, xmm0
aesdec xmm2, xmm0
aesdec xmm3, xmm0
aesdec xmm4, xmm0
movdqa xmm0, xmmword [edx + 0x90]
aesdec xmm1, xmm0
aesdec xmm2, xmm0
aesdec xmm3, xmm0
aesdec xmm4, xmm0
movdqa xmm0, xmmword [edx + 0xa0]
cmp ebx, 0xa
je 0x5516be
aesdec xmm1, xmm0
aesdec xmm2, xmm0
aesdec xmm3, xmm0
aesdec xmm4, xmm0
movdqa xmm0, xmmword [edx + 0xb0]
aesdec xmm1, xmm0
aesdec xmm2, xmm0
aesdec xmm3, xmm0
aesdec xmm4, xmm0
movdqa xmm0, xmmword [edx + 0xc0]
cmp ebx, 0xc
je 0x5516be
aesdec xmm1, xmm0
aesdec xmm2, xmm0
aesdec xmm3, xmm0
aesdec xmm4, xmm0
movdqa xmm0, xmmword [edx + 0xd0]
aesdec xmm1, xmm0
aesdec xmm2, xmm0
aesdec xmm3, xmm0
aesdec xmm4, xmm0
movdqa xmm0, xmmword [edx + 0xe0]
aesdeclast xmm1, xmm0
aesdeclast xmm2, xmm0
aesdeclast xmm3, xmm0
aesdeclast xmm4, xmm0
movdqu xmm0, xmmword [ecx]
pxor xmm1, xmm0
movdqu xmmword [ecx], xmm1
movdqu xmm0, xmmword [ecx + 0x10]
pxor xmm2, xmm0
movdqu xmmword [ecx + 0x10], xmm2
movdqu xmm0, xmmword [ecx + 0x20]
pxor xmm3, xmm0
movdqu xmmword [ecx + 0x20], xmm3
pxor xmm4, xmm5
movdqu xmmword [ecx + 0x30], xmm4
pxor xmm6, xmm1
pxor xmm6, xmm2
pxor xmm6, xmm3
pxor xmm6, xmm4
add ecx, 0x40
add edi, 0x40
cmp ebp, esi
mov ebx, ebp
jne 0x5514d0
mov edi, dword [esp + 0x10]
xor ebx, ebx
mov edx, dword [esp + 0x34]
mov esi, dword [esp + 0x38]
mov ecx, edi
shld ebx, edi, 2
shl ecx, 2
add ecx, dword [esp]
adc ebx, dword [esp + 4]
add edi, 1
shl edi, 6
add edx, edi
add esi, edi
and dword [esp + 0x3c], 3
je 0x5512f2
mov edi, dword [esp + 0x3c]
add ecx, 1
mov ebp, dword [esp + 0xc]
adc ebx, 0
mov dword [esp], ecx
mov dword [esp + 4], ebx
mov ebx, ecx
add edi, ecx
nop
tzcnt ecx, ebx
add ecx, 0xa
shl ecx, 4
movdqu xmm1, xmmword [eax + ecx]
movdqu xmm0, xmmword [esi]
pxor xmm5, xmm1
pxor xmm0, xmm5
mov ecx, dword [eax + 0x3e0]
movdqa xmm1, xmmword [ebp]
pxor xmm0, xmm1
movdqa xmm1, xmmword [ebp + 0x10]
aesdec xmm0, xmm1
movdqa xmm1, xmmword [ebp + 0x20]
aesdec xmm0, xmm1
movdqa xmm1, xmmword [ebp + 0x30]
aesdec xmm0, xmm1
movdqa xmm1, xmmword [ebp + 0x40]
aesdec xmm0, xmm1
movdqa xmm1, xmmword [ebp + 0x50]
aesdec xmm0, xmm1
movdqa xmm1, xmmword [ebp + 0x60]
aesdec xmm0, xmm1
movdqa xmm1, xmmword [ebp + 0x70]
aesdec xmm0, xmm1
movdqa xmm1, xmmword [ebp + 0x80]
aesdec xmm0, xmm1
movdqa xmm1, xmmword [ebp + 0x90]
aesdec xmm0, xmm1
movdqa xmm1, xmmword [ebp + 0xa0]
cmp ecx, 0xa
je 0x551840
aesdec xmm0, xmm1
movdqa xmm1, xmmword [ebp + 0xb0]
aesdec xmm0, xmm1
movdqa xmm1, xmmword [ebp + 0xc0]
cmp ecx, 0xc
je 0x551840
aesdec xmm0, xmm1
movdqa xmm1, xmmword [ebp + 0xd0]
aesdec xmm0, xmm1
movdqa xmm1, xmmword [ebp + 0xe0]
aesdeclast xmm0, xmm1
pxor xmm0, xmm5
pxor xmm6, xmm0
movdqu xmmword [edx], xmm0
add ebx, 1
add esi, 0x10
add edx, 0x10
cmp ebx, edi
jne 0x551770
mov edx, dword [esp + 0x3c]
xor ebx, ebx
lea ecx, [edx - 1]
add ecx, dword [esp]
adc ebx, dword [esp + 4]
jmp 0x5512f2
mov eax, ebp
cmp dword [esp + 0x3c], 3
jbe 0x551b56
add ecx, 4
mov dword [esp + 0x34], edx
mov dword [esp + 0x38], esi
adc ebx, 0
mov dword [esp], ecx
mov dword [esp + 4], ebx
mov ebx, ecx
mov ecx, dword [esp + 0x3c]
lea ebp, [ebx + 4]
lea edi, [ecx - 4]
shr edi, 2
lea ecx, [ebp + edi*4]
mov dword [esp + 0x10], edi
mov edi, esi
mov dword [esp + 0x14], ecx
mov ecx, edx
mov esi, dword [esp + 0x14]
mov edx, dword [esp + 0xc]
jmp 0x5518d3
add ebp, 4
tzcnt ebx, ebx
movdqu xmm0, xmmword [eax + 0xa0]
movdqu xmm1, xmmword [edi]
pxor xmm5, xmm0
pxor xmm6, xmm1
pxor xmm1, xmm5
movdqu xmmword [ecx], xmm5
movdqu xmm0, xmmword [eax + 0xb0]
movdqu xmm2, xmmword [edi + 0x10]
pxor xmm5, xmm0
pxor xmm6, xmm2
pxor xmm2, xmm5
movdqu xmmword [ecx + 0x10], xmm5
movdqu xmm0, xmmword [eax + 0xa0]
movdqu xmm3, xmmword [edi + 0x20]
pxor xmm5, xmm0
pxor xmm6, xmm3
pxor xmm3, xmm5
movdqu xmmword [ecx + 0x20], xmm5
add ebx, 0xa
shl ebx, 4
movdqu xmm0, xmmword [eax + ebx]
movdqu xmm4, xmmword [edi + 0x30]
pxor xmm5, xmm0
pxor xmm6, xmm4
pxor xmm4, xmm5
mov ebx, dword [eax + 0x3e0]
movdqa xmm0, xmmword [edx]
pxor xmm1, xmm0
pxor xmm2, xmm0
pxor xmm3, xmm0
pxor xmm4, xmm0
movdqa xmm0, xmmword [edx + 0x10]
aesenc xmm1, xmm0
aesenc xmm2, xmm0
aesenc xmm3, xmm0
aesenc xmm4, xmm0
movdqa xmm0, xmmword [edx + 0x20]
aesenc xmm1, xmm0
aesenc xmm2, xmm0
aesenc xmm3, xmm0
aesenc xmm4, xmm0
movdqa xmm0, xmmword [edx + 0x30]
aesenc xmm1, xmm0
aesenc xmm2, xmm0
aesenc xmm3, xmm0
aesenc xmm4, xmm0
movdqa xmm0, xmmword [edx + 0x40]
aesenc xmm1, xmm0
aesenc xmm2, xmm0
aesenc xmm3, xmm0
aesenc xmm4, xmm0
movdqa xmm0, xmmword [edx + 0x50]
aesenc xmm1, xmm0
aesenc xmm2, xmm0
aesenc xmm3, xmm0
aesenc xmm4, xmm0
movdqa xmm0, xmmword [edx + 0x60]
aesenc xmm1, xmm0
aesenc xmm2, xmm0
aesenc xmm3, xmm0
aesenc xmm4, xmm0
movdqa xmm0, xmmword [edx + 0x70]
aesenc xmm1, xmm0
aesenc xmm2, xmm0
aesenc xmm3, xmm0
aesenc xmm4, xmm0
movdqa xmm0, xmmword [edx + 0x80]
aesenc xmm1, xmm0
aesenc xmm2, xmm0
aesenc xmm3, xmm0
aesenc xmm4, xmm0
movdqa xmm0, xmmword [edx + 0x90]
aesenc xmm1, xmm0
aesenc xmm2, xmm0
aesenc xmm3, xmm0
aesenc xmm4, xmm0
movdqa xmm0, xmmword [edx + 0xa0]
cmp ebx, 0xa
je 0x551ace
aesenc xmm1, xmm0
aesenc xmm2, xmm0
aesenc xmm3, xmm0
aesenc xmm4, xmm0
movdqa xmm0, xmmword [edx + 0xb0]
aesenc xmm1, xmm0
aesenc xmm2, xmm0
aesenc xmm3, xmm0
aesenc xmm4, xmm0
movdqa xmm0, xmmword [edx + 0xc0]
cmp ebx, 0xc
je 0x551ace
aesenc xmm1, xmm0
aesenc xmm2, xmm0
aesenc xmm3, xmm0
aesenc xmm4, xmm0
movdqa xmm0, xmmword [edx + 0xd0]
aesenc xmm1, xmm0
aesenc xmm2, xmm0
aesenc xmm3, xmm0
aesenc xmm4, xmm0
movdqa xmm0, xmmword [edx + 0xe0]
aesenclast xmm1, xmm0
aesenclast xmm2, xmm0
aesenclast xmm3, xmm0
aesenclast xmm4, xmm0
movdqu xmm0, xmmword [ecx]
pxor xmm1, xmm0
movdqu xmmword [ecx], xmm1
movdqu xmm0, xmmword [ecx + 0x10]
pxor xmm2, xmm0
movdqu xmmword [ecx + 0x10], xmm2
movdqu xmm0, xmmword [ecx + 0x20]
pxor xmm3, xmm0
movdqu xmmword [ecx + 0x20], xmm3
pxor xmm4, xmm5
movdqu xmmword [ecx + 0x30], xmm4
add ecx, 0x40
add edi, 0x40
cmp ebp, esi
mov ebx, ebp
jne 0x5518d0
mov edi, dword [esp + 0x10]
xor ebx, ebx
mov edx, dword [esp + 0x34]
mov esi, dword [esp + 0x38]
mov ecx, edi
shld ebx, edi, 2
shl ecx, 2
add ecx, dword [esp]
adc ebx, dword [esp + 4]
add edi, 1
shl edi, 6
add edx, edi
add esi, edi
and dword [esp + 0x3c], 3
je 0x5512f2
mov edi, dword [esp + 0x3c]
add ecx, 1
mov ebp, dword [esp + 0xc]
adc ebx, 0
mov dword [esp], ecx
mov dword [esp + 4], ebx
mov ebx, ecx
add edi, ecx
nop
tzcnt ecx, ebx
add ecx, 0xa
shl ecx, 4
movdqu xmm1, xmmword [eax + ecx]
movdqu xmm0, xmmword [esi]
pxor xmm5, xmm1
pxor xmm6, xmm0
pxor xmm0, xmm5
mov ecx, dword [eax + 0x3e0]
movdqa xmm1, xmmword [ebp]
pxor xmm0, xmm1
movdqa xmm1, xmmword [ebp + 0x10]
aesenc xmm0, xmm1
movdqa xmm1, xmmword [ebp + 0x20]
aesenc xmm0, xmm1
movdqa xmm1, xmmword [ebp + 0x30]
aesenc xmm0, xmm1
movdqa xmm1, xmmword [ebp + 0x40]
aesenc xmm0, xmm1
movdqa xmm1, xmmword [ebp + 0x50]
aesenc xmm0, xmm1
movdqa xmm1, xmmword [ebp + 0x60]
aesenc xmm0, xmm1
movdqa xmm1, xmmword [ebp + 0x70]
aesenc xmm0, xmm1
movdqa xmm1, xmmword [ebp + 0x80]
aesenc xmm0, xmm1
movdqa xmm1, xmmword [ebp + 0x90]
aesenc xmm0, xmm1
movdqa xmm1, xmmword [ebp + 0xa0]
cmp ecx, 0xa
je 0x551c44
aesenc xmm0, xmm1
movdqa xmm1, xmmword [ebp + 0xb0]
aesenc xmm0, xmm1
movdqa xmm1, xmmword [ebp + 0xc0]
cmp ecx, 0xc
je 0x551c44
aesenc xmm0, xmm1
movdqa xmm1, xmmword [ebp + 0xd0]
aesenc xmm0, xmm1
movdqa xmm1, xmmword [ebp + 0xe0]
aesenclast xmm0, xmm1
pxor xmm0, xmm5
movdqu xmmword [edx], xmm0
add ebx, 1
add esi, 0x10
add edx, 0x10
cmp edi, ebx
jne 0x551b70
mov edx, dword [esp + 0x3c]
xor ebx, ebx
lea ecx, [edx - 1]
add ecx, dword [esp]
adc ebx, dword [esp + 4]
jmp 0x5512f2