Function at 0x55ae10
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
push esi
mov esi, dword [ebp + 0xc]
mov eax, dword [esi + 0x528]
push edi
cmp eax, 0x10
jg 0x55b1af
xor edi, edi
cmp eax, edi
jl 0x55b1af
push ebx
cmp dword [esi + 0x524], edi
jne 0x55b09c
cmp dword [esi + 0x520], edi
jne 0x55ae7e
cmp eax, 0xc
jne 0x55ae7e
mov eax, dword [esi + 0x510]
mov ecx, dword [esi + 0x514]
mov edx, dword [esi + 0x518]
mov dword [esi + 0x4f0], eax
mov dword [esi + 0x4f4], ecx
mov dword [esi + 0x4f8], edx
mov dword [esi + 0x4fc], 0x1000000
jmp 0x55b036
cmp eax, edi
jbe 0x55aea1
mov ecx, 0xfffffb20
lea eax, [esi + 0x4e0]
sub ecx, esi
nop
mov dl, byte [eax + 0x30]
xor byte [eax], dl
inc eax
lea edx, [ecx + eax]
cmp edx, dword [esi + 0x528]
jb 0x55ae90
mov eax, dword [esi + 0x528]
cmp eax, edi
je 0x55aecf
cdq
shld edx, eax, 3
add eax, eax
add eax, eax
add eax, eax
add dword [esi + 0x530], eax
lea ecx, [esi + 0x4e0]
mov eax, esi
adc dword [esi + 0x534], edx
call fcn.00558fc0
xor eax, eax
mov dword [esi + 0x510], eax
mov dword [esi + 0x514], eax
mov cl, byte [esi + 0x535]
movzx ebx, byte [esi + 0x510]
xor byte [esi + 0x4e0], bl
movzx ebx, byte [esi + 0x511]
xor byte [esi + 0x4e1], bl
movzx ebx, byte [esi + 0x512]
xor byte [esi + 0x4e2], bl
mov byte [esi + 0x51a], cl
mov cl, byte [esi + 0x534]
mov al, byte [esi + 0x537]
xor byte [esi + 0x4e8], al
movzx ebx, byte [esi + 0x513]
xor byte [esi + 0x4e3], bl
mov byte [esi + 0x51b], cl
mov cl, byte [esi + 0x533]
movzx ebx, byte [esi + 0x514]
mov byte [esi + 0x51c], cl
mov cl, byte [esi + 0x532]
xor byte [esi + 0x4e4], bl
movzx ebx, byte [esi + 0x515]
mov byte [esi + 0x51d], cl
mov cl, byte [esi + 0x531]
xor byte [esi + 0x4e5], bl
mov byte [esi + 0x51e], cl
mov cl, byte [esi + 0x530]
movzx ebx, byte [esi + 0x516]
mov byte [esi + 0x51f], cl
lea ecx, [esi + 0x4e0]
xor byte [esi + 0x4e6], bl
movzx ebx, byte [esi + 0x517]
mov dl, byte [esi + 0x536]
xor byte [esi + 0x4e7], bl
xor byte [esi + 0x4e9], dl
mov byte [esi + 0x518], al
mov al, byte [esi + 0x535]
xor byte [esi + 0x4ea], al
mov al, byte [esi + 0x534]
xor byte [esi + 0x4eb], al
mov al, byte [esi + 0x533]
xor byte [esi + 0x4ec], al
mov al, byte [esi + 0x532]
xor byte [esi + 0x4ed], al
mov al, byte [esi + 0x531]
xor byte [esi + 0x4ee], al
mov al, byte [esi + 0x530]
xor byte [esi + 0x4ef], al
mov eax, esi
mov byte [esi + 0x519], dl
call fcn.00558fc0
mov eax, dword [ecx]
mov edx, dword [ecx + 4]
mov dword [esi + 0x4f0], eax
mov eax, dword [ecx + 8]
mov dword [esi + 0x4f4], edx
mov edx, dword [ecx + 0xc]
mov dword [esi + 0x4f8], eax
xor eax, eax
mov dword [esi + 0x4fc], edx
mov dword [ecx], eax
mov dword [ecx + 4], eax
mov dword [ecx + 8], eax
mov dword [ecx + 0xc], eax
mov eax, dword [esi + 0x4f0]
mov ecx, dword [esi + 0x4f4]
mov edx, dword [esi + 0x4f8]
mov dword [esi + 0x500], eax
mov eax, dword [esi + 0x4fc]
mov dword [esi + 0x504], ecx
mov dword [esi + 0x508], edx
mov dword [esi + 0x50c], eax
xor eax, eax
mov dword [esi + 0x510], eax
mov dword [esi + 0x514], eax
mov dword [esi + 0x518], eax
mov dword [esi + 0x51c], eax
mov dword [esi + 0x528], edi
mov dword [esi + 0x530], edi
mov dword [esi + 0x534], edi
mov dword [esi + 0x524], 1
cmp dword [esi + 0x524], 1
jne 0x55b197
cmp dword [esi + 0x528], 0x10
jge 0x55b197
mov edi, dword [ebp + 0x10]
lea ecx, [edi + 0x4c]
call fcn.0040fbb0
lea ecx, [edi + 0x4c]
mov ebx, eax
call fcn.004033b0
xor edi, edi
mov dword [ebp + 0xc], eax
cmp dword [esi + 0x528], edi
jne 0x55b135
mov ecx, eax
and ecx, 0xfffffff0
mov dword [ebp + 0x14], ecx
jbe 0x55b133
lea ecx, [esi + 0x4e0]
jmp 0x55b0f0
mov edx, dword [ebx + edi]
xor dword [ecx], edx
mov eax, dword [ebx + edi + 4]
xor dword [ecx + 4], eax
mov edx, dword [ebx + edi + 8]
xor dword [esi + 0x4e8], edx
mov eax, dword [ebx + edi + 0xc]
xor dword [esi + 0x4ec], eax
mov eax, esi
call fcn.00558fc0
add dword [esi + 0x530], 0x80
adc dword [esi + 0x534], 0
add edi, 0x10
cmp edi, dword [ebp + 0x14]
jb 0x55b0f0
mov eax, dword [ebp + 0xc]
add ebx, edi
cmp edi, eax
jae 0x55b18e
sub eax, edi
mov edi, eax
lea ecx, [ecx]
mov ecx, dword [esi + 0x528]
mov dl, byte [ebx]
xor byte [esi + ecx + 0x4e0], dl
inc dword [esi + 0x528]
lea eax, [esi + ecx + 0x4e0]
inc ebx
cmp dword [esi + 0x528], 0x10
jne 0x55b18b
lea ecx, [esi + 0x4e0]
mov eax, esi
call fcn.00558fc0
xor eax, eax
add dword [esi + 0x530], 0x80
mov dword [esi + 0x528], eax
adc dword [esi + 0x534], eax
dec edi
jne 0x55b140
pop ebx
pop edi
mov al, 1
pop esi
pop ebp
ret 0x10
mov ecx, dword [ebp + 0x14]
mov eax, dword [ecx]
mov edx, dword [eax + 0x14]
push str.Internal_error_2
call edx
pop ebx
pop edi
xor al, al
pop esi
pop ebp
ret 0x10
mov ecx, dword [ebp + 0x14]
mov eax, dword [ecx]
mov edx, dword [eax + 0x14]
push str.Internal_error.
call edx
pop edi
xor al, al
pop esi
pop ebp
ret 0x10