Function at 0x408545
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0xcf2552
mov eax, dword fs:[0]
push eax
mov dword fs:[0], esp
sub esp, 0xcc
mov dword [ebp - 0x10], esp
mov dword [ebp - 0x1c], edi
mov dword [ebp - 0x18], esi
mov dword [ebp - 0x14], ebx
mov edx, dword [ebp + 0x10]
movsx eax, byte [edx + 0x15]
mov dword [ebp - 0x20], ecx
test eax, eax
je 0x408670
push 0xd27f00
lea ecx, [ebp - 0x64]
call fcn.00407a09
mov dword [ebp - 4], 0
lea ecx, [ebp - 0x8c]
mov dword [ebp - 0x38], ecx
mov dword [ebp - 0x34], ecx
call 0xcbb9c2
mov dword [ebp - 4], 1
mov dword [ebp - 0x8c], 0xe442a8
lea esi, [ebp - 0x80]
xor eax, eax
mov dword [ebp - 0x68], 0xf
mov dword [ebp - 0x6c], eax
mov byte [ebp - 0x7c], al
mov ebx, dword [ebp - 0x50]
mov dword [ebp - 0x30], esi
test ebx, ebx
lea edi, [ebp - 0x64]
mov dword [ebp - 0x2c], edi
mov dword [ebp - 0x28], eax
jae 0x4085e4
call 0xcee566
mov ebx, dword [ebp - 0x50]
lea eax, [ebp - 0x80]
lea edx, [ebp - 0x64]
cmp ebx, 0xffffffff
jbe 0x4085f4
mov ebx, 0xffffffff
mov dword [ebp - 0x3c], ebx
cmp eax, edx
je 0x408b0d
mov dword [ebp - 0x40], ebx
cmp ebx, 0xfffffffe
jbe 0x40860f
call 0xcee527
mov ebx, dword [ebp - 0x40]
mov esi, dword [ebp - 0x68]
cmp esi, ebx
jb 0x408a05
test ebx, ebx
je 0x4089e6
test ebx, ebx
ja 0x408983
mov dword [ebp - 4], 0
push 0xe4a780
mov eax, dword [ebp - 0x38]
lea edx, [ebp - 0x8c]
mov dword [eax], 0xe442cc
push edx
call 0xcbbc3f
mov dword [ebp - 4], 0xffffffff
mov eax, dword [ebp - 0x4c]
cmp eax, 0x10
jae 0x408975
mov edx, dword [ebp + 0x10]
mov dword [ebp - 0x4c], 0xf
xor eax, eax
mov dword [ebp - 0x50], eax
mov byte [ebp - 0x60], al
mov eax, dword [ebp + 0xc]
mov ebx, edx
test eax, eax
je 0x409024
movsx eax, byte [edx + 0x15]
test eax, eax
je 0x40868c
call 0xcbb9a9
jmp 0x4086c4
mov eax, dword [edx + 8]
movsx ecx, byte [eax + 0x15]
test ecx, ecx
je 0x4086ab
mov ecx, dword [edx + 4]
movsx eax, byte [ecx + 0x15]
test eax, eax
je 0x408bf4
mov dword [ebp + 0x10], ecx
jmp 0x4086c4
mov edx, dword [eax]
movsx ecx, byte [edx + 0x15]
test ecx, ecx
jne 0x4086c1
mov eax, dword [eax]
mov edx, dword [eax]
movsx ecx, byte [edx + 0x15]
test ecx, ecx
je 0x4086b5
mov dword [ebp + 0x10], eax
mov eax, dword [ebx]
movsx edx, byte [eax + 0x15]
mov edi, ebx
test edx, edx
je 0x4086d5
mov esi, dword [ebx + 8]
jmp 0x4086ea
mov edx, dword [ebx + 8]
movsx ecx, byte [edx + 0x15]
test ecx, ecx
je 0x4086e4
mov esi, eax
jmp 0x4086ea
mov edi, dword [ebp + 0x10]
mov esi, dword [edi + 8]
cmp edi, ebx
je 0x408f44
mov dword [eax + 4], edi
mov eax, dword [ebx]
mov dword [edi], eax
cmp edi, dword [ebx + 8]
jne 0x408702
mov ecx, edi
jmp 0x40871f
mov ecx, dword [edi + 4]
movsx eax, byte [esi + 0x15]
test eax, eax
je 0x408f3c
mov dword [ecx], esi
mov eax, dword [ebx + 8]
mov dword [edi + 8], eax
mov edx, dword [ebx + 8]
mov dword [edx + 4], edi
mov eax, dword [ebp - 0x20]
mov dword [ebp - 0x24], eax
mov eax, dword [eax + 4]
cmp ebx, dword [eax + 4]
je 0x408f34
mov eax, dword [ebx + 4]
cmp ebx, dword [eax]
je 0x40873d
mov dword [eax + 8], edi
jmp 0x40873f
mov dword [eax], edi
mov eax, dword [ebx + 4]
mov dword [edi + 4], eax
movzx eax, byte [edi + 0x14]
movzx edx, byte [ebx + 0x14]
mov byte [edi + 0x14], dl
mov byte [ebx + 0x14], al
movsx eax, byte [ebx + 0x14]
cmp eax, 1
je 0x408c1b
push ebx
call 0xcba23a
pop ecx
mov edx, dword [ebp - 0x20]
mov eax, dword [edx + 8]
test eax, eax
je 0x408777
add eax, 0xffffffff
mov dword [edx + 8], eax
mov eax, dword [ebp + 8]
mov edx, dword [ebp + 0xc]
mov ecx, dword [ebp + 0x10]
mov edi, dword [ebp - 0x1c]
mov esi, dword [ebp - 0x18]
mov ebx, dword [ebp - 0x14]
mov dword [eax], edx
mov dword [eax + 4], ecx
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
mov esp, ebp
pop ebp
ret 0xc
mov edx, dword [ebp - 0x94]
test edx, edx
ja 0x408890
mov edx, dword [ebp - 0x98]
mov eax, dword [edx + 0x18]
cmp eax, 0x10
jae 0x40887c
mov dword [edx + 0x18], 0xf
mov eax, dword [ebp - 0x98]
mov dword [eax + 0x14], 0
mov eax, dword [ebp - 0x98]
mov edx, dword [eax + 0x18]
cmp edx, 0x10
jb 0x408821
mov eax, dword [eax + 4]
jmp 0x408824
add eax, 4
mov ecx, dword [ebp - 0xa0]
mov byte [eax], 0
mov edx, dword [ebp - 0x98]
mov eax, dword [ebp - 0x9c]
mov dword [edx + 4], eax
mov ebx, dword [ebp - 0x98]
mov dword [ebx + 0x18], ecx
mov edi, dword [ebp - 0x98]
mov esi, dword [ebp - 0x94]
mov dword [edi + 0x14], esi
mov edx, dword [ebp - 0x98]
mov eax, dword [edx + 0x18]
cmp eax, 0x10
jb 0x408867
mov edx, dword [edx + 4]
jmp 0x40886a
add edx, 4
mov eax, dword [ebp - 0x94]
mov byte [edx + eax], 0
mov ebx, dword [ebp - 0x40]
jmp 0x408622
push dword [edx + 4]
call 0xcba23a
pop ecx
mov edx, dword [ebp - 0x98]
jmp 0x4087fa
mov ecx, dword [ebp - 0x98]
mov eax, dword [ecx + 0x18]
cmp eax, 0x10
jb 0x4088a3
mov ecx, dword [ecx + 4]
jmp 0x4088a6
add ecx, 4
mov ebx, dword [ebp - 0xa0]
movzx eax, byte [ebp - 0xb4]
mov byte [ebp - 0xb8], al
push edx
add ebx, 1
push ecx
push ebx
push dword [ebp - 0x9c]
call 0xcbbc89
add esp, 0x10
jmp 0x4087e8
push dword [ebp - 0x60]
call 0xcba23a
pop ecx
jmp 0x40865e
mov ebx, dword [ebp - 0x30]
mov ecx, dword [ebx + 0x18]
cmp ecx, 0x10
jb 0x408993
mov ebx, dword [ebx + 4]
jmp 0x408996
add ebx, 4
mov edx, dword [ebp - 0x2c]
mov eax, dword [edx + 0x18]
cmp eax, 0x10
jb 0x4089a6
mov edx, dword [edx + 4]
jmp 0x4089a9
add edx, 4
add edx, dword [ebp - 0x28]
push dword [ebp - 0x3c]
movzx eax, byte [ebp - 0x44]
mov byte [ebp - 0x48], al
push edx
push ecx
push ebx
call 0xcbbc89
add esp, 0x10
mov ecx, dword [ebp - 0x3c]
mov eax, dword [ebp - 0x30]
mov dword [eax + 0x14], ecx
mov eax, dword [ebp - 0x30]
mov edx, dword [eax + 0x18]
cmp edx, 0x10
jb 0x4089da
mov eax, dword [eax + 4]
jmp 0x4089dd
add eax, 4
mov byte [eax + ecx], 0
jmp 0x40862a
mov dword [ebp - 0x6c], 0
cmp esi, 0x10
jb 0x4089f7
mov eax, dword [ebp - 0x7c]
jmp 0x4089fa
lea eax, [ebp - 0x7c]
mov byte [eax], 0
mov ebx, dword [ebp - 0x40]
jmp 0x408622
mov edx, dword [ebp - 0x6c]
mov dword [ebp - 0xac], ebx
mov ecx, ebx
lea eax, [ebp - 0x80]
or ecx, 0xf
cmp ecx, 0xfffffffe
mov dword [ebp - 0x98], eax
mov dword [ebp - 0x94], edx
mov dword [ebp - 0xb0], ecx
mov dword [ebp - 0xa0], ecx
jbe 0x408a41
mov dword [ebp - 0xb0], ebx
mov dword [ebp - 0xa0], ebx
jmp 0x408a58
mov ebx, ecx
mov ecx, esi
shr ecx, 1
mov eax, 0xaaaaaaab
mul ebx
shr edx, 1
cmp ecx, edx
ja 0x408aea
mov dword [ebp - 0x9c], 0
mov dword [ebp - 4], 2
mov eax, dword [ebp - 0xb0]
add eax, 1
mov dword [ebp - 0xb0], eax
jne 0x408a84
xor eax, eax
mov dword [ebp - 0xb0], eax
jmp 0x408acb
mov ecx, eax
xor edx, edx
mov eax, 0xffffffff
div ecx
cmp eax, 1
jae 0x408acb
mov dword [ebp - 0xbc], 0
lea eax, [ebp - 0xbc]
push eax
lea ecx, [ebp - 0xcc]
call 0xcbb9d3
mov dword [ebp - 0xcc], 0xe40cb4
lea eax, [ebp - 0xcc]
push 0xe4a720
push eax
call 0xcbbc3f
mov eax, dword [ebp - 0xb0]
push eax
call 0xcba1d0
pop ecx
mov dword [ebp - 0x9c], eax
mov dword [ebp - 4], 1
jmp 0x4087da
mov eax, ecx
neg eax
add eax, 0xfffffffe
cmp esi, eax
ja 0x408a58
lea eax, [esi + ecx]
mov dword [ebp - 0xb0], eax
mov dword [ebp - 0xa0], eax
jmp 0x408a58
mov edx, dword [ebp - 0x6c]
cmp edx, ebx
jae 0x408b1c
call 0xcee566
mov edx, dword [ebp - 0x6c]
mov eax, edx
sub eax, ebx
cmp eax, 0xffffffff
mov esi, eax
jb 0x408b2c
mov esi, 0xffffffff
test esi, esi
ja 0x408b9d
test edx, edx
jae 0x408b3c
call 0xcee566
mov edx, dword [ebp - 0x6c]
test edx, edx
mov ebx, edx
jb 0x408b47
mov ebx, 0
test ebx, ebx
jbe 0x40862a
mov ecx, dword [ebp - 0x68]
cmp ecx, 0x10
jb 0x408b5f
mov esi, dword [ebp - 0x7c]
mov eax, dword [ebp - 0x7c]
jmp 0x408b65
lea esi, [ebp - 0x7c]
lea eax, [ebp - 0x7c]
mov byte [ebp - 0xa8], 0
add eax, ebx
sub edx, ebx
push edx
push eax
push ecx
push esi
call 0xcbbd04
add esp, 0x10
mov edx, dword [ebp - 0x6c]
mov eax, dword [ebp - 0x68]
sub edx, ebx
mov dword [ebp - 0x6c], edx
cmp eax, 0x10
jb 0x408b91
mov eax, dword [ebp - 0x7c]
jmp 0x408b94
lea eax, [ebp - 0x7c]
mov byte [eax + edx], 0
jmp 0x40862a
mov ecx, dword [ebp - 0x68]
cmp ecx, 0x10
jb 0x408bad
mov edi, dword [ebp - 0x7c]
mov edx, dword [ebp - 0x7c]
jmp 0x408bb3
lea edi, [ebp - 0x7c]
lea edx, [ebp - 0x7c]
mov byte [ebp - 0xa4], 0
add edi, ebx
sub ecx, ebx
add ebx, esi
add ebx, edx
sub eax, esi
push eax
push ebx
push ecx
push edi
call 0xcbbd04
add esp, 0x10
mov edx, dword [ebp - 0x6c]
mov eax, dword [ebp - 0x68]
sub edx, esi
mov dword [ebp - 0x6c], edx
cmp eax, 0x10
jb 0x408be5
mov eax, dword [ebp - 0x7c]
jmp 0x408be8
lea eax, [ebp - 0x7c]
mov byte [eax + edx], 0
mov edx, dword [ebp - 0x6c]
jmp 0x408b30
cmp edx, dword [ecx + 8]
jne 0x4086a6
mov dword [ebp + 0x10], ecx
mov edx, ecx
mov ecx, dword [ecx + 4]
movsx eax, byte [ecx + 0x15]
test eax, eax
jne 0x4086a6
cmp edx, dword [ecx + 8]
je 0x408bfd
jmp 0x4086a6
mov eax, dword [ebp - 0x24]
mov edx, dword [eax + 4]
cmp esi, dword [edx + 4]
je 0x408c2f
movsx eax, byte [esi + 0x14]
cmp eax, 1
je 0x408c38
mov byte [esi + 0x14], 1
jmp 0x408760
mov edi, dword [ecx]
cmp esi, edi
je 0x408dc6
movsx eax, byte [edi + 0x14]
test eax, eax
je 0x408d75
movsx eax, byte [edi + 0x15]
test eax, eax
jne 0x408c7b
mov eax, dword [edi + 8]
movsx edx, byte [eax + 0x14]
mov dword [ebp - 0xb0], eax
cmp edx, 1
jne 0x408cf1
mov eax, dword [edi]
movsx edx, byte [eax + 0x14]
cmp edx, 1
jne 0x408c96
mov byte [edi + 0x14], 0
mov eax, dword [ebp - 0x24]
mov edx, dword [eax + 4]
mov esi, ecx
mov ecx, dword [ecx + 4]
cmp esi, dword [edx + 4]
je 0x408c2f
movsx eax, byte [esi + 0x14]
cmp eax, 1
je 0x408c38
jmp 0x408c2f
movzx eax, byte [ecx + 0x14]
mov byte [edi + 0x14], al
mov edx, 1
mov byte [ecx + 0x14], dl
mov edi, dword [edi]
mov byte [edi + 0x14], dl
mov eax, dword [ecx]
mov edx, dword [eax + 8]
mov dword [ecx], edx
mov edi, dword [eax + 8]
movsx edx, byte [edi + 0x15]
test edx, edx
je 0x408cec
mov edi, dword [ebp - 0x24]
mov edx, dword [ecx + 4]
mov dword [eax + 4], edx
mov edx, dword [edi + 4]
cmp ecx, dword [edx + 4]
je 0x408ce7
mov edx, dword [ecx + 4]
cmp ecx, dword [edx + 8]
je 0x408cd9
mov dword [edx], eax
jmp 0x408cdc
mov dword [edx + 8], eax
mov dword [eax + 8], ecx
mov dword [ecx + 4], eax
jmp 0x408c2f
mov dword [edx + 4], eax
jmp 0x408cdc
mov dword [edi + 4], ecx
jmp 0x408cbc
mov eax, dword [edi]
movsx edx, byte [eax + 0x14]
cmp edx, 1
jne 0x408c96
mov eax, dword [ebp - 0xb0]
mov byte [eax + 0x14], 1
mov eax, dword [edi + 8]
mov byte [edi + 0x14], 0
mov edx, dword [eax]
mov dword [edi + 8], edx
mov edx, dword [eax]
mov dword [ebp - 0xb0], eax
movsx eax, byte [edx + 0x15]
test eax, eax
je 0x408d70
mov edx, dword [ebp - 0xb0]
mov eax, dword [edi + 4]
mov dword [edx + 4], eax
mov eax, dword [ebp - 0x24]
mov edx, dword [eax + 4]
cmp edi, dword [edx + 4]
je 0x408d65
mov eax, dword [edi + 4]
cmp edi, dword [eax]
je 0x408d4b
mov edx, dword [ebp - 0xb0]
mov dword [eax + 8], edx
jmp 0x408d53
mov edx, dword [ebp - 0xb0]
mov dword [eax], edx
mov eax, dword [ebp - 0xb0]
mov dword [eax], edi
mov dword [edi + 4], eax
mov edi, dword [ecx]
jmp 0x408c96
mov eax, dword [ebp - 0xb0]
mov dword [edx + 4], eax
jmp 0x408d53
mov dword [edx + 4], edi
jmp 0x408d22
mov byte [edi + 0x14], 1
mov eax, dword [ecx]
mov byte [ecx + 0x14], 0
mov edx, dword [eax + 8]
mov dword [ecx], edx
mov edx, dword [eax + 8]
movsx edi, byte [edx + 0x15]
test edi, edi
je 0x408dc1
mov edi, dword [ebp - 0x24]
mov edx, dword [ecx + 4]
mov dword [eax + 4], edx
mov edx, dword [edi + 4]
cmp ecx, dword [edx + 4]
je 0x408dbc
mov edx, dword [ecx + 4]
cmp ecx, dword [edx + 8]
je 0x408dac
mov dword [edx], eax
jmp 0x408daf
mov dword [edx + 8], eax
mov dword [eax + 8], ecx
mov edi, dword [ecx]
mov dword [ecx + 4], eax
jmp 0x408c4e
mov dword [edx + 4], eax
jmp 0x408daf
mov dword [edx + 4], ecx
jmp 0x408d8f
mov edi, dword [ecx + 8]
movsx eax, byte [edi + 0x14]
test eax, eax
je 0x408ee4
movsx eax, byte [edi + 0x15]
test eax, eax
jne 0x408c7b
mov eax, dword [edi]
movsx edx, byte [eax + 0x14]
mov dword [ebp - 0xb0], eax
cmp edx, 1
jne 0x408e5c
mov eax, dword [edi + 8]
movsx edx, byte [eax + 0x14]
cmp edx, 1
je 0x27078c77
mov bh, 0xe6
invalid
sub esi, edi
mov dword [0x635d17e3], eax
cmpsb byte [esi], byte es:[edi]
pop ss
pop edx
test dh, dh
push 0x5b
fdivr dword [esi + 0x7793205e]
mov edx, 0x542c0a49
dec esi
in al, 0x36
in eax, 0x6a
dec ecx
sbb ch, bh
sub dh, dh
not byte [esi]
cmpsd dword [esi], dword es:[edi]
insd dword es:[edi], dx
add esp, esp
push ds
lds esp, [ecx + 0x4da75579]
ret
invalid
xor esp, dword [esi]
mov esi, 0x508bba57
scasb al, byte es:[edi]
daa
pop esp
xlatb
dec ebx
sub eax, 0x33efdea0
push ebx
adc ah, dh
and eax, ecx
pushal
in eax, dx
imul ecx, ecx, 0xdf3f44f8
mov eax, dword [0x94fb0d3e]
out dx, eax
xor edx, dword [ebx + 0x12]
out 0x23, al
shl dword [eax - 0x13], 0x69
leave
clc
inc esp
aas
fbld tbyte [ecx - 0x6b04f2c2]
mov esi, esi
push ebp
loope 0x408fd1
adc eax, 0xd59a3ca
pop ebp
invalid
int 0xb6
inc edx
xor esp, dword [edi]
add dh, byte [eax - 0x69916492]
invalid
out 0x90, al
lea esi, [ecx]
sbb edi, dword [ebx - 0x12]
lcall 0xdd35, 0xac227240
sbb eax, 0x8991d224
inc ebp
ret 0xd631
movsb byte es:[edi], byte [esi]
jmp 0x408fac