Function at 0x409790
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x110
cmp dword [ecx + 0x20], 0
je 0x409c2f
mov esi, ecx
lea eax, [ecx + 0x10]
push eax
call fcn.00405e40
add esp, 4
mov edx, dword [esi + 0x10]
mov eax, dword [esi + 0x58]
mov eax, dword [eax + 0x48]
mov dword [esp + 0xc], 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 + 2], al
mov byte [esp + 3], 0
mov dword [esp + 0x10], edx
lea eax, [edx + 0x400]
push eax
call fcn.00408000
add esp, 4
mov edi, eax
mov dword [esp + 0x74], 0x8985fc82
mov byte [esp + 0x78], 0x6e
xor eax, eax
nop
nop
nop
nop
nop
nop
mov ecx, eax
add cl, 0xba
xor cl, byte [esp + eax + 0x74]
add cl, 0x30
mov byte [esp + eax + 0x74], cl
inc eax
cmp eax, 5
jne 0x409810
lea ebx, [esp + 0x74]
mov ecx, esi
push 0x446288
push ebx
push edi
call fcn.00409020
mov dword [esp + 0x74], 0x25404ab2
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
mov ecx, eax
add cl, 0xb2
xor cl, byte [esp + eax + 0x74]
add cl, 0x70
mov byte [esp + eax + 0x74], cl
inc eax
cmp eax, 4
jne 0x409850
lea eax, [esp + 2]
mov dword [esp + 0x14], esi
mov ecx, esi
push eax
push ebx
mov dword [esp + 0xc], edi
push edi
call fcn.00409020
mov eax, dword [str.hRjzG3__KASTA]
mov dword [esp + 8], eax
mov dword [esp + 0x74], 0x34d7cbcd
xor edx, edx
nop
movzx ebx, byte [esp + edx + 0x74]
mov ebp, edx
and ebp, 1
mov eax, edx
and eax, 2
mov ecx, edx
xor ecx, 0x8e9c99f9
add ecx, edx
sub ecx, eax
add ecx, ebp
lea eax, [ebx*2 + 1]
mov edi, ebx
not edi
lea edi, [edi + ebx*2]
inc edi
mov esi, ebx
sub esi, eax
lea eax, [esi + edi*2]
inc eax
and eax, ecx
or ecx, ebx
lea esi, [ecx + ecx]
not esi
add esi, ecx
not ecx
and ecx, esi
or ecx, eax
mov al, 0x37
sub al, cl
mov byte [esp + edx + 0x74], al
xor edx, 1
lea edx, [edx + ebp*2]
cmp edx, 4
jb 0x409890
mov ebp, dword [esp + 0x14]
mov ecx, ebp
push dword [esp + 8]
lea eax, [esp + 0x78]
push eax
mov ebx, dword [esp + 0xc]
push ebx
call fcn.00409020
mov dword [esp + 0x74], 0xe370d24
mov dword [esp + 0x78], 0x3d083104
mov dword [esp + 0x7c], 0x706013c
mov byte [esp + 0x80], 0xa3
mov eax, 0x5cac87cf
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
movzx edx, byte [esp + eax - 0x5cac875b]
mov ecx, eax
or ecx, edx
lea esi, [eax - 0x5cac8700]
and esi, edx
sub ecx, esi
mov esi, ecx
xor esi, 0xe5643e78
mov edx, ecx
or edx, 0x18888187
and edx, esi
mov esi, ecx
and esi, 2
mov edi, edx
or edx, 2
imul edx, esi
xor esi, 2
and edi, 0xfd
imul edi, esi
xor ecx, 0x87
add ecx, edi
add ecx, edx
inc cl
mov byte [esp + eax - 0x5cac875b], cl
inc eax
cmp eax, 0x5cac87dc
jne 0x409930
mov dword [esp + 0x1a], 0xd1444c4f
mov eax, 0x1e
mov ecx, 0xe1
nop
nop
movzx esi, byte [esp + eax - 4]
mov edx, ecx
xor edx, eax
and edx, esi
xor edx, eax
add dl, 0x10
mov byte [esp + eax - 4], dl
inc eax
dec ecx
cmp eax, 0x22
jne 0x4099a0
lea edx, [esp + 0x1a]
mov ecx, ebp
lea eax, [esp + 0x74]
push eax
push edx
push ebx
call fcn.00409020
mov dword [esp + 0x74], 0x5543475b
mov byte [esp + 0x78], 0xf1
xor eax, eax
xor ecx, ecx
nop
nop
movzx esi, byte [esp + ecx + 0x74]
mov edi, eax
and edi, 0xa
mov edx, ecx
xor edx, 0x8620c155
add edx, edi
mov edi, edx
and edi, esi
add edx, esi
add edi, edi
sub edx, edi
add dl, 0x58
mov byte [esp + ecx + 0x74], dl
inc ecx
add eax, 2
cmp ecx, 5
jne 0x4099e0
mov ecx, ebp
push dword [esp + 0x10]
push dword [esp + 0x10]
lea eax, [esp + 0x7c]
push eax
push ebx
call fcn.004092c0
mov dword [esp + 0x1a], 0xba26b804
mov dword [esp + 0x1e], 0xbe29bc25
mov dword [esp + 0x22], 0xb22fb01a
mov dword [esp + 0x26], 0xb668b427
mov dword [esp + 0x2a], 0xaa20a803
mov dword [esp + 0x2e], 0xae08ac3b
mov dword [esp + 0x32], 0xa241a065
mov dword [esp + 0x36], 0xa630a43e
mov dword [esp + 0x3a], 0x9a0d983b
mov dword [esp + 0x3e], 0x9e0d9c02
mov dword [esp + 0x42], 0x9203903e
mov dword [esp + 0x46], 0x964a9407
mov dword [esp + 0x4a], 0x8a168831
mov dword [esp + 0x4e], 0x8e108c19
mov dword [esp + 0x52], 0x82258052
mov dword [esp + 0x56], 0x86118422
mov dword [esp + 0x5a], 0x7ab27826
mov dword [esp + 0x5e], 0x7edf7c9b
mov dword [esp + 0x62], 0x72e470e0
mov dword [esp + 0x66], 0x76d174ed
mov dword [esp + 0x6a], 0x6afb68d6
mov dword [esp + 0x6e], 0x6ea06ce2
mov word [esp + 0x72], 0x606f
xor eax, eax
nop
nop
nop
nop
movzx edx, byte [esp + eax + 0x1a]
lea esi, [eax + 0x1ae2403f]
mov ecx, 0xc0
sub ecx, eax
xor ecx, esi
and ecx, edx
xor ecx, esi
mov edx, ecx
and edx, 0x8e04005
mov esi, ecx
and esi, 2
mov edi, esi
xor edi, 2
imul edi, edx
or edx, 2
imul edx, esi
add edx, edi
xor ecx, 0x28edfe07
mov esi, edx
and esi, ecx
xor ecx, edx
lea ecx, [ecx + esi*2]
inc cl
mov byte [esp + eax + 0x1a], cl
mov ecx, eax
and ecx, 1
xor eax, 1
lea eax, [eax + ecx*2]
cmp eax, 0x5a
jb 0x409ae0
movzx eax, word [esp + 0x1a]
test ax, ax
lea edx, [esp + 0x74]
je 0x409b61
lea ecx, [esp + 0x1c]
nop
nop
nop
nop
mov word [edx], ax
add edx, 2
movzx eax, word [ecx]
add ecx, 2
test ax, ax
jne 0x409b50
mov word [edx], 0
movzx ecx, byte [ebp + 0x60]
test cl, cl
je 0x409b91
lea eax, [ebp + 0x61]
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
movsx ecx, cl
mov word [edx], cx
add edx, 2
movzx ecx, byte [eax]
inc eax
test cl, cl
jne 0x409b80
mov dword [edx], 0xa000d
mov word [edx + 4], 0
mov eax, dword [ebp + 0x80]
mov dword [esp + 0x1a], 0xe6c0c54
mov dword [esp + 0x1e], 0x298009f
mov word [esp + 0x22], 0x403
mov ecx, 0x93
mov edx, 0x6c
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
movzx esi, byte [esp + ecx - 0x79]
mov ebx, edx
xor ebx, ecx
and ebx, esi
xor ebx, ecx
add bl, 0x68
mov byte [esp + ecx - 0x79], bl
inc ecx
dec edx
cmp ecx, 0x9d
jne 0x409bd0
lea ecx, [esp + 0x74]
push 0x493e0
push eax
mov esi, dword [esp + 0xc]
push esi
push 0
push 0
push ecx
lea eax, [esp + 0x32]
push eax
call fcn.0040c2c0
add esp, 0x1c
mov ebx, eax
push esi
call fcn.00408010
add esp, 4
mov eax, dword [ebp + 0x80]
add dword [ebp + 4], eax
mov dword [ebp + 0x80], 0
jmp 0x409c31
mov bl, 1
mov eax, ebx
add esp, 0x110
pop esi
pop edi
pop ebx
pop ebp
ret