Function at 0x551c10
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
mov eax, dword [ebp + 8]
push ebx
push esi
push edi
mov ecx, dword [eax + 8]
cmp ecx, 5
jl 0x551d5b
cmp ecx, 0x11
jg 0x551d5b
mov ecx, dword [ebp + 0x10]
test byte [ecx + 0x12c], 2
je 0x551c8a
mov ecx, dword [ebp + 0xc]
mov esi, dword [eax]
cmp ecx, 1
jne 0x551c52
mov eax, dword [ebp + 0x14]
mov dl, byte [esi]
pop edi
pop esi
mov byte [eax], dl
xor eax, eax
pop ebx
pop ebp
ret
mov eax, ecx
cdq
sub eax, edx
sar eax, 1
test eax, eax
jle 0x551e19
mov edi, dword [ebp + 0x14]
lea edx, [esi + ecx - 1]
sub edi, esi
mov ebx, eax
mov al, byte [esi]
mov cl, byte [edx]
xor cl, al
xor al, cl
mov byte [edi + esi], al
mov al, byte [edx]
xor al, cl
inc esi
mov byte [edi + edx], al
dec edx
dec ebx
jne 0x551c6c
pop edi
pop esi
xor eax, eax
pop ebx
pop ebp
ret
mov ecx, dword [ebp + 0xc]
lea edx, [ecx - 1]
cmp edx, 7
ja case.0x551c99.3
jmp dword [edx*4 + 0x551e20]
mov ecx, dword [eax]
mov eax, dword [ebp + 0x14]
pop edi
pop esi
mov dl, byte [ecx]
pop ebx
mov byte [eax], dl
xor eax, eax
pop ebp
ret
mov ecx, dword [eax]
push ecx
call fcn.00551e40
mov edx, dword [ebp + 0x14]
push eax
push edx
call fcn.00551ee0
add esp, 0xc
xor eax, eax
pop edi
pop esi
pop ebx
pop ebp
ret
mov eax, dword [eax]
test al, 3
jne 0x551cd6
mov eax, dword [eax]
jmp 0x551cdf
push eax
call fcn.00551e90
add esp, 4
mov ecx, dword [ebp + 0x14]
test cl, 3
jne 0x551cf0
pop edi
mov dword [ecx], eax
pop esi
xor eax, eax
pop ebx
pop ebp
ret
push eax
push ecx
call fcn.00551f50
add esp, 8
xor eax, eax
pop edi
pop esi
pop ebx
pop ebp
ret
mov eax, dword [eax]
test al, 3
jne 0x551d0e
mov esi, dword [eax]
mov eax, dword [eax + 4]
jmp 0x551d1b
push eax
call fcn.00554c30
mov esi, eax
add esp, 4
mov eax, edx
mov ecx, dword [ebp + 0x14]
test cl, 3
jne 0x551d2f
mov dword [ecx], esi
pop edi
mov dword [ecx + 4], eax
pop esi
xor eax, eax
pop ebx
pop ebp
ret
push eax
push esi
push ecx
call fcn.00551fb0
add esp, 0xc
xor eax, eax
pop edi
pop esi
pop ebx
pop ebp
ret
mov esi, dword [eax]
mov edi, dword [ebp + 0x14]
mov eax, ecx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
xor eax, eax
rep movsb byte es:[edi], byte [esi]
pop edi
pop esi
pop ebx
pop ebp
ret
cmp ecx, 0x19
jl 0x551d65
cmp ecx, 0x1f
jle 0x551d77
cmp ecx, 0x28
jl 0x551e19
cmp ecx, 0x30
jg 0x551e19
mov edx, dword [ecx*4 + 0x57d024]
mov ecx, dword [ebp + 0x10]
cmp edx, 0xffffffff
movsx edi, byte [ecx + 0x120]
jne 0x551d97
pop edi
pop esi
mov eax, 0x4000005f
pop ebx
pop ebp
ret
mov ecx, dword [eax]
lea eax, [edi + edi*2]
mov ebx, dword [ebp + 0x14]
mov esi, dword [ebp + 0xc]
lea edx, [edx + eax*2]
mov eax, dword [edx*4 + 0x57d160]
test eax, eax
je 0x551dc8
push ebx
push 0
push ecx
call eax
add esp, 0xc
cmp eax, 1
je 0x551de2
pop edi
pop esi
mov eax, 0x4000005f
pop ebx
pop ebp
ret
cmp esi, 4
jne 0x551dd3
mov eax, dword [ecx]
mov dword [ebx], eax
jmp 0x551de2
cmp esi, 8
jne 0x551de2
mov edx, dword [ecx]
mov dword [ebx], edx
mov eax, dword [ecx + 4]
mov dword [ebx + 4], eax
mov ecx, dword [ebp + 0x10]
test byte [ecx + 0x12c], 2
je 0x551e19
test edi, edi
jne 0x551e19
mov eax, esi
cdq
sub eax, edx
sar eax, 1
test eax, eax
jle 0x551e19
lea esi, [esi + ebx - 1]
mov cl, byte [edi + ebx]
mov dl, cl
xor dl, byte [esi]
xor cl, dl
mov byte [edi + ebx], cl
mov cl, byte [esi]
xor cl, dl
inc edi
mov byte [esi], cl
dec esi
cmp edi, eax
jl 0x551e01
pop edi
pop esi
xor eax, eax
pop ebx
pop ebp
ret