Function at 0x4096e0
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x58
mov esi, dword [esp + 0x70]
mov eax, dword [esp + 0x6c]
mov dword [esp + 0x10], eax
mov dword [esp + 0x24], ecx
mov eax, dword [ecx + 0x80]
mov dword [esp + 0x20], eax
mov word [esp], 0x8d93
mov byte [esp + 2], 0x86
mov word [esp + 3], 0
mov byte [esp + 5], 0
mov ebx, 0x581593a1
nop
nop
nop
movzx ecx, byte [esp + ebx - 0x581593a1]
lea edi, [ebx - 0x58159300]
and edi, ecx
mov eax, edi
and eax, 0xffffffad
mov edx, edi
and edx, 2
mov ebp, edi
or ebp, 0xfffffffd
inc ebp
imul ebp, eax
or edi, 2
imul edi, edx
add ebp, ecx
sub ebp, edi
add ebp, ebx
mov eax, ebp
and eax, 0x5a
xor ebp, 0xda
lea eax, [eax*2]
add eax, ebp
inc al
mov byte [esp + ebx - 0x581593a1], al
inc ebx
cmp ebx, 0x581593a7
jne 0x409720
mov dword [esp + 0x14], 0x6e64607e
mov dword [esp + 0x18], 0x936a
mov byte [esp + 0x1c], 0
mov ebx, 0x7423ae5
mov ebp, 0x1a
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
movzx eax, byte [esp + ebx - 0x7423ad1]
mov ecx, eax
not ecx
or ecx, ebp
or eax, ebx
and eax, ecx
mov ecx, eax
and ecx, 1
xor eax, 1
lea eax, [eax + ecx*2]
add al, 0x86
mov byte [esp + ebx - 0x7423ad1], al
inc ebx
dec ebp
cmp ebx, 0x7423aee
jne 0x4097a0
mov dword [esp + 0x28], 0xa4714b45
mov dword [esp + 0x2c], 0xb9b3a1ba
mov dword [esp + 0x30], 0xb2967ca4
mov dword [esp + 0x34], 0xb4b1b5b7
mov dword [esp + 0x38], 0xb4bbadb9
mov dword [esp + 0x3c], 0x817e578a
mov dword [esp + 0x40], 0x4e8f8b8f
mov dword [esp + 0x44], 0xb69ab488
mov dword [esp + 0x48], 0xb284715b
mov dword [esp + 0x4c], 0x6d4b9099
mov byte [esp + 0x50], 8
mov dword [esp + 0x51], 0
mov word [esp + 0x55], 0
mov ebx, 0x70c58f3
mov ebp, 0xf8f3a70c
nop
nop
movzx ecx, byte [esp + ebp + 0x70c591c]
lea eax, [ecx + ecx]
not eax
add eax, ecx
mov edi, ebp
or edi, ecx
not ecx
and ecx, eax
or ecx, ebx
lea eax, [ecx + ecx]
not eax
add eax, ecx
not edi
or edi, eax
lea eax, [edi + edi]
not eax
add eax, edi
add eax, 0x233dbcc3
mov ecx, eax
and ecx, 1
xor eax, 1
lea eax, [eax + ecx*2]
mov byte [esp + ebp + 0x70c591c], al
dec ebx
inc ebp
cmp ebx, 0x70c58c4
jne 0x409840
mov eax, dword [esp + 0x20]
add dword [esp + 0x10], eax
mov word [esp + 8], 0x6857
mov byte [esp + 0xa], 0xba
mov word [esp + 0xb], 0
mov edi, 0xe0
mov ebx, 0x20
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
movzx ecx, byte [esp + edi - 0xd8]
mov eax, ecx
not eax
or eax, ebx
add eax, edi
and ecx, ebx
or ecx, eax
add cl, 0xa5
mov byte [esp + edi - 0xd8], cl
inc edi
dec ebx
cmp edi, 0xe5
jne 0x4098c0
movzx ebx, byte [esp + 8]
mov ecx, dword [esp + 0x10]
mov edi, ecx
test bl, bl
mov edx, dword [esp + 0x74]
je 0x40991c
lea ebp, [esp + 9]
mov edi, ecx
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
mov byte [edi], bl
inc edi
movzx ebx, byte [ebp]
inc ebp
test bl, bl
jne 0x409910
mov byte [edi], 0
mov eax, dword [esp + 0x24]
movzx ebx, byte [eax + 0x60]
test bl, bl
je 0x40993c
lea ebp, [eax + 0x61]
nop
nop
mov byte [edi], bl
inc edi
movzx ebx, byte [ebp]
inc ebp
test bl, bl
jne 0x409930
mov byte [edi], 0
movzx ebx, byte [esp + 0x28]
test bl, bl
je 0x40995c
lea ebp, [esp + 0x29]
nop
nop
nop
nop
mov byte [edi], bl
inc edi
movzx ebx, byte [ebp]
inc ebp
test bl, bl
jne 0x409950
mov byte [edi], 0
movzx ebx, byte [esi]
test bl, bl
je 0x40997b
inc esi
nop
nop
nop
nop
nop
nop
nop
nop
nop
mov byte [edi], bl
inc edi
movzx ebx, byte [esi]
inc esi
test bl, bl
jne 0x409970
mov byte [edi], 0
movzx ebx, byte [esp + 0x14]
test bl, bl
je 0x40999b
lea esi, [esp + 0x15]
nop
nop
nop
nop
nop
mov byte [edi], bl
inc edi
movzx ebx, byte [esi]
inc esi
test bl, bl
jne 0x409990
mov byte [edi], 0
movzx ebx, byte [edx]
test bl, bl
je 0x4099bb
inc edx
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
mov byte [edi], bl
inc edi
movzx ebx, byte [edx]
inc edx
test bl, bl
jne 0x4099b0
mov byte [edi], 0
movzx edx, byte [esp]
test dl, dl
je 0x4099db
lea esi, [esp + 1]
nop
nop
nop
nop
nop
nop
mov byte [edi], dl
inc edi
movzx edx, byte [esi]
inc esi
test dl, dl
jne 0x4099d0
mov byte [edi], 0
sub edi, ecx
add dword [eax + 0x80], edi
add esp, 0x58
pop esi
pop edi
pop ebx
pop ebp
ret 0xc