Function at 0x10096130
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x28
push ebx
mov ebx, dword [ebp + 8]
test ebx, ebx
je 0x100963a0
mov ecx, dword [ebp + 0xc]
test ecx, ecx
je 0x100963a0
mov al, byte [ebx]
mov byte [ebp - 1], al
cmp al, 3
je 0x1009615f
cmp byte [ecx], 0
je 0x100963a0
push edi
mov edi, dword [ebp + 0x10]
test edi, edi
je 0x10096398
mov eax, dword [ebp + 0x14]
test eax, eax
jle 0x10096398
cdq
and edx, 0x7f
add eax, edx
movzx edx, byte [ebp - 1]
sar eax, 7
mov dword [ebp - 8], eax
push esi
dec edx
je 0x1009634f
dec edx
je 0x100962dd
dec edx
je 0x100961a4
pop esi
pop edi
mov eax, 0xfffffffb
pop ebx
mov esp, ebp
pop ebp
ret
mov edx, dword [ebp - 8]
lea eax, [ebx + 1]
mov dword [ebp - 0x18], eax
mov dword [ebp - 0x14], edx
test edx, edx
jle 0x1009638c
mov edx, dword [ebp + 0x18]
lea ebx, [ecx + 0x140]
lea esi, [eax + 1]
mov dword [ebp - 0x10], edx
jmp 0x100961d0
movdqu xmm0, xmmword [edi]
mov dword [ebp - 0xc], 0
movdqu xmmword [edx], xmm0
nop
lea edx, [ebp - 0x28]
push edx
push eax
push dword [ecx + 0x4c]
push ebx
call fcn.10098490
mov eax, esi
add esp, 0x10
mov esi, 3
jmp 0x10096200
mov bl, byte [eax]
lea eax, [eax + 5]
movzx ecx, byte [eax - 6]
mov dl, bl
add cl, cl
shr dl, 7
or dl, cl
add bl, bl
mov byte [eax - 6], dl
mov dl, byte [eax - 4]
mov cl, dl
add dl, dl
shr cl, 7
or cl, bl
mov bl, byte [eax - 3]
mov byte [eax - 5], cl
mov cl, bl
shr cl, 7
add bl, bl
or cl, dl
mov dl, byte [eax - 2]
mov byte [eax - 4], cl
mov cl, dl
shr cl, 7
add dl, dl
or cl, bl
mov byte [eax - 3], cl
movzx ecx, byte [eax - 1]
shr cl, 7
or cl, dl
mov byte [eax - 2], cl
dec esi
jne 0x10096200
mov eax, dword [ebp - 0xc]
mov cl, 7
mov esi, eax
mov bl, al
sar esi, 3
and bl, 7
sub cl, bl
mov dl, byte [edi + esi]
shr dl, cl
mov ecx, dword [ebp + 8]
and dl, 1
movzx eax, byte [ecx + 0x10]
add al, al
or dl, al
movzx eax, byte [ebp - 0x28]
mov byte [ecx + 0x10], dl
and al, 0x80
mov edx, dword [ebp - 0x10]
mov cl, bl
mov ebx, dword [ebp - 0xc]
shr al, cl
inc ebx
mov ecx, dword [ebp + 0xc]
xor byte [esi + edx], al
cmp ebx, 0x80
mov eax, dword [ebp - 0x18]
mov dword [ebp - 0xc], ebx
lea ebx, [ecx + 0x140]
lea esi, [eax + 1]
jl 0x100961e0
mov eax, dword [ebp - 0x14]
lea ebx, [ecx + 0x140]
dec eax
add edx, 0x10
add edi, 0x10
mov dword [ebp - 0x14], eax
test eax, eax
mov dword [ebp - 0x10], edx
mov eax, dword [ebp - 0x18]
lea esi, [eax + 1]
jg 0x100961d0
mov eax, dword [ebp - 8]
pop esi
pop edi
shl eax, 7
pop ebx
mov esp, ebp
pop ebp
ret
mov esi, eax
test eax, eax
jle 0x1009638e
mov eax, dword [ebp + 0x18]
lea edx, [ecx + 0x50]
mov dword [ebp + 8], eax
lea eax, [ebp - 0x28]
push eax
push edi
push dword [ecx + 0x4c]
push edx
call fcn.10097f00
mov eax, dword [ebx + 1]
dec esi
xor dword [ebp - 0x28], eax
add esp, 0x10
mov eax, dword [ebx + 5]
xor dword [ebp - 0x24], eax
mov eax, dword [ebx + 9]
xor dword [ebp - 0x20], eax
movdqu xmm0, xmmword [edi]
mov eax, dword [ebx + 0xd]
add edi, 0x10
xor dword [ebp - 0x1c], eax
mov eax, dword [ebp + 8]
mov ecx, dword [ebp + 0xc]
movdqu xmmword [ebx + 1], xmm0
movdqu xmm0, xmmword [ebp - 0x28]
lea edx, [ecx + 0x50]
movdqu xmmword [eax], xmm0
add eax, 0x10
mov dword [ebp + 8], eax
test esi, esi
jg 0x100962f0
mov eax, dword [ebp - 8]
pop esi
pop edi
shl eax, 7
pop ebx
mov esp, ebp
pop ebp
ret
mov esi, eax
test eax, eax
jle 0x1009638e
mov ebx, dword [ebp + 0x18]
lea eax, [ecx + 0x50]
jmp 0x10096360
push ebx
push edi
push dword [ecx + 0x4c]
push eax
call fcn.10097f00
mov ecx, dword [ebp + 0xc]
dec esi
add esp, 0x10
add edi, 0x10
add ebx, 0x10
lea eax, [ecx + 0x50]
test esi, esi
jg 0x10096360
mov eax, dword [ebp - 8]
pop esi
pop edi
shl eax, 7
pop ebx
mov esp, ebp
pop ebp
ret
mov eax, edx
pop esi
pop edi
shl eax, 7
pop ebx
mov esp, ebp
pop ebp
ret
pop edi
xor eax, eax
pop ebx
mov esp, ebp
pop ebp
ret
mov eax, 0xfffffffb
pop ebx
mov esp, ebp
pop ebp
ret