Function at 0x40a1ac
Capabilities:
Encode data using xor

Disassembly:
mov eax, 0x43f0e8
call fcn.0043e95c
sub esp, 0x354
and dword [esp + 0x35c], 0
and dword [esp + 0x58], 0
push ebx
push ebp
push esi
push edi
push ecx
mov edi, ecx
push 0xcc847ddf
push ecx
lea ecx, [esp + 0xc8]
mov esi, edx
mov dword [esp + 0x6c], edi
call fcn.004083a4
add esp, 0xc
push dword [esp + 0x378]
mov dword [esp + 0x370], 1
cmp dword [esp + 0xd0], 0
lea ebx, [esp + 0xc0]
lea ecx, [esp + 0x80]
cmove ebx, esi
call fcn.0040fbb4
push 0
mov byte [esp + 0x370], 2
call fcn.00424467
pop ecx
push eax
lea eax, [esp + 0x18]
push 0x45ef70
push eax
call fcn.0041e7a9
add esp, 0xc
push eax
lea ecx, [esp + 0x70]
mov byte [esp + 0x370], 3
call fcn.0040fb7b
push eax
push ecx
push ecx
push 0x45ef68
lea ecx, [esp + 0x8c]
mov byte [esp + 0x37c], 4
call fcn.00410296
pop ecx
mov ecx, eax
call fcn.0040fd3d
lea ecx, [esp + 0x6c]
mov byte [esp + 0x36c], 3
call fcn.0040fcc4
lea ecx, [esp + 0x14]
mov byte [esp + 0x36c], 2
call fcn.00402440
and dword [edi + 0x10], 0
mov dword [edi + 0x14], 0xf
mov byte [edi], 0
cmp dword [ebx + 0x14], 0x10
mov dword [esp + 0x68], 1
jb 0x40a868
mov ebx, dword [ebx]
jmp 0x40a868
inc ebx
mov byte [esp + 0x5c], al
cmp al, 0x24
je 0x40a2dc
cmp al, 0x25
je 0x40a2dc
push dword [esp + 0x5c]
push 1
mov ecx, edi
call fcn.00405181
jmp 0x40a868
mov cl, byte [ebx]
inc ebx
mov byte [esp + 0x64], cl
cmp cl, al
jne 0x40a2ed
push dword [esp + 0x64]
jmp 0x40a2ce
and dword [esp + 0x3c], 0
mov dword [esp + 0x40], 0xf
mov byte [esp + 0x2c], 0
movsx esi, cl
mov eax, esi
mov byte [esp + 0x36c], 5
sub eax, 0x21
je 0x40a32c
dec eax
dec eax
je 0x40a32c
sub eax, 7
je 0x40a32c
sub eax, 0x16
je 0x40a32c
sub eax, 0x3b
jne 0x40a336
xor ebp, ebp
mov esi, dword [esp + 0x3c]
jmp 0x40a378
cmp byte [ebx], 0x7b
jne 0x40a336
inc ebx
mov ebp, esi
jmp 0x40a326
push esi
call fcn.0042578c
pop ecx
test eax, eax
je 0x40a83d
lea eax, [esi - 0x30]
push eax
lea eax, [esp + 0x18]
push 0x45ef74
push eax
xor ebp, ebp
call fcn.0041e7a9
add esp, 0xc
lea ecx, [esp + 0x2c]
push eax
call fcn.0040240a
lea ecx, [esp + 0x14]
call fcn.00402440
mov esi, dword [esp + 0x3c]
test esi, esi
jne 0x40a3a4
mov al, byte [ebx]
test al, al
je 0x40a399
cmp al, 0x7d
je 0x40a395
push eax
push 1
lea ecx, [esp + 0x34]
call fcn.00405181
inc ebx
mov al, byte [ebx]
test al, al
jne 0x40a37e
mov esi, dword [esp + 0x3c]
mov al, byte [ebx]
inc ebx
test al, al
je 0x40a878
and dword [esp + 0x54], 0
mov dword [esp + 0x58], 0xf
mov byte [esp + 0x44], 0
cmp byte [esp + 0x13], 0x25
mov byte [esp + 0x36c], 6
jne 0x40a427
lea edx, [esp + 0x2c]
lea ecx, [esp + 0x14]
call fcn.0040167b
cmp dword [eax + 0x14], 8
jb 0x40a3da
mov eax, dword [eax]
push 0x104
lea ecx, [esp + 0x158]
push ecx
push eax
call dword [0x442104]
push 0
push 1
lea ecx, [esp + 0x1c]
mov esi, eax
call fcn.00402b12
test esi, esi
je 0x40a61a
push 0
lea edx, [esp + 0x158]
lea ecx, [esp + 0x18]
call fcn.0041e0ca
pop ecx
push eax
lea ecx, [esp + 0x48]
call fcn.0040240a
jmp 0x40a611
push 0x45ef78
call fcn.004010b1
pop ecx
push eax
push 0x45ef78
push esi
push ecx
lea ecx, [esp + 0x3c]
call fcn.0040286e
test eax, eax
jne 0x40a460
xor esi, esi
call fcn.004255c3
lea ecx, [esp + 0x7c]
imul cl
xor byte [esp + esi + 0x6c], al
inc esi
cmp esi, 0x10
jb 0x40a449
jmp 0x40a48b
mov esi, 0x45ef80
push esi
call fcn.004010b1
pop ecx
push eax
push esi
push dword [esp + 0x44]
push ecx
lea ecx, [esp + 0x3c]
call fcn.0040286e
test eax, eax
jne 0x40a4c0
lea eax, [esp + 0x6c]
push eax
call dword [0x44223c]
sub esp, 0x10
lea esi, [esp + 0x7c]
mov edi, esp
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
lea ecx, [esp + 0x24]
movsd dword es:[edi], dword [esi]
call fcn.0041d706
add esp, 0x10
lea ecx, [esp + 0x44]
push eax
call fcn.0040240a
lea ecx, [esp + 0x14]
call fcn.00402440
mov edi, dword [esp + 0x60]
jmp 0x40a61a
mov esi, 0x45ef88
push esi
call fcn.004010b1
pop ecx
push eax
push esi
push dword [esp + 0x44]
push ecx
lea ecx, [esp + 0x3c]
call fcn.0040286e
test eax, eax
jne 0x40a4f8
push 0xffffffffffffffff
push eax
push dword [esp + 0x384]
lea ecx, [esp + 0x50]
call fcn.004027dc
jmp 0x40a61a
cmp dword [esp + 0x40], 0x10
lea eax, [esp + 0x2c]
cmovae eax, dword [esp + 0x2c]
push eax
lea ecx, [esp + 0x80]
call fcn.00410419
test al, al
je 0x40a544
cmp dword [esp + 0x40], 0x10
lea eax, [esp + 0x2c]
cmovae eax, dword [esp + 0x2c]
push ecx
push eax
lea ecx, [esp + 0x84]
call fcn.00410296
lea ecx, [esp + 0x14]
push ecx
mov ecx, eax
call fcn.0040fdaf
jmp 0x40a418
xor eax, eax
push 0xffffffffffffffff
push eax
mov dword [esp + 0xa4], eax
mov byte [esp + 0x94], al
lea eax, [esp + 0x34]
push eax
lea ecx, [esp + 0x98]
mov dword [esp + 0xac], 0xf
call fcn.004027dc
lea ecx, [esp + 0x8c]
mov byte [esp + 0x36c], 7
call fcn.004082e2
push eax
lea eax, [esp + 0x18]
push 0x45ef8c
push eax
call fcn.0041e7a9
add esp, 0xc
lea ecx, [esp + 0x8c]
mov byte [esp + 0x36c], 9
call fcn.00402440
mov ecx, dword [0x460950]
add ecx, 0x10
cmp dword [esp + 0x28], 0x10
lea eax, [esp + 0x14]
cmovae eax, dword [esp + 0x14]
push eax
call fcn.00410419
test al, al
je 0x40a609
lea eax, [esp + 0xa4]
push eax
push ecx
mov ecx, dword [0x460950]
lea eax, [esp + 0x1c]
push eax
lea ecx, [ecx + 0x10]
call fcn.004103ee
pop ecx
mov ecx, eax
call fcn.0040fdaf
push eax
lea ecx, [esp + 0x48]
call fcn.0040240a
lea ecx, [esp + 0xa4]
call fcn.00402440
mov byte [esp + 0x36c], 6
lea ecx, [esp + 0x14]
call fcn.00402440
sub ebp, 0x21
je 0x40a7f4
dec ebp
dec ebp
je 0x40a79d
sub ebp, 7
je 0x40a6e2
sub ebp, 0x16
je 0x40a64e
push 0xffffffffffffffff
push 0
lea eax, [esp + 0x4c]
push eax
mov ecx, edi
call fcn.0040aad8
jmp 0x40a832
push ecx
lea ecx, [esp + 0x11c]
call fcn.0041147b
mov esi, eax
lea eax, [esp + 0x44]
push eax
lea ecx, [esp + 0xd8]
mov byte [esp + 0x370], 0xc
call fcn.0040fb7b
push eax
mov byte [esp + 0x370], 0xd
mov edx, dword [esi]
lea eax, [esp + 0x18]
push eax
mov ecx, esi
call dword [edx + 4]
lea ecx, [esp + 0xd4]
mov byte [esp + 0x36c], 0xf
call fcn.0040fcc4
mov byte [esp + 0x36c], 0x10
lea ecx, [esp + 0x120]
mov dword [esp + 0x118], 0x4497bc
call fcn.00402440
push 0xffffffffffffffff
push 0
lea eax, [esp + 0x1c]
push eax
mov ecx, edi
mov dword [esp + 0x124], 0x44983c
call fcn.0040aad8
lea ecx, [esp + 0x14]
jmp 0x40a82d
push ecx
lea ecx, [esp + 0xf8]
call fcn.0041147b
mov esi, eax
lea eax, [esp + 0x44]
push eax
lea ecx, [esp + 0xe8]
mov byte [esp + 0x370], 0x11
call fcn.0040fb7b
push eax
mov byte [esp + 0x370], 0x12
mov edx, dword [esi]
lea eax, [esp + 0x18]
push eax
mov ecx, esi
call dword [edx + 4]
lea ecx, [esp + 0xe4]
mov byte [esp + 0x36c], 0x14
call fcn.0040fcc4
mov byte [esp + 0x36c], 0x15
lea ecx, [esp + 0xfc]
mov dword [esp + 0xf4], 0x4497bc
call fcn.00402440
mov eax, dword [esp + 0x24]
add eax, 0xfffffffe
push eax
push 1
lea eax, [esp + 0xac]
push eax
lea ecx, [esp + 0x20]
mov dword [esp + 0x100], 0x44983c
call fcn.0040a90a
push 0xffffffffffffffff
push 0
push eax
mov ecx, edi
mov byte [esp + 0x378], 0x16
call fcn.0040aad8
lea ecx, [esp + 0xa4]
call fcn.00402440
jmp 0x40a6d9
cmp dword [esp + 0x58], 0x10
mov edx, dword [esp + 0x54]
lea ecx, [esp + 0x44]
cmovae ecx, dword [esp + 0x44]
push ecx
push ecx
push 0
push 0
call fcn.0041de0f
and edx, 0x7fffffff
push edx
push eax
lea eax, [esp + 0xa4]
push 0x45ef90
push eax
call fcn.0041e7a9
add esp, 0x20
push 0xffffffffffffffff
push 0
push eax
mov ecx, edi
mov byte [esp + 0x378], 0xb
call fcn.0040aad8
lea ecx, [esp + 0x8c]
jmp 0x40a82d
push ecx
push 0xcc847ddf
push 0x10000
lea edx, [esp + 0x50]
lea ecx, [esp + 0x148]
call fcn.004082fc
add esp, 0xc
push 0xffffffffffffffff
push 0
push eax
mov ecx, edi
mov byte [esp + 0x378], 0xa
call fcn.0040aad8
lea ecx, [esp + 0x13c]
call fcn.00402440
lea ecx, [esp + 0x44]
call fcn.00402440
jmp 0x40a857
push dword [esp + 0x5c]
mov ecx, edi
push 1
call fcn.00405181
push dword [esp + 0x64]
mov ecx, edi
push 1
call fcn.00405181
lea ecx, [esp + 0x2c]
mov byte [esp + 0x36c], 2
call fcn.00402440
mov al, byte [ebx]
mov byte [esp + 0x13], al
test al, al
jne 0x40a2bd
jmp 0x40a881
lea ecx, [esp + 0x2c]
call fcn.00402440
lea ecx, [esp + 0x7c]
mov byte [esp + 0x36c], 1
call fcn.0040fcc4
lea ecx, [esp + 0xbc]
call fcn.00402440
mov ecx, dword [esp + 0x364]
mov eax, edi
pop edi
pop esi
pop ebp
mov dword fs:[0], ecx
pop ebx
leave
ret