Function at 0x4098a0
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x110
cmp dword [ecx + 0x20], 0
je 0x409e15
mov esi, ecx
lea eax, [ecx + 0x10]
push eax
call fcn.00405ff0
add esp, 4
mov edx, dword [esi + 0x10]
mov eax, dword [esi + 0x58]
mov eax, dword [eax + 0x48]
mov dword [esp + 0x14], eax
movzx eax, byte [esi]
imul ecx, eax, 0xcd
shr ecx, 0xa
and ecx, 0xfffffffe
lea ecx, [ecx + ecx*4]
sub al, cl
movzx eax, al
movzx eax, byte [eax + str.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ]
mov byte [esp + 6], al
mov byte [esp + 7], 0
mov dword [esp + 0xc], edx
lea eax, [edx + 0x400]
push eax
call fcn.00408130
add esp, 4
mov dword [esp], eax
mov dword [esp + 0x74], 0x5c8b6b89
mov word [esp + 0x78], 0xf373
xor eax, eax
nop
nop
nop
movzx edx, word [esp + eax*2 + 0x74]
lea ecx, [eax - 0x3ba53947]
xor ecx, edx
mov edx, 0x4400
sub edx, ecx
add ecx, 0xbff
and edx, 0xf1c8
and ecx, 0xe37
sub ecx, edx
inc ecx
mov word [esp + eax*2 + 0x74], cx
lea ecx, [eax + 0x7ff]
neg eax
and eax, 0x7fe
and ecx, 0x801
sub ecx, eax
mov eax, ecx
cmp ecx, 3
jb 0x409920
lea ebx, [esp + 0x74]
mov ecx, esi
push 0x444e08
push ebx
push dword [esp + 8]
call fcn.004091c0
mov dword [esp + 0x74], 0x2ffb84ce
xor eax, eax
mov cl, 1
xor ebp, ebp
nop
nop
nop
movzx edx, word [esp + eax*2 + 0x74]
mov edi, eax
or edi, 0x8d30de2e
xor edi, edx
add edi, 0x96790e8f
mov edx, edi
and edx, 1
xor edi, 1
lea edx, [edi + edx*2]
mov word [esp + eax*2 + 0x74], dx
mov eax, 1
test cl, 1
mov ecx, 0
jne 0x409990
lea eax, [esp + 6]
mov ecx, esi
push eax
push ebx
push dword [esp + 8]
call fcn.004091c0
mov eax, dword [str.Dvh8ui__111]
mov dword [esp + 0x10], eax
mov dword [esp + 0x74], 0x65addca4
mov cl, 1
nop
nop
nop
nop
nop
nop
nop
nop
movzx edi, word [esp + ebp*2 + 0x74]
mov edx, ebp
sub edx, ebp
sub edx, ebp
add edx, 0xaf4f2f7
and edx, 0x8f0e0fb
or edx, 0x85020900
xor edx, edi
mov eax, edx
xor eax, 0x30a18cbb
mov edi, edx
and edi, 0x8506840
xor edi, 0x1df3f7ff
and edi, eax
add edi, edi
xor edx, 0x4f5e7344
mov eax, edi
and eax, edx
xor edx, edi
lea eax, [edx + eax*2]
inc eax
mov word [esp + ebp*2 + 0x74], ax
mov ebp, 1
test cl, 1
mov ecx, 0
jne 0x4099f0
mov dword [esp + 8], esi
mov ecx, esi
push dword [esp + 0x10]
push ebx
push dword [esp + 8]
call fcn.004091c0
mov dword [esp + 0x74], 0x76ae77ac
mov dword [esp + 0x78], 0x81977f9e
mov dword [esp + 0x7c], 0x779373a0
mov word [esp + 0x80], 0x1235
mov eax, 0x3d250207
nop
nop
nop
nop
nop
nop
nop
nop
nop
movzx ecx, word [esp + eax*2 - 0x7a4a039a]
xor ecx, eax
mov edx, ecx
and edx, 0xefc7
add edx, ecx
or ecx, 0x1038
sub edx, ecx
mov word [esp + eax*2 - 0x7a4a039a], dx
inc eax
cmp eax, 0x3d25020e
jne 0x409a90
mov dword [esp + 0x1a], 0x9fa83a5a
xor eax, eax
mov cl, 1
nop
nop
nop
nop
nop
nop
nop
nop
movzx edx, word [esp + eax*2 + 0x1a]
mov edi, 0x11dc
sub edi, eax
lea ebp, [eax + 0xee23]
and ebp, edx
lea esi, [edx + edx]
not esi
add esi, edx
and esi, edi
or esi, ebp
mov edx, 0xffff8ee7
sub edx, esi
mov word [esp + eax*2 + 0x1a], dx
mov eax, 1
xor ebp, ebp
test cl, 1
mov ecx, 0
jne 0x409ad0
lea eax, [esp + 0x1a]
mov ecx, dword [esp + 8]
push ebx
push eax
push dword [esp + 8]
call fcn.004091c0
mov dword [esp + 0x74], 0x76800a7d
mov word [esp + 0x78], 0x931d
mov eax, ebp
movzx edx, word [esp + ebp*2 + 0x74]
lea esi, [ebp - 0x62834fd]
mov ecx, 0x34fc
sub ecx, ebp
xor ecx, esi
and ecx, edx
xor ecx, esi
mov edx, ecx
and edx, 0xa7e5
mov esi, ecx
and esi, 2
mov edi, esi
xor edi, 2
imul edi, edx
or edx, 2
imul edx, esi
lea esi, [ecx + ecx]
and esi, 0x4fce
sub ecx, esi
add ecx, edi
add ecx, edx
add ecx, 0xffffa7e8
mov word [esp + ebp*2 + 0x74], cx
mov ecx, ebp
mov edx, ebp
xor eax, 1
add eax, ebp
xor ebp, 0xfffffffe
or ecx, 1
and ecx, ebp
and edx, 2
sub eax, edx
add eax, ecx
mov ebp, eax
cmp eax, 3
jb 0x409b30
mov ecx, dword [esp + 8]
push dword [esp + 0xc]
push dword [esp + 0x18]
push ebx
push dword [esp + 0xc]
call fcn.00409470
mov dword [esp + 0x1a], 0xca68cd85
mov dword [esp + 0x1e], 0xca5dca66
mov dword [esp + 0x22], 0xca65ca6f
mov dword [esp + 0x26], 0xcda0ca58
mov dword [esp + 0x2a], 0xca56ca7a
mov dword [esp + 0x2e], 0xca94caa0
mov dword [esp + 0x32], 0xcd53cd68
mov dword [esp + 0x36], 0xcaa0ca99
mov dword [esp + 0x3a], 0xcaa3ca9a
mov dword [esp + 0x3e], 0xcaa9ca91
mov dword [esp + 0x42], 0xcaa9ca9b
mov dword [esp + 0x46], 0xcd52caa8
mov dword [esp + 0x4a], 0xca90ca98
mov dword [esp + 0x4e], 0xca8ccab2
mov dword [esp + 0x52], 0xca87cd4f
mov dword [esp + 0x56], 0xcab1ca85
mov dword [esp + 0x5a], 0xcd7cca87
mov dword [esp + 0x5e], 0xca8bcd48
mov dword [esp + 0x62], 0xcabeca85
mov dword [esp + 0x66], 0xca89ca82
mov dword [esp + 0x6a], 0xcabdca8f
mov dword [esp + 0x6e], 0xcd4cca89
mov word [esp + 0x72], 0xcd12
mov eax, 0x21e13e76
mov ecx, 0xc189
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
movzx edx, word [esp + eax*2 - 0x43c27cd2]
mov esi, eax
or esi, edx
not edx
or edx, ecx
and edx, esi
mov ebp, edx
and ebp, 0x20e00c4d
mov esi, edx
and esi, 2
mov edi, esi
xor edi, 2
imul edi, ebp
or ebp, 2
imul ebp, esi
lea esi, [edx + edx]
and esi, 0x41c0189e
sub edx, esi
add edx, edi
lea esi, [edx + ebp]
add edx, ebp
add edx, 0xf0f60c4f
mov edi, edx
not edi
or edi, 1
add esi, edi
add esi, 0xf0f60c4f
or edx, 1
add edx, esi
inc edx
mov word [esp + eax*2 - 0x43c27cd2], dx
inc eax
dec ecx
cmp eax, 0x21e13ea3
jne 0x409c80
movzx eax, word [esp + 0x1a]
test ax, ax
je 0x409d11
lea ebx, [esp + 0x74]
lea ecx, [esp + 0x1c]
nop
nop
nop
mov word [ebx], ax
add ebx, 2
movzx eax, word [ecx]
add ecx, 2
test ax, ax
jne 0x409d00
mov word [ebx], 0
mov edx, dword [esp + 8]
movzx ecx, byte [edx + 0x60]
test cl, cl
je 0x409d41
lea eax, [edx + 0x61]
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
movsx ecx, cl
mov word [ebx], cx
add ebx, 2
movzx ecx, byte [eax]
inc eax
test cl, cl
jne 0x409d30
mov dword [ebx], 0xa000d
mov word [ebx + 4], 0
mov eax, dword [edx + 0x80]
mov dword [esp + 0xc], eax
mov dword [esp + 0x1a], 0x540155f0
mov dword [esp + 0x1e], 0x543b5431
mov word [esp + 0x22], 0x55a3
xor ecx, ecx
movzx ebx, word [esp + ecx*2 + 0x1a]
lea edx, [ecx + ecx]
mov eax, ecx
xor eax, 0x98eabd17
mov esi, eax
and esi, edx
xor eax, edx
lea edi, [eax + esi*2]
mov ebp, edi
and ebp, ebx
mov esi, ebp
and esi, 0xfffffffd
mov eax, ebp
or eax, 0xfffffffd
inc eax
imul eax, esi
mov esi, ebp
and esi, 2
or ebp, 2
imul ebp, esi
sub eax, ebp
add edi, ebx
add eax, edi
add eax, 0x38aa1747
mov esi, eax
and esi, 1
xor eax, 1
lea eax, [eax + esi*2]
mov word [esp + ecx*2 + 0x1a], ax
and edx, 2
xor ecx, 1
add ecx, edx
cmp ecx, 5
jb 0x409d70
lea eax, [esp + 0x74]
push 0x493e0
push dword [esp + 0x10]
mov esi, dword [esp + 8]
push esi
push 0
push 0
push eax
lea eax, [esp + 0x32]
push eax
call fcn.0040c510
add esp, 0x1c
mov ebx, eax
push esi
call fcn.00408140
add esp, 4
mov ecx, dword [esp + 8]
mov eax, dword [ecx + 0x80]
add dword [ecx + 4], eax
mov dword [ecx + 0x80], 0
jmp 0x409e17
mov bl, 1
mov eax, ebx
add esp, 0x110
pop esi
pop edi
pop ebx
pop ebp
ret