Function at 0x10004110
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
sub esp, 0x24
mov eax, dword [section..data]
xor eax, esp
mov dword [esp + 0x20], eax
push ebx
push esi
push edi
xor edi, edi
mov esi, ecx
mov dword [esp + 0xc], edi
mov dword [esp + 0x20], edi
test esi, esi
je 0x10004147
mov eax, dword [esi]
test eax, eax
je 0x10004147
push esi
call eax
add esp, 4
mov ecx, eax
jmp 0x10004149
xor ecx, ecx
test ecx, ecx
mov edx, str._nul_
mov eax, edx
cmovne eax, ecx
mov ecx, esi
test eax, eax
cmovne edx, eax
mov dword [esp + 0x1c], edx
lea edx, [esp + 0x20]
call fcn.10002960
mov ebx, eax
mov dword [esp + 0x10], ebx
test ebx, ebx
jns 0x1000438d
cmp ebx, 0x969c9adf
je 0x100042e9
cmp ebx, 0x98859690
je 0x1000426c
cmp ebx, 0xacb1bbb8
jne 0x1000425c
mov ecx, esi
call fcn.100048d0
test eax, eax
jne 0x1000425c
test esi, esi
je 0x1000425c
mov eax, dword [esi + 0x18]
test eax, eax
je 0x1000425c
push esi
call eax
mov ebx, eax
add esp, 4
mov dword [esp + 0x14], ebx
lea eax, [ebx - 0x21]
cmp eax, 0x1fffdf
ja 0x1000425c
mov ecx, ebx
call fcn.10004080
mov edi, eax
mov dword [esp + 0xc], edi
test edi, edi
jne 0x100041f2
mov esi, str.memory_allocation
jmp 0x10004899
mov eax, dword [edi + 0x24f4]
mov dword [edi + 0x2c], str.sndh
mov ecx, dword [esi + 0xc]
mov dword [esp + 0x10], eax
test ecx, ecx
je 0x1000423e
push ebx
push eax
push esi
call ecx
mov ebx, dword [esp + 0x2c]
mov esi, eax
add esp, 0xc
test esi, esi
jle 0x10004245
mov ecx, dword [esp + 0x10]
mov edx, esi
movzx eax, byte [ecx]
lea ecx, [ecx + 1]
add ebx, eax
imul ebx, ebx, 0x401
mov eax, ebx
shr eax, 6
xor ebx, eax
sub edx, 1
jne 0x10004222
jmp 0x10004245
mov ebx, dword [esp + 0x20]
or esi, 0xffffffff
mov edx, dword [esp + 0x14]
cmp esi, edx
jne 0x1000425c
mov ecx, edi
call fcn.10003530
test eax, eax
je 0x1000487b
mov ebx, dword [sym.imp.api_ms_win_crt_heap_l1_1_0.dll_free]
mov esi, str.read_header
jmp 0x1000489f
mov ecx, esi
call fcn.100048d0
test eax, eax
jne 0x1000425c
push dword [0x1003fea8]
mov ecx, esi
call fcn.100057d0
mov esi, eax
add esp, 4
test esi, esi
je 0x100042ad
mov eax, dword [esi + 4]
test eax, eax
je 0x100042ad
push esi
call eax
add esp, 4
test eax, eax
jne 0x100042b7
mov ecx, esi
call fcn.10004110
mov edi, eax
mov dword [esp + 0xc], edi
jmp 0x100042b7
xor edi, edi
mov dword [esp + 0xc], edi
test esi, esi
je 0x1000425c
mov eax, dword [esi + 8]
test eax, eax
je 0x100042c4
push esi
call eax
add esp, 4
mov eax, dword [esi + 0x28]
test eax, eax
je 0x100042d1
push esi
call eax
add esp, 4
test edi, edi
jne 0x10004379
mov ebx, dword [sym.imp.api_ms_win_crt_heap_l1_1_0.dll_free]
mov esi, str.read_header
jmp 0x1000489f
test esi, esi
je 0x1000425c
mov eax, dword [esi + 0x1c]
test eax, eax
je 0x1000425c
push esi
call eax
mov ecx, eax
add esp, 4
neg ecx
cmp eax, 0xffffffff
je 0x1000425c
test ecx, ecx
je 0x10004337
jle 0x1000431a
mov eax, dword [esi + 0x20]
jmp 0x1000431d
mov eax, dword [esi + 0x24]
test eax, eax
je 0x1000425c
push ecx
push esi
call eax
add esp, 8
cmp eax, 0xffffffff
je 0x1000425c
jmp 0x1000433f
test eax, eax
jne 0x1000425c
lea edx, [esp + 0x10]
mov ecx, esi
call fcn.100049b0
mov esi, eax
test esi, esi
je 0x1000425c
mov edx, dword [esp + 0x10]
mov ecx, esi
call fcn.10003380
mov ebx, dword [sym.imp.api_ms_win_crt_heap_l1_1_0.dll_free]
mov edi, eax
push esi
mov dword [esp + 0x10], edi
call ebx
add esp, 4
test edi, edi
je 0x10004262
mov eax, edi
pop edi
pop esi
pop ebx
mov ecx, dword [esp + 0x20]
xor ecx, esp
call fcn.1003d20f
mov esp, ebp
pop ebp
ret
mov ecx, ebx
call fcn.10004080
mov dword [esp + 0xc], eax
test eax, eax
je 0x100041e8
mov edi, dword [eax + 0x24f4]
mov dword [eax + 0x2c], 0x10079268
test esi, esi
je 0x10004894
mov eax, dword [esi + 0xc]
test eax, eax
je 0x10004894
push ebx
push edi
push esi
call eax
mov ebx, dword [esp + 0x2c]
mov edx, eax
add esp, 0xc
test edx, edx
jle 0x100043ee
mov ecx, edx
movzx eax, byte [edi]
lea edi, [edi + 1]
add ebx, eax
imul ebx, ebx, 0x401
mov eax, ebx
shr eax, 6
xor ebx, eax
sub ecx, 1
jne 0x100043d4
mov ecx, dword [esp + 0x10]
cmp edx, ecx
jne 0x10004894
mov eax, dword [esp + 0xc]
xor edi, edi
mov esi, dword [eax + 0x24f4]
add eax, 0x18
mov dword [esp + 0x14], eax
cmp ecx, 8
jl 0x10004866
cmp byte [esi], 0x53
jne 0x1000486a
cmp byte [esi + 1], 0x43
jne 0x10004866
mov dl, byte [esi + 2]
sub dword [esp + 0x10], 8
mov byte [esp + 0x24], dl
mov cl, byte [esi + 3]
mov byte [esp + 0x25], cl
mov byte [esp + 0x26], 0
movsx eax, byte [esi + 7]
shl eax, 8
mov dword [esp + 0x20], eax
movzx eax, byte [esi + 6]
add dword [esp + 0x20], eax
shl dword [esp + 0x20], 8
movzx eax, byte [esi + 5]
add dword [esp + 0x20], eax
movzx eax, byte [esi + 4]
add esi, 8
shl dword [esp + 0x20], 8
add dword [esp + 0x20], eax
cmp dl, 0x36
jne 0x1000447f
cmp cl, 0x38
je 0x1000484d
cmp dl, 0x44
jne 0x100044b7
cmp cl, 0x46
jne 0x10004514
movsx ecx, byte [esi + 3]
movzx eax, byte [esi + 2]
shl ecx, 8
add ecx, eax
movzx eax, byte [esi + 1]
shl ecx, 8
add ecx, eax
movzx eax, byte [esi]
shl ecx, 8
add ecx, eax
mov eax, dword [esp + 0xc]
mov dword [eax + 4], ecx
jmp 0x1000484d
cmp dl, 0x46
jne 0x100044c1
cmp cl, 0x4e
je 0x100044cb
cmp dl, 0x4d
jne 0x10004514
cmp cl, 0x4e
jne 0x100044d7
mov edx, dword [esp + 0x14]
mov dword [edx + 4], esi
jmp 0x1000484d
cmp cl, 0x55
jne 0x1000484d
mov edi, dword [esp + 0xc]
mov ecx, dword [edi + 8]
cmp ecx, 0x3f
je 0x1000487b
imul eax, ecx, 0x94
add edi, 0x84
add edi, eax
lea eax, [ecx + 1]
mov ecx, dword [esp + 0xc]
lea edx, [edi + 0x2c]
mov dword [esp + 0x14], edx
mov dword [ecx + 8], eax
jmp 0x1000484d
cmp dl, 0x41
jne 0x1000452e
cmp cl, 0x4e
jne 0x100045cb
mov eax, dword [esp + 0x14]
mov dword [eax + 0xc], esi
jmp 0x1000484d
cmp dl, 0x43
jne 0x1000456d
cmp cl, 0x4e
jne 0x1000484d
mov eax, dword [esp + 0x14]
mov ecx, esi
mov edx, dword [eax + 0xc]
call fcn.10005910
test eax, eax
je 0x1000484d
mov edx, dword [esp + 0x14]
mov ecx, dword [esp + 0xc]
push esi
push str.composer
call fcn.100024d0
add esp, 8
jmp 0x1000484d
cmp dl, 0x52
jne 0x1000458b
cmp cl, 0x45
jne 0x1000484d
test edi, edi
je 0x10004871
mov dword [edi + 0x24], esi
jmp 0x1000484d
cmp dl, 0x44
jne 0x100045c6
cmp cl, 0x30
jne 0x10004828
test edi, edi
je 0x10004871
movsx ecx, byte [esi + 3]
movzx eax, byte [esi + 2]
shl ecx, 8
add ecx, eax
movzx eax, byte [esi + 1]
shl ecx, 8
add ecx, eax
movzx eax, byte [esi]
shl ecx, 8
add ecx, eax
mov dword [edi], ecx
jmp 0x1000484d
cmp dl, 0x41
jne 0x10004602
cmp cl, 0x54
jne 0x1000484d
test edi, edi
je 0x10004871
movsx ecx, byte [esi + 3]
movzx eax, byte [esi + 2]
shl ecx, 8
add ecx, eax
movzx eax, byte [esi + 1]
shl ecx, 8
add ecx, eax
movzx eax, byte [esi]
shl ecx, 8
add ecx, eax
mov dword [edi + 4], ecx
jmp 0x1000484d
cmp dl, 0x54
jne 0x10004650
cmp cl, 0x49
jne 0x1000478c
test edi, edi
je 0x10004871
movsx ecx, byte [esi + 3]
movzx eax, byte [esi + 2]
shl ecx, 8
add ecx, eax
movzx eax, byte [esi + 1]
shl ecx, 8
add ecx, eax
movzx eax, byte [esi]
shl ecx, 8
add ecx, eax
js 0x10004640
cmp ecx, 0x15180
jle 0x10004642
xor ecx, ecx
imul eax, ecx, 0x3e8
mov dword [edi + 0xc], eax
jmp 0x1000484d
cmp dl, 0x46
jne 0x100046d9
cmp cl, 0x52
jne 0x100046a2
test edi, edi
je 0x10004871
movsx ecx, byte [esi + 3]
movzx eax, byte [esi + 2]
shl ecx, 8
add ecx, eax
movzx eax, byte [esi + 1]
shl ecx, 8
add ecx, eax
movzx eax, byte [esi]
shl ecx, 8
add eax, ecx
mov dword [edi + 0x10], eax
cmp eax, 0x1000000
mov eax, dword [esp + 0x20]
jb 0x10004851
mov dword [edi + 0x10], 0
jmp 0x10004851
cmp cl, 0x51
jne 0x10004769
test edi, edi
je 0x10004871
movsx ecx, byte [esi + 3]
movzx eax, byte [esi + 2]
shl ecx, 8
add ecx, eax
movzx eax, byte [esi + 1]
shl ecx, 8
add ecx, eax
movzx eax, byte [esi]
shl ecx, 8
add ecx, eax
mov dword [edi + 8], ecx
jmp 0x1000484d
cmp dl, 0x4c
jne 0x10004764
cmp cl, 0x50
jne 0x10004729
test edi, edi
je 0x10004871
movsx ecx, byte [esi + 3]
movzx eax, byte [esi + 2]
shl ecx, 8
add ecx, eax
movzx eax, byte [esi + 1]
shl ecx, 8
add ecx, eax
movzx eax, byte [esi]
shl ecx, 8
add eax, ecx
mov dword [edi + 0x1c], eax
cmp eax, 0xffffffff
mov eax, dword [esp + 0x20]
jge 0x10004851
mov dword [edi + 0x1c], 0
jmp 0x10004851
cmp cl, 0x46
jne 0x1000484d
test edi, edi
je 0x10004871
movsx ecx, byte [esi + 3]
movzx eax, byte [esi + 2]
shl ecx, 8
add ecx, eax
movzx eax, byte [esi + 1]
shl ecx, 8
add ecx, eax
movzx eax, byte [esi]
shl ecx, 8
add ecx, eax
or dword [edi + 0x20], 8
mov dword [edi + 0x18], ecx
jmp 0x1000484d
cmp dl, 0x46
jne 0x10004783
cmp cl, 0x58
jne 0x1000484d
test edi, edi
je 0x10004871
or dword [edi + 0x20], 1
jmp 0x1000484d
cmp dl, 0x54
jne 0x10004823
cmp cl, 0x59
jne 0x100047cd
test edi, edi
je 0x10004871
movsx edx, byte [esi + 3]
movzx eax, byte [esi + 2]
shl edx, 8
add edx, eax
movzx eax, byte [esi + 1]
shl edx, 8
add edx, eax
movzx eax, byte [esi]
shl edx, 8
add edx, eax
mov ecx, edx
or ecx, 8
test edx, 0xfffffff8
cmove ecx, edx
mov dword [edi + 0x28], ecx
jmp 0x1000484d
cmp cl, 0x47
jne 0x1000484d
mov ecx, esi
lea edx, [ecx + 1]
mov al, byte [ecx]
inc ecx
test al, al
jne 0x100047d7
sub ecx, edx
mov edx, dword [esp + 0x14]
lea eax, [ecx + 1]
mov ecx, dword [esp + 0xc]
add eax, esi
push eax
push esi
mov dword [esp + 0x20], eax
call fcn.100024d0
add esp, 8
test eax, eax
jns 0x1000484d
push dword [esp + 0x18]
test edi, edi
mov ecx, str.disk
mov eax, str.track
push esi
cmove eax, ecx
push eax
push str.file68:_unable_to_set__s_tag__s__s_n
call fcn.10004d30
add esp, 0x10
jmp 0x1000484d
cmp dl, 0x44
jne 0x10004843
cmp cl, 0x41
jne 0x1000484d
test edi, edi
je 0x10004871
mov eax, dword [esp + 0x20]
mov dword [edi + 0x90], esi
mov dword [edi + 0x8c], eax
jmp 0x10004851
cmp dl, 0x45
jne 0x1000484d
cmp cl, 0x46
je 0x10004877
mov eax, dword [esp + 0x20]
mov ecx, dword [esp + 0x10]
add esi, eax
sub ecx, eax
mov dword [esp + 0x10], ecx
cmp ecx, 8
jge 0x10004416
test ecx, ecx
je 0x10004877
mov esi, str.prematured_end_of_file
jmp 0x10004899
lea esi, [esp + 0x24]
jmp 0x10004899
mov edi, dword [esp + 0xc]
mov ecx, edi
mov dword [edi + 0x14], ebx
call fcn.10002e70
test eax, eax
je 0x10004379
mov esi, str.validation_test
jmp 0x10004899
mov esi, str.read_data
mov ebx, dword [sym.imp.api_ms_win_crt_heap_l1_1_0.dll_free]
push dword [esp + 0xc]
call ebx
add esp, 4
push esi
push dword [esp + 0x20]
push str.file68:_load__s_failed___s__n
call fcn.10004d90
mov ecx, dword [esp + 0x38]
add esp, 0xc
xor eax, eax
pop edi
pop esi
pop ebx
xor ecx, esp
call fcn.1003d20f
mov esp, ebp
pop ebp
ret