Function at 0x660e9458
Capabilities:
Encode data using xor

Disassembly:
push ebp
push edi
mov edi, eax
push esi
push ebx
sub esp, 0x24
mov eax, dword [esp + 0x40]
mov esi, dword [esp + 0x3c]
mov dword [esp], ecx
cmp al, 4
ja case.default.0x660e9081
movzx eax, al
mov ebp, edx
jmp dword [eax*4 + 0x661e10b4]
mov eax, dword [esp]
test eax, eax
je 0x660e9690
test esi, esi
je 0x660e916d
lea edx, [edx + 1]
mov eax, edi
mov ebx, ecx
sub eax, edx
lea ecx, [ecx + 1]
cmp eax, 2
lea eax, [esi - 1]
seta dl
cmp eax, 3
seta al
and eax, edx
mov edx, edi
sub edx, ecx
cmp edx, 2
seta dl
test al, dl
je 0x660e99a0
mov eax, ebp
or eax, edi
or eax, ebx
test al, 3
jne 0x660e99a0
mov eax, esi
mov dword [esp + 0x3c], esi
xor ecx, ecx
mov esi, ebx
and eax, 0xfffffffc
mov dword [esp + 4], eax
lea esi, [esi]
mov edx, dword [ebp + ecx]
mov ebx, dword [esi + ecx]
mov eax, edx
or edx, 0x80808080
xor eax, ebx
and ebx, 0x7f7f7f7f
not eax
sub edx, ebx
and eax, 0x80808080
xor eax, edx
mov dword [edi + ecx], eax
add ecx, 4
cmp ecx, dword [esp + 4]
jne 0x660e90f8
mov esi, dword [esp + 0x3c]
mov edx, esi
and edx, 0xfffffffc
test esi, 3
je 0x660e916d
mov ecx, dword [esp]
movzx eax, byte [ebp + edx]
sub al, byte [ecx + edx]
mov byte [edi + edx], al
lea eax, [edx + 1]
cmp esi, eax
je 0x660e916d
movzx eax, byte [ebp + edx + 1]
sub al, byte [ecx + edx + 1]
mov byte [edi + edx + 1], al
lea eax, [edx + 2]
cmp esi, eax
je 0x660e916d
movzx eax, byte [ebp + edx + 2]
sub al, byte [ecx + edx + 2]
mov byte [edi + edx + 2], al
cmp esi, dword [esp + 0x38]
jae case.default.0x660e9081
mov eax, esi
mov dword [esp + 0x1c], edi
mov ecx, esi
neg eax
mov dword [esp + 0x20], ebp
mov dword [esp + 0x14], eax
mov eax, dword [esp]
sub eax, esi
mov dword [esp + 0x18], eax
lea esi, [esi]
mov edi, dword [esp + 0x20]
movzx eax, byte [edi + ecx]
add edi, dword [esp + 0x14]
mov byte [esp + 8], al
mov eax, dword [esp + 0x18]
movzx esi, byte [eax + ecx]
mov eax, esi
movzx ebx, al
mov eax, dword [esp]
movzx ebp, byte [eax + ecx]
mov eax, ebp
mov dword [esp + 4], ebp
mov byte [esp + 0x10], al
movzx eax, byte [edi + ecx]
mov edi, ebp
sub edi, ebx
mov ebp, edi
mov edx, edi
mov byte [esp + 0xc], al
sar ebp, 0x1f
xor edx, ebp
mov edi, edx
sub edi, ebp
mov ebp, eax
sub ebp, ebx
mov edx, ebp
sar ebp, 0x1f
xor edx, ebp
sub edx, ebp
mov ebp, edi
cmp dx, di
cmovle ebp, edx
add eax, dword [esp + 4]
sub eax, ebx
sub eax, ebx
mov ebx, eax
sar ebx, 0x1f
xor eax, ebx
sub eax, ebx
cmp bp, ax
jg 0x660e921c
cmp dx, di
movzx eax, byte [esp + 0x10]
movzx edx, byte [esp + 0xc]
cmovl edx, eax
mov esi, edx
movzx eax, byte [esp + 8]
mov ebx, esi
mov esi, dword [esp + 0x1c]
sub eax, ebx
mov byte [esi + ecx], al
add ecx, 1
cmp dword [esp + 0x38], ecx
jne 0x660e9198
add esp, 0x24
pop ebx
pop esi
pop edi
pop ebp
ret
mov edx, dword [esp]
test edx, edx
je 0x660e9830
xor eax, eax
mov ebx, ecx
test esi, esi
je 0x660e9277
lea esi, [esi]
nop
movzx ecx, byte [ebx + eax]
movzx edx, byte [ebp + eax]
shr cl, 1
sub edx, ecx
mov byte [edi + eax], dl
add eax, 1
cmp esi, eax
jne 0x660e9260
cmp esi, dword [esp + 0x38]
jae case.default.0x660e9081
mov edx, ebp
mov ecx, dword [esp]
sub edx, esi
lea esi, [esi]
movzx ebx, byte [ecx + esi]
movzx eax, byte [edx + esi]
add eax, ebx
movzx ebx, byte [ebp + esi]
sar eax, 1
sub ebx, eax
mov byte [edi + esi], bl
add esi, 1
cmp dword [esp + 0x38], esi
jne 0x660e9288
add esp, 0x24
pop ebx
pop esi
pop edi
pop ebp
ret
test esi, esi
je 0x660e9334
lea edx, [edx + 1]
mov eax, edi
sub eax, edx
cmp eax, 2
mov eax, ebp
seta dl
or eax, edi
test al, 3
sete al
test dl, al
je 0x660e98f0
lea eax, [esi - 1]
cmp eax, 3
jbe 0x660e98f0
mov ecx, esi
mov eax, ebp
mov edx, edi
and ecx, 0xfffffffc
add ecx, ebp
lea esi, [esi]
mov ebx, dword [eax]
add eax, 4
add edx, 4
mov dword [edx - 4], ebx
cmp eax, ecx
jne 0x660e92f0
mov edx, esi
and edx, 0xfffffffc
test esi, 3
je 0x660e9334
movzx eax, byte [ebp + edx]
mov byte [edi + edx], al
lea eax, [edx + 1]
cmp esi, eax
je 0x660e9334
movzx eax, byte [ebp + edx + 1]
mov byte [edi + edx + 1], al
lea eax, [edx + 2]
cmp eax, esi
je 0x660e9334
movzx eax, byte [ebp + edx + 2]
mov byte [edi + edx + 2], al
cmp esi, dword [esp + 0x38]
jae case.default.0x660e9081
mov eax, esi
mov ecx, dword [esp + 0x38]
lea edx, [ebp + 1]
neg eax
mov dword [esp], eax
lea eax, [ebp + esi]
mov dword [esp + 8], eax
lea eax, [edi + esi]
mov dword [esp + 4], eax
sub eax, edx
mov edx, dword [esp + 4]
cmp eax, 2
lea eax, [ecx - 1]
seta bl
sub eax, esi
cmp eax, 3
seta al
and ebx, eax
lea eax, [esi + 1]
lea ecx, [ebp + eax]
sub edx, ecx
cmp edx, 2
seta dl
test bl, dl
je 0x660e9918
mov edx, dword [esp + 4]
or edx, dword [esp + 8]
or edx, ebp
and edx, 3
jne 0x660e9918
mov eax, dword [esp + 0x38]
mov dword [esp + 0x10], edi
xor ecx, ecx
mov dword [esp + 0x3c], esi
mov edi, dword [esp + 8]
sub eax, esi
mov esi, dword [esp + 4]
mov dword [esp + 0xc], eax
and eax, 0xfffffffc
mov dword [esp], eax
mov edx, dword [edi + ecx]
mov ebx, dword [ebp + ecx]
mov eax, edx
or edx, 0x80808080
xor eax, ebx
and ebx, 0x7f7f7f7f
not eax
sub edx, ebx
and eax, 0x80808080
xor eax, edx
mov dword [esi + ecx], eax
add ecx, 4
cmp ecx, dword [esp]
jne 0x660e93c0
mov ecx, dword [esp + 0xc]
mov esi, dword [esp + 0x3c]
mov edi, dword [esp + 0x10]
mov edx, ecx
and edx, 0xfffffffc
lea eax, [edx + esi]
cmp edx, ecx
je case.default.0x660e9081
movzx ecx, byte [ebp + eax]
sub cl, byte [ebp + edx]
lea edx, [eax + 1]
mov byte [edi + eax], cl
cmp dword [esp + 0x38], edx
jbe case.default.0x660e9081
mov ecx, edx
movzx edx, byte [ebp + eax + 1]
sub ecx, esi
sub dl, byte [ebp + ecx]
mov byte [edi + eax + 1], dl
lea edx, [eax + 2]
cmp edx, dword [esp + 0x38]
jae case.default.0x660e9081
sub edx, esi
movzx ecx, byte [ebp + eax + 2]
sub cl, byte [ebp + edx]
mov byte [edi + eax + 2], cl
jmp case.default.0x660e9081
mov ebx, dword [esp]
test ebx, ebx
je 0x660e9600
mov esi, dword [esp + 0x38]
test esi, esi
je case.default.0x660e9081
lea edx, [edx + 1]
mov eax, edi
lea ecx, [ebx + 1]
sub eax, edx
cmp eax, 2
mov eax, dword [esp + 0x38]
seta dl
sub eax, 1
cmp eax, 3
seta al
and eax, edx
mov edx, edi
sub edx, ecx
cmp edx, 2
seta dl
test al, dl
je 0x660e9970
mov eax, ebp
or eax, edi
or eax, ebx
test al, 3
jne 0x660e9970
mov esi, dword [esp + 0x38]
xor ecx, ecx
and esi, 0xfffffffc
mov dword [esp + 4], esi
mov esi, ebx
lea esi, [esi]
mov edx, dword [ebp + ecx]
mov ebx, dword [esi + ecx]
mov eax, edx
or edx, 0x80808080
xor eax, ebx
and ebx, 0x7f7f7f7f
not eax
sub edx, ebx
and eax, 0x80808080
xor eax, edx
mov dword [edi + ecx], eax
add ecx, 4
cmp ecx, dword [esp + 4]
jne 0x660e94c0
mov edx, dword [esp + 0x38]
and edx, 0xfffffffc
test byte [esp + 0x38], 3
je case.default.0x660e9081
mov esi, dword [esp]
movzx eax, byte [ebp + edx]
sub al, byte [esi + edx]
mov byte [edi + edx], al
lea eax, [edx + 1]
cmp eax, dword [esp + 0x38]
je case.default.0x660e9081
movzx eax, byte [ebp + edx + 1]
sub al, byte [esi + edx + 1]
mov byte [edi + edx + 1], al
lea eax, [edx + 2]
cmp dword [esp + 0x38], eax
je case.default.0x660e9081
movzx eax, byte [ebp + edx + 2]
sub al, byte [esi + edx + 2]
mov byte [edi + edx + 2], al
jmp case.default.0x660e9081
mov eax, dword [esp + 0x38]
test eax, eax
je case.default.0x660e9081
lea edx, [edx + 1]
mov eax, edi
sub eax, edx
cmp eax, 2
mov eax, ebp
seta dl
or eax, edi
test al, 3
sete al
test dl, al
je 0x660e9948
mov eax, dword [esp + 0x38]
sub eax, 1
cmp eax, 3
jbe 0x660e9948
mov ebx, dword [esp + 0x38]
mov eax, edi
mov edx, ebp
and ebx, 0xfffffffc
add ebx, edi
lea esi, [esi]
nop
mov ecx, dword [edx]
add eax, 4
add edx, 4
mov dword [eax - 4], ecx
cmp ebx, eax
jne 0x660e95a0
mov edx, dword [esp + 0x38]
and edx, 0xfffffffc
test byte [esp + 0x38], 3
je case.default.0x660e9081
movzx eax, byte [ebp + edx]
mov byte [edi + edx], al
lea eax, [edx + 1]
cmp dword [esp + 0x38], eax
je case.default.0x660e9081
movzx eax, byte [ebp + edx + 1]
mov byte [edi + edx + 1], al
lea eax, [edx + 2]
cmp eax, dword [esp + 0x38]
je case.default.0x660e9081
movzx eax, byte [ebp + edx + 2]
mov byte [edi + edx + 2], al
jmp case.default.0x660e9081
mov ecx, dword [esp + 0x38]
test ecx, ecx
je case.default.0x660e9081
mov eax, edx
lea ecx, [ebp + 1]
or eax, edi
test al, 3
mov eax, edi
sete dl
sub eax, ecx
cmp eax, 2
seta al
test dl, al
je 0x660e99bf
mov eax, dword [esp + 0x38]
sub eax, 1
cmp eax, 3
jbe 0x660e99bf
mov ebx, dword [esp + 0x38]
mov eax, ebp
mov edx, edi
and ebx, 0xfffffffc
add ebx, ebp
lea esi, [esi]
nop
mov ecx, dword [eax]
add eax, 4
add edx, 4
mov dword [edx - 4], ecx
cmp eax, ebx
jne 0x660e9650
mov edx, dword [esp + 0x38]
and edx, 0xfffffffc
test byte [esp + 0x38], 3
je case.default.0x660e9081
movzx eax, byte [ebp + edx]
mov byte [edi + edx], al
lea eax, [edx + 1]
cmp eax, dword [esp + 0x38]
jne 0x660e95d6
jmp case.default.0x660e9081
test esi, esi
je 0x660e9714
mov eax, edx
lea ecx, [ebp + 1]
or eax, edi
test al, 3
mov eax, edi
sete dl
sub eax, ecx
cmp eax, 2
seta al
test dl, al
je 0x660e9a29
lea eax, [esi - 1]
cmp eax, 3
jbe 0x660e9a29
mov ecx, esi
mov eax, ebp
mov edx, edi
and ecx, 0xfffffffc
add ecx, ebp
lea esi, [esi]
mov ebx, dword [eax]
add eax, 4
add edx, 4
mov dword [edx - 4], ebx
cmp eax, ecx
jne 0x660e96d0
mov edx, esi
and edx, 0xfffffffc
test esi, 3
je 0x660e9714
movzx eax, byte [ebp + edx]
mov byte [edi + edx], al
lea eax, [edx + 1]
cmp esi, eax
je 0x660e9714
movzx eax, byte [ebp + edx + 1]
mov byte [edi + edx + 1], al
lea eax, [edx + 2]
cmp esi, eax
je 0x660e9714
movzx eax, byte [ebp + edx + 2]
mov byte [edi + edx + 2], al
cmp esi, dword [esp + 0x38]
jae case.default.0x660e9081
mov eax, esi
lea ebx, [edi + esi]
lea edx, [ebp + 1]
neg eax
mov dword [esp + 4], ebx
mov dword [esp], eax
lea eax, [ebp + esi]
mov dword [esp + 8], eax
mov eax, dword [esp + 0x38]
sub eax, 1
sub eax, esi
cmp eax, 3
mov eax, ebx
seta cl
sub eax, edx
mov edx, dword [esp + 4]
cmp eax, 2
lea eax, [esi + 1]
seta bl
and ebx, ecx
lea ecx, [ebp + eax]
sub edx, ecx
cmp edx, 2
seta dl
test bl, dl
je 0x660e9a05
mov edx, dword [esp + 8]
or edx, dword [esp + 4]
or edx, ebp
and edx, 3
jne 0x660e9a05
mov eax, dword [esp + 0x38]
mov dword [esp + 0x10], edi
xor ecx, ecx
mov dword [esp + 0x3c], esi
mov edi, dword [esp + 4]
sub eax, esi
mov esi, dword [esp + 8]
mov dword [esp + 0xc], eax
and eax, 0xfffffffc
mov dword [esp], eax
lea esi, [esi]
mov edx, dword [esi + ecx]
mov ebx, dword [ebp + ecx]
mov eax, edx
or edx, 0x80808080
xor eax, ebx
and ebx, 0x7f7f7f7f
not eax
sub edx, ebx
and eax, 0x80808080
xor eax, edx
mov dword [edi + ecx], eax
add ecx, 4
cmp ecx, dword [esp]
jne 0x660e97a8
mov ecx, dword [esp + 0xc]
mov esi, dword [esp + 0x3c]
mov edi, dword [esp + 0x10]
mov edx, ecx
and edx, 0xfffffffc
lea eax, [esi + edx]
cmp ecx, edx
je case.default.0x660e9081
movzx ecx, byte [ebp + eax]
sub cl, byte [ebp + edx]
lea edx, [eax + 1]
mov byte [edi + eax], cl
cmp dword [esp + 0x38], edx
jbe case.default.0x660e9081
mov ecx, edx
movzx edx, byte [ebp + eax + 1]
sub ecx, esi
sub dl, byte [ebp + ecx]
mov byte [edi + eax + 1], dl
lea edx, [eax + 2]
cmp dword [esp + 0x38], edx
ja 0x660e9440
jmp case.default.0x660e9081
test esi, esi
je 0x660e98b4
mov eax, ebp
lea ecx, [ebp + 1]
or eax, edi
test al, 3
mov eax, edi
sete dl
sub eax, ecx
cmp eax, 2
seta al
test dl, al
je 0x660e99e5
lea eax, [esi - 1]
cmp eax, 3
jbe 0x660e99e5
mov ecx, esi
mov eax, ebp
mov edx, edi
and ecx, 0xfffffffc
add ecx, ebp
lea esi, [esi]
mov ebx, dword [eax]
add eax, 4
add edx, 4
mov dword [edx - 4], ebx
cmp eax, ecx
jne 0x660e9870
mov edx, esi
and edx, 0xfffffffc
test esi, 3
je 0x660e98b4
movzx eax, byte [ebp + edx]
mov byte [edi + edx], al
lea eax, [edx + 1]
cmp eax, esi
je 0x660e98b4
movzx eax, byte [ebp + edx + 1]
mov byte [edi + edx + 1], al
lea eax, [edx + 2]
cmp esi, eax
je 0x660e98b4
movzx eax, byte [ebp + edx + 2]
mov byte [edi + edx + 2], al
cmp esi, dword [esp + 0x38]
jae case.default.0x660e9081
mov ecx, ebp
mov ebx, dword [esp + 0x38]
sub ecx, esi
lea esi, [esi]
lea esi, [esi]
movzx edx, byte [ecx + esi]
movzx eax, byte [ebp + esi]
shr dl, 1
sub eax, edx
mov byte [edi + esi], al
add esi, 1
cmp ebx, esi
jne 0x660e98d0
jmp case.default.0x660e9081
mov eax, ebp
mov edx, edi
lea ecx, [esi + ebp]
lea esi, [esi]
nop
movzx ebx, byte [eax]
add eax, 1
add edx, 1
mov byte [edx - 1], bl
cmp eax, ecx
jne 0x660e9900
jmp 0x660e9334
mov ecx, dword [esp]
mov ebx, dword [esp + 0x38]
add ecx, ebp
jmp 0x660e992b
add eax, 1
movzx edx, byte [ebp + esi]
sub dl, byte [ecx + esi]
mov byte [edi + esi], dl
mov esi, eax
cmp eax, ebx
jne 0x660e9928
jmp case.default.0x660e9081
mov ebx, dword [esp + 0x38]
mov edx, ebp
mov eax, edi
add ebx, ebp
lea esi, [esi]
movzx ecx, byte [edx]
add edx, 1
add eax, 1
mov byte [eax - 1], cl
cmp edx, ebx
jne 0x660e9958
jmp case.default.0x660e9081
mov ecx, dword [esp]
mov ebx, dword [esp + 0x38]
xor edx, edx
lea esi, [esi]
movzx eax, byte [ebp + edx]
sub al, byte [ecx + edx]
mov byte [edi + edx], al
add edx, 1
cmp ebx, edx
jne 0x660e9980
jmp case.default.0x660e9081
mov ecx, dword [esp]
xor edx, edx
lea esi, [esi]
movzx eax, byte [ebp + edx]
sub al, byte [ecx + edx]
mov byte [edi + edx], al
add edx, 1
cmp esi, edx
jne 0x660e99a8
jmp 0x660e916d
mov ebx, dword [esp + 0x38]
mov edx, ebp
mov eax, edi
add ebx, ebp
lea esi, [esi]
movzx ecx, byte [edx]
add edx, 1
add eax, 1
mov byte [eax - 1], cl
cmp edx, ebx
jne 0x660e99d0
jmp case.default.0x660e9081
mov eax, ebp
mov edx, edi
lea ecx, [esi + ebp]
lea esi, [esi]
movzx ebx, byte [eax]
add eax, 1
add edx, 1
mov byte [edx - 1], bl
cmp eax, ecx
jne 0x660e99f0
jmp 0x660e98b4
mov ecx, dword [esp]
mov ebx, dword [esp + 0x38]
add ecx, ebp
jmp 0x660e9a13
add eax, 1
movzx edx, byte [ebp + esi]
sub dl, byte [ecx + esi]
mov byte [edi + esi], dl
mov esi, eax
cmp ebx, eax
jne 0x660e9a10
jmp case.default.0x660e9081
mov eax, ebp
mov edx, edi
lea ecx, [esi + ebp]
movzx ebx, byte [eax]
add eax, 1
add edx, 1
mov byte [edx - 1], bl
cmp eax, ecx
jne 0x660e9a30
jmp 0x660e9714