Function at 0x589e70
Capabilities:
Encode data using xor
Get disk information

Disassembly:
push ebp
mov ebp, esp
add esp, 0xffffffb8
push ebx
push esi
push edi
xor ecx, ecx
mov dword [ebp - 0x48], ecx
mov dword [ebp - 0x14], ecx
mov dword [ebp - 0x1c], ecx
mov dword [ebp - 0x20], ecx
mov dword [ebp - 8], edx
mov dword [ebp - 4], eax
xor eax, eax
push ebp
push 0x58a184
push dword fs:[eax]
mov dword fs:[eax], esp
mov eax, dword [ebp - 8]
call fcn.004044c0
xor eax, eax
push ebp
push 0x589f06
push dword fs:[eax]
mov dword fs:[eax], esp
mov eax, 4
call fcn.00402784
mov ebx, eax
push 0
push 0
lea eax, [ebp - 0x10]
push eax
lea eax, [ebp - 0xc]
push eax
push ebx
push 0
push 0
push 0x58a194
call sub.kernel32.dll_GetVolumeInformationA
mov esi, dword [ebx]
mov dword [ebp - 0x18], esi
mov eax, esi
xor edx, edx
push edx
push eax
lea edx, [ebp - 0x14]
mov eax, 8
call fcn.00409b50
mov edx, 4
mov eax, ebx
call fcn.004027a4
xor eax, eax
pop edx
pop ecx
pop ecx
mov dword fs:[eax], edx
jmp 0x589f39
mov ebx, 4
lea eax, [ebp - 0x38]
mov dword [eax], 0xffffffff
add eax, 4
dec ebx
jne 0x589f41
call fcn.00589e0c
test al, al
je 0x58a13a
lea eax, [ebp - 0x38]
call fcn.00589e20
mov eax, dword [ebp - 0x38]
mov ebx, eax
add ebx, dword [ebp - 0x34]
add ebx, dword [ebp - 0x30]
add ebx, dword [ebp - 0x2c]
mov esi, eax
shr esi, 0xc
and esi, 3
mov edx, eax
shr edx, 8
and edx, 0xf
imul esi, edx
mov edx, eax
shr edx, 4
and edx, 0xf
imul esi, edx
and eax, 0xf
imul esi, eax
lea eax, [ebp - 0x44]
call fcn.00589e38
lea edx, [ebp - 0x44]
lea eax, [ebp - 0x1c]
mov ecx, 0xc
call fcn.00404740
mov eax, dword [ebp - 0x18]
xor edx, edx
push edx
push eax
mov eax, ebx
imul esi
cdq
add eax, dword [esp]
adc edx, dword [esp + 4]
add esp, 8
mov edi, eax
mov eax, dword [ebp - 0x1c]
call fcn.004047ac
mov esi, eax
test esi, esi
jle 0x589fe5
mov ebx, 1
mov eax, dword [ebp - 0x1c]
movzx eax, byte [eax + ebx - 1]
xor edi, eax
inc ebx
dec esi
jne 0x589fd7
mov eax, edi
xor edx, edx
push edx
push eax
lea edx, [ebp - 0x20]
mov eax, 8
call fcn.00409b50
mov dword [ebp - 0x28], 1
mov eax, dword [ebp - 0x20]
call fcn.004047ac
mov esi, eax
test esi, esi
jle 0x58a0d8
mov ebx, 1
push 0
push 5
mov eax, ebx
cdq
push edx
push eax
mov eax, edi
xor edx, edx
call fcn.00405818
push edx
push eax
mov eax, dword [ebp - 0x20]
mov al, byte [eax + ebx - 1]
and eax, 0xff
xor edx, edx
xor eax, dword [esp]
xor edx, dword [esp + 4]
add esp, 8
push edx
push eax
mov eax, dword [ebp - 0x14]
mov al, byte [eax + ebx - 1]
and eax, 0xff
xor edx, edx
add eax, dword [esp]
adc edx, dword [esp + 4]
add esp, 8
call fcn.00405818
mov byte [ebp - 0x21], al
mov eax, dword [ebp - 4]
test byte [eax + 0x99], 0x10
je 0x58a0b0
mov eax, dword [ebp - 0x28]
mov edx, dword [ebp - 4]
mov edx, dword [edx + 0x90]
dec eax
test edx, edx
je 0x58a086
cmp eax, dword [edx - 4]
jb 0x58a08b
call fcn.004035a8
inc eax
mov al, byte [edx + eax - 1]
xor byte [ebp - 0x21], al
inc dword [ebp - 0x28]
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0x90]
call fcn.004047ac
cmp eax, dword [ebp - 0x28]
jge 0x58a0b0
mov dword [ebp - 0x28], 1
lea ecx, [ebp - 0x48]
xor eax, eax
mov al, byte [ebp - 0x21]
mov edx, 2
call fcn.00409b28
mov edx, dword [ebp - 0x48]
mov eax, dword [ebp - 8]
call fcn.004047b4
mov eax, dword [ebp - 8]
inc ebx
dec esi
jne 0x58a016
mov eax, dword [ebp - 8]
mov eax, dword [eax]
call fcn.004047ac
cmp eax, 0x10
jle 0x58a0ff
mov eax, dword [ebp - 8]
push eax
mov eax, dword [ebp - 8]
mov eax, dword [eax]
mov ecx, 0x10
mov edx, 1
call fcn.00404a0c
mov eax, dword [ebp - 8]
mov eax, dword [eax]
call fcn.004047ac
cmp eax, 0x10
jge 0x58a159
mov eax, dword [ebp - 8]
mov eax, dword [eax]
call fcn.004047ac
mov ebx, eax
inc ebx
cmp ebx, 0x10
jg 0x58a159
mov ecx, dword [ebp - 8]
mov ecx, dword [ecx]
mov eax, dword [ebp - 8]
mov edx, 0x58a1a0
call fcn.004047f8
inc ebx
cmp ebx, 0x11
jne 0x58a120
jmp 0x58a159
mov eax, dword [ebp - 4]
cmp word [eax + 0xfa], 0
je 0x58a159
mov ebx, dword [ebp - 4]
mov edx, dword [ebp - 4]
mov eax, dword [ebx + 0xfc]
call dword [ebx + 0xf8]
xor eax, eax
pop edx
pop ecx
pop ecx
mov dword fs:[eax], edx
push 0x58a18b
lea eax, [ebp - 0x48]
call fcn.004044c0
lea eax, [ebp - 0x20]
mov edx, 2
call fcn.004044e4
lea eax, [ebp - 0x14]
call fcn.004044c0
ret