Function at 0x4099f0
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x80
mov dword [esp + 0x40], ecx
mov eax, dword [ecx + 0x80]
mov dword [esp], eax
mov dword [esp + 0x14], 0x9d989a61
mov dword [esp + 0x18], 0x5e9a9d83
mov dword [esp + 0x1c], 0x9a828c78
mov dword [esp + 0x20], 0x8191574e
mov dword [esp + 0x24], 0x919f9c80
mov dword [esp + 0x28], 0x898c948b
mov dword [esp + 0x2c], 0xb071bb4d
mov dword [esp + 0x30], 0xa0ada9a6
mov dword [esp + 0x34], 0x1a0418b0
mov word [esp + 0x38], 0xf06
mov dword [esp + 0x3a], 0
mov eax, 0x19777787
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
movzx esi, byte [esp + eax - 0x19777773]
xor esi, eax
mov edi, esi
and edi, 1
xor esi, 1
lea ebx, [esi + edi*2]
add bl, 0x5c
mov byte [esp + eax - 0x19777773], bl
inc eax
cmp eax, 0x197777b1
jne 0x409a70
mov dword [esp + 0xc], 0x57405c66
mov word [esp + 0x10], 0
mov edi, 0x5cd6fd0e
mov edx, 0xa32902f1
movzx ebx, byte [esp + edi - 0x5cd6fd02]
mov esi, edx
or esi, ebx
mov ebp, edx
xor ebp, ebx
add ebp, ebx
mov eax, ebp
not eax
add eax, esi
sub ebp, esi
and ebp, 0x83
and eax, 0x7c
or eax, ebp
or ebx, edi
xor eax, ebx
xor eax, 0x7c
and eax, ebx
add al, 0xba
mov byte [esp + edi - 0x5cd6fd02], al
inc edi
dec edx
cmp edi, 0x5cd6fd14
jne 0x409ab0
mov dword [esp + 0x44], 0xe4195f5d
mov dword [esp + 0x48], 0xe1ffe9e6
mov dword [esp + 0x4c], 0xf61224ec
mov dword [esp + 0x50], 0xe4e9ede3
mov dword [esp + 0x54], 0x140fe5f1
mov dword [esp + 0x58], 0x9c2e316
mov dword [esp + 0x5c], 0xda1b1f13
mov dword [esp + 0x60], 0xa160c00
mov dword [esp + 0x64], 0x1604c9ef
mov dword [esp + 0x68], 0xddf71801
mov dword [esp + 0x6c], 0x120a181a
mov dword [esp + 0x70], 0x11dafad2
mov dword [esp + 0x74], 0x352b0d11
mov dword [esp + 0x78], 0xc62f3025
mov dword [esp + 0x7c], 0x81ee
mov edi, 0x9c99d3ee
nop
nop
movzx eax, byte [esp + edi + 0x63662c56]
xor eax, edi
mov edx, eax
xor edx, 0x26
mov esi, eax
or esi, 0x59
and esi, edx
xor eax, 0x59
lea eax, [eax + esi*2]
inc al
mov byte [esp + edi + 0x63662c56], al
inc edi
cmp edi, 0x9c99d42a
jne 0x409b70
mov ecx, dword [esp + 0x94]
add ecx, dword [esp]
mov word [esp + 4], 0xb8b7
mov byte [esp + 6], 0xea
mov word [esp + 7], 0
mov edx, 0x1f321f57
movzx eax, byte [esp + edx - 0x1f321f53]
xor eax, edx
mov esi, eax
and esi, 0x400034c
xor eax, 0x6405634c
lea eax, [eax + esi*2]
add eax, 0xeec843c9
mov esi, eax
and esi, 1
xor eax, 1
lea eax, [eax + esi*2]
add al, 0x37
mov byte [esp + edx - 0x1f321f53], al
inc edx
cmp edx, 0x1f321f5c
jne 0x409bc0
movzx ebx, byte [esp + 4]
mov edx, ecx
test bl, bl
je 0x409c1b
lea eax, [esp + 5]
mov edx, ecx
nop
nop
nop
mov byte [edx], bl
inc edx
movzx ebx, byte [eax]
inc eax
test bl, bl
jne 0x409c10
mov byte [edx], 0
mov ebp, dword [esp + 0x40]
movzx eax, byte [ebp + 0x60]
test al, al
mov esi, dword [esp + 0x98]
je 0x409c4b
lea edi, [ebp + 0x61]
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
mov byte [edx], al
inc edx
movzx eax, byte [edi]
inc edi
test al, al
jne 0x409c40
mov byte [edx], 0
movzx eax, byte [esp + 0x44]
test al, al
je 0x409c6b
lea edi, [esp + 0x45]
nop
nop
nop
nop
nop
mov byte [edx], al
inc edx
movzx eax, byte [edi]
inc edi
test al, al
jne 0x409c60
mov byte [edx], 0
movzx eax, byte [esi]
test al, al
je 0x409c8b
inc esi
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
mov byte [edx], al
inc edx
movzx eax, byte [esi]
inc esi
test al, al
jne 0x409c80
mov dword [esp], ecx
mov byte [edx], 0
movzx eax, byte [esp + 0xc]
test al, al
je 0x409cab
lea ecx, [esp + 0xd]
nop
nop
mov byte [edx], al
inc edx
movzx eax, byte [ecx]
inc ecx
test al, al
jne 0x409ca0
mov byte [edx], 0
movzx eax, byte [esp + 0x14]
test al, al
je 0x409ccb
lea ecx, [esp + 0x15]
nop
nop
nop
nop
nop
mov byte [edx], al
inc edx
movzx eax, byte [ecx]
inc ecx
test al, al
jne 0x409cc0
mov byte [edx], 0
mov ebx, dword [esp + 0xa0]
mov ecx, ebx
shr ecx, 2
mov esi, dword [esp + 0x9c]
mov eax, esi
mov edi, edx
xchg esi, eax
rep movsd dword es:[edi], dword [esi]
xchg esi, eax
mov eax, ebx
and eax, 0xfffffffc
add edx, eax
add eax, esi
mov ecx, ebx
shr ecx, 1
and ecx, 1
mov esi, eax
mov edi, edx
xchg esi, esi
rep movsw word es:[edi], word [esi]
xchg esi, esi
mov ecx, ebx
and ecx, 2
add edx, ecx
test bl, 1
je 0x409d17
movzx eax, byte [eax + ecx]
mov byte [edx], al
inc edx
mov dword [esp + 0x44], 0x49474b45
mov byte [esp + 0x48], 0x6c
mov dword [esp + 0x49], 0
mov byte [esp + 0x4d], 0
mov ecx, 0x6c
mov edi, 0x93
nop
nop
nop
nop
nop
movzx eax, byte [esp + ecx - 0x28]
mov esi, ecx
or esi, eax
not eax
or eax, edi
and eax, esi
add al, 0xe4
mov byte [esp + ecx - 0x28], al
inc ecx
dec edi
cmp ecx, 0x76
jne 0x409d40
mov dword [esp + 0x14], 0x2e2fcbcd
mov byte [esp + 0x18], 0xc4
mov dword [esp + 0x19], 0
mov word [esp + 0x1d], 0
xor ecx, ecx
nop
nop
nop
nop
nop
nop
movzx eax, byte [esp + ecx + 0x14]
mov esi, ecx
or esi, 0x149e34b0
and esi, eax
add eax, ecx
add eax, 0x149e34b0
add esi, esi
sub eax, esi
add al, 0x90
mov byte [esp + ecx + 0x14], al
mov eax, ecx
xor eax, 0xfffffffe
or ecx, 1
and eax, ecx
add ecx, eax
cmp ecx, 0xb
jb 0x409d80
movzx eax, byte [esp + 0x14]
test al, al
je 0x409dcb
lea ecx, [esp + 0x15]
nop
nop
mov byte [edx], al
inc edx
movzx eax, byte [ecx]
inc ecx
test al, al
jne 0x409dc0
mov byte [edx], 0
movzx eax, byte [ebp + 0x60]
test al, al
je 0x409deb
lea ecx, [ebp + 0x61]
nop
nop
nop
nop
nop
nop
nop
mov byte [edx], al
inc edx
movzx eax, byte [ecx]
inc ecx
test al, al
jne 0x409de0
mov byte [edx], 0
movzx eax, byte [esp + 0x44]
test al, al
je 0x409e0b
lea ecx, [esp + 0x45]
nop
nop
nop
nop
nop
mov byte [edx], al
inc edx
movzx eax, byte [ecx]
inc ecx
test al, al
jne 0x409e00
mov byte [edx], 0
sub edx, dword [esp]
add dword [ebp + 0x80], edx
add esp, 0x80
pop esi
pop edi
pop ebx
pop ebp
ret 0x10