Function at 0x409700
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x10c
cmp dword [ecx + 0x20], 0
je 0x409b67
mov edi, ecx
lea eax, [ecx + 0x10]
push eax
call fcn.00405eb0
add esp, 4
mov edx, dword [edi + 0x10]
mov eax, dword [edi + 0x58]
mov eax, dword [eax + 0x48]
mov dword [esp + 0xc], eax
movzx eax, byte [edi]
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.00407f60
add esp, 4
mov ebp, eax
mov dword [esp + 0x70], 0xaa545b53
mov byte [esp + 0x74], 0xcf
xor eax, eax
nop
nop
nop
nop
nop
nop
movzx edx, byte [esp + eax + 0x70]
lea ebx, [eax - 0x373ee1ad]
mov ecx, 0xac
sub ecx, eax
xor ecx, ebx
and ecx, edx
xor ecx, ebx
add ecx, 0x378fa3f8
mov edx, ecx
xor edx, 0x91
and ecx, 0x6e
add ecx, ecx
sub ecx, edx
inc cl
mov byte [esp + eax + 0x70], cl
mov ecx, eax
xor ecx, 0x7ffffffe
mov edx, eax
or edx, 1
and edx, ecx
xor eax, 1
lea eax, [eax + edx*2]
cmp eax, 5
jb 0x409780
lea esi, [esp + 0x70]
mov ecx, edi
push 0x44732c
push esi
push ebp
call fcn.00408f60
mov dword [esp + 0x70], 0x9acae96
mov eax, 0x78e526b6
nop
nop
nop
nop
movzx ecx, byte [esp + eax - 0x78e52646]
xor ecx, eax
mov edx, ecx
xor edx, 0xb1
and ecx, 0x4e
add ecx, ecx
sub ecx, edx
inc cl
mov byte [esp + eax - 0x78e52646], cl
inc eax
cmp eax, 0x78e526ba
jne 0x4097f0
lea eax, [esp + 2]
mov dword [esp + 8], edi
mov ecx, edi
push eax
push esi
mov dword [esp + 0xc], ebp
push ebp
call fcn.00408f60
mov eax, dword [str.GThHyI]
mov dword [esp + 0x70], 0xf396989c
xor ecx, ecx
nop
movzx ebp, byte [esp + ecx + 0x70]
mov edx, ecx
or edx, 0xdcb9cc70
lea edi, [edx + edx]
sub edi, ecx
add edi, 0x90
and edi, ebp
or edx, ebp
xor edx, edi
add dl, 0x80
mov byte [esp + ecx + 0x70], dl
mov edx, ecx
and edx, 1
xor ecx, 1
lea ecx, [ecx + edx*2]
cmp ecx, 4
jb 0x409840
mov ebx, dword [esp + 8]
mov ecx, ebx
push eax
push esi
mov ebp, dword [esp + 0xc]
push ebp
call fcn.00408f60
mov dword [esp + 0x70], 0x3e073d34
mov dword [esp + 0x74], 0xd380134
mov dword [esp + 0x78], 0x3736310c
mov byte [esp + 0x7c], 0x93
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
mov ecx, eax
add cl, 0x5f
xor cl, byte [esp + eax + 0x70]
add cl, 8
mov byte [esp + eax + 0x70], cl
inc eax
cmp eax, 0xd
jne 0x4098b0
mov dword [esp + 0x16], 0x902b3d3c
xor eax, eax
movzx edx, byte [esp + eax + 0x16]
mov ecx, eax
xor ecx, 0xe5649aca
mov edi, eax
or edi, 0x1a9b6535
and ecx, edi
xor edi, ecx
lea ecx, [edi + ecx*2]
xor ecx, edx
mov edx, ecx
not edx
add ecx, 0x57
and edx, 1
or ecx, 1
add ecx, edx
mov byte [esp + eax + 0x16], cl
inc eax
cmp eax, 4
jne 0x4098d0
lea eax, [esp + 0x16]
mov ecx, ebx
push esi
push eax
push ebp
call fcn.00408f60
mov dword [esp + 0x70], 0xaca4aea0
mov byte [esp + 0x74], 0xa
mov eax, 0xb6
mov ecx, 0x49
nop
nop
nop
nop
movzx edi, byte [esp + eax - 0x46]
mov edx, ecx
xor edx, eax
and edx, edi
xor edx, eax
add dl, 0x50
mov byte [esp + eax - 0x46], dl
inc eax
dec ecx
cmp eax, 0xbb
jne 0x409930
mov ecx, ebx
push dword [esp + 0x10]
push dword [esp + 0x10]
push esi
push ebp
call fcn.00409230
mov dword [esp + 0x16], 0xbd53bb79
mov dword [esp + 0x1a], 0xa134bf50
mov dword [esp + 0x1e], 0xa54aa347
mov dword [esp + 0x22], 0xa985a732
mov dword [esp + 0x26], 0xad35ab5e
mov dword [esp + 0x2a], 0x51b5af3e
mov dword [esp + 0x2e], 0x55745388
mov dword [esp + 0x32], 0x59cd57bb
mov dword [esp + 0x36], 0x5dc85bb6
mov dword [esp + 0x3a], 0x41d05fb7
mov dword [esp + 0x3e], 0x45d643a3
mov dword [esp + 0x42], 0x496747d2
mov dword [esp + 0x46], 0x4da34bac
mov dword [esp + 0x4a], 0x719d4fdc
mov dword [esp + 0x4e], 0x7590735f
mov dword [esp + 0x52], 0x79ec7797
mov dword [esp + 0x56], 0x7da77b9b
mov dword [esp + 0x5a], 0x61827f5e
mov dword [esp + 0x5e], 0x65f1638d
mov dword [esp + 0x62], 0x698c6788
mov dword [esp + 0x66], 0x6dfe6b8b
mov dword [esp + 0x6a], 0x11cd6ff7
mov word [esp + 0x6e], 0x1312
mov eax, 0x15
mov ecx, 0x9c635dea
nop
movzx edx, byte [esp + ecx + 0x639ca22c]
mov edi, eax
xor edi, ecx
and edi, edx
xor edi, ecx
mov edx, 0x50
sub edx, edi
or edx, 1
mov ebp, edi
or ebp, 0xfe
lea ebx, [edi*2]
add ebx, ebp
add ebx, edx
add bl, 0x61
mov byte [esp + ecx + 0x639ca22c], bl
dec eax
inc ecx
cmp ecx, 0x9c635e44
jne 0x409a20
movzx eax, word [esp + 0x16]
test ax, ax
je 0x409a91
lea esi, [esp + 0x70]
lea ecx, [esp + 0x18]
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
mov word [esi], ax
add esi, 2
movzx eax, word [ecx]
add ecx, 2
test ax, ax
jne 0x409a80
mov word [esi], 0
mov ebp, dword [esp + 8]
movzx ecx, byte [ebp + 0x60]
test cl, cl
je 0x409ac1
lea eax, [ebp + 0x61]
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
movsx ecx, cl
mov word [esi], cx
add esi, 2
movzx ecx, byte [eax]
inc eax
test cl, cl
jne 0x409ab0
mov dword [esi], 0xa000d
mov word [esi + 4], 0
mov eax, dword [ebp + 0x80]
mov dword [esp + 0x16], 0xd979d7b9
mov dword [esp + 0x1a], 0xdd75db4a
mov word [esp + 0x1e], 0xdfde
xor ecx, ecx
nop
nop
nop
nop
movzx edx, byte [esp + ecx + 0x16]
lea esi, [ecx + 0xe6]
mov edi, edx
not edi
and esi, edi
mov ebx, 0x19
sub ebx, ecx
or ebx, edi
add edx, ebx
inc edx
or edx, esi
add dl, 0xd0
mov byte [esp + ecx + 0x16], dl
mov edx, ecx
and edx, 1
xor ecx, 1
lea ecx, [ecx + edx*2]
cmp ecx, 0xa
jb 0x409af0
lea ecx, [esp + 0x70]
push 0x493e0
push eax
mov esi, dword [esp + 0xc]
push esi
push 0
push 0
push ecx
lea eax, [esp + 0x2e]
push eax
call fcn.0040c390
add esp, 0x1c
mov ebx, eax
push esi
call fcn.00407f70
add esp, 4
mov eax, dword [ebp + 0x80]
add dword [ebp + 4], eax
mov dword [ebp + 0x80], 0
jmp 0x409b69
mov bl, 1
mov eax, ebx
add esp, 0x10c
pop esi
pop edi
pop ebx
pop ebp
ret