Function at 0x551a70
Capabilities:
Encode data using xor
Hash data using murmur2

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x14
mov ebx, dword [esp + 0x28]
movzx eax, byte [ebx]
test al, 1
je 0x551a8c
mov ebp, dword [ebx + 8]
mov eax, dword [ebx + 4]
mov ebx, ebp
jmp 0x551a8f
inc ebx
shr eax, 1
cmp eax, 4
mov ebp, eax
mov edx, ebx
mov dword [esp], eax
mov dword [esp + 8], ecx
jb 0x551ae7
mov eax, dword [esp]
mov ecx, ebx
mov esi, ebx
lea ebp, [eax - 4]
mov edx, eax
nop dword [eax + eax]
imul ebx, dword [esi], 0x5bd1e995
imul eax, eax, 0x5bd1e995
add edx, 0xfffffffc
add esi, 4
mov edi, ebx
shr edi, 0x18
xor edi, ebx
imul edi, edi, 0x5bd1e995
xor eax, edi
cmp edx, 3
ja 0x551ab0
mov esi, ebp
mov ebx, ecx
and esi, 0xfffffffc
lea edx, [ecx + esi + 4]
mov ecx, dword [esp + 8]
sub ebp, esi
cmp ebp, 1
je 0x551b08
cmp ebp, 2
je 0x551aff
cmp ebp, 3
jne 0x551b13
movzx esi, byte [edx + 2]
shl esi, 0x10
xor eax, esi
movzx esi, byte [edx + 1]
shl esi, 8
xor eax, esi
movzx edx, byte [edx]
xor edx, eax
imul eax, edx, 0x5bd1e995
mov edx, eax
mov esi, dword [ecx + 4]
shr edx, 0xd
xor edx, eax
imul eax, edx, 0x5bd1e995
mov ebp, eax
shr ebp, 0xf
xor ebp, eax
test esi, esi
je 0x551b43
lea edi, [esi - 1]
test edi, esi
je 0x551b48
cmp ebp, esi
mov edx, ebp
jb 0x551b4c
mov eax, ebp
xor edx, edx
div esi
jmp 0x551b4c
jmp 0x551c2c
mov edx, ebp
and edx, edi
mov eax, dword [ecx]
mov dword [esp + 4], edx
mov eax, dword [eax + edx*4]
test eax, eax
je 0x551c2c
mov dword [esp + 0xc], edi
mov edi, dword [eax]
test edi, edi
je 0x551c2c
nop dword [eax + eax]
mov eax, dword [edi + 4]
cmp eax, ebp
je 0x551ba0
mov ecx, dword [esp + 0xc]
test ecx, esi
je 0x551b96
cmp eax, esi
jb 0x551b98
xor edx, edx
div esi
mov eax, edx
mov edx, dword [esp + 4]
cmp eax, edx
je 0x551ba0
jmp 0x551c2c
and eax, ecx
cmp eax, edx
jne 0x551c2c
movzx edx, byte [edi + 8]
mov eax, edx
shr eax, 1
test dl, 1
mov ecx, eax
je 0x551bb2
mov ecx, dword [edi + 0xc]
cmp ecx, dword [esp]
jne 0x551c1e
lea ecx, [edi + 8]
inc ecx
test dl, 1
je 0x551bc3
mov ecx, dword [edi + 0x10]
jne 0x551c00
cmp dword [esp], 0
je 0x551d32
xor ecx, ecx
nop word cs:[eax + eax]
nop dword [eax + eax]
movzx edx, byte [edi + ecx + 9]
cmp dl, byte [ebx + ecx]
jne 0x551c1e
inc ecx
cmp eax, ecx
jne 0x551be0
jmp 0x551d32
mov eax, dword [esp]
test eax, eax
je 0x551d32
push eax
push ebx
push ecx
call sub.msvcrt.dll_memcmp
add esp, 0xc
test eax, eax
je 0x551d32
mov edi, dword [edi]
mov edx, dword [esp + 4]
test edi, edi
jne 0x551b70
mov ebx, dword [esp + 0x2c]
push 0x14
call fcn.004fc150
add esp, 4
mov edi, eax
mov eax, dword [ebx + 8]
movq xmm2, qword [0x585d30]
mov dword [edi + 0x10], eax
movsd xmm0, qword [ebx]
movsd qword [edi + 8], xmm0
mov dword [ebx + 8], 0
mov dword [ebx + 4], 0
mov dword [ebx], 0
mov ebx, dword [esp + 8]
mov dword [edi + 4], ebp
mov dword [edi], 0
mov eax, dword [ebx + 0xc]
movss xmm1, dword [ebx + 0x10]
inc eax
test esi, esi
movd xmm0, eax
por xmm0, xmm2
subsd xmm0, xmm2
cvtsd2ss xmm0, xmm0
je 0x551cb6
movd xmm3, esi
por xmm3, xmm2
subsd xmm3, xmm2
xorps xmm2, xmm2
cvtsd2ss xmm2, xmm3
mulss xmm2, xmm1
ucomiss xmm0, xmm2
ja 0x551cb6
mov edx, dword [esp + 4]
jmp 0x551d42
lea eax, [esi + esi]
mov ebx, 1
cmp esi, 3
jb 0x551ccd
lea ecx, [esi - 1]
xor ebx, ebx
test ecx, esi
setne bl
or ebx, eax
divss xmm0, xmm1
sub esp, 4
movss dword [esp], xmm0
call fcn.0052c6f0
add esp, 4
fstp dword [esp + 0x10]
movss xmm1, dword [0x585d38]
movss xmm0, dword [esp + 0x10]
movaps xmm2, xmm0
cvttss2si edx, xmm0
subss xmm2, xmm1
cvttss2si eax, xmm2
xor eax, 0x80000000
ucomiss xmm0, xmm1
cmovae edx, eax
cmp ebx, edx
cmovae edx, ebx
mov ebx, dword [esp + 8]
mov ecx, ebx
push edx
call fcn.00551da0
mov esi, dword [ebx + 4]
lea edx, [esi - 1]
test edx, esi
je 0x551d38
cmp ebp, esi
jae 0x551d3c
mov edx, ebp
jmp 0x551d42
xor eax, eax
xor edx, edx
jmp 0x551d90
and edx, ebp
jmp 0x551d42
mov eax, ebp
xor edx, edx
div esi
mov ecx, dword [ebx]
mov eax, dword [ecx + edx*4]
test eax, eax
je 0x551d51
mov ecx, dword [eax]
mov dword [edi], ecx
jmp 0x551d84
mov ebp, edx
mov edx, dword [ebx + 8]
lea eax, [ebx + 8]
mov dword [edi], edx
mov dword [ebx + 8], edi
mov dword [ecx + ebp*4], eax
mov eax, dword [edi]
test eax, eax
je 0x551d86
mov eax, dword [eax + 4]
lea ecx, [esi - 1]
test ecx, esi
je 0x551d7d
cmp eax, esi
jb 0x551d7f
xor edx, edx
div esi
mov eax, edx
jmp 0x551d7f
and eax, ecx
shl eax, 2
add eax, dword [ebx]
mov dword [eax], edi
inc dword [ebx + 0xc]
mov edx, 1
xor eax, eax
or eax, edi
add esp, 0x14
pop esi
pop edi
pop ebx
pop ebp
ret 8