Function at 0x45ac70
Capabilities:
Encode data using xor

Disassembly:
sub esp, 0x58
mov eax, dword [0x8294ec]
push ebx
xor ebx, ebx
push ebp
push esi
cmp eax, ebx
push edi
mov dword [esp + 0x24], ecx
jne 0x45b1ae
call dword [sym.imp.KERNEL32.dll_GetCurrentThreadId]
mov dword [0x829480], eax
mov al, byte [0x81c644]
test al, al
jne 0x45acaf
mov ecx, 0x83f450
call fcn.005ddd50
mov byte [0x81c644], 1
mov ebp, dword [sym.imp.WINMM.dll_timeGetTime]
call ebp
mov ecx, dword [0x83f450]
cmp eax, ecx
jbe 0x45acc7
sub eax, ecx
mov esi, eax
jmp 0x45acd0
mov ecx, dword [0x83f454]
lea esi, [ecx + eax]
mov ecx, 0x85cb40
call fcn.005e6780
mov al, byte [0x81c644]
xor esi, 0xaaaaaaaa
test al, al
mov dword [0x829478], esi
jne 0x45ad00
mov ecx, 0x83f450
call fcn.005ddd50
mov byte [0x81c644], 1
call ebp
mov ecx, dword [0x83f450]
cmp eax, ecx
jbe 0x45ad12
sub eax, ecx
mov esi, eax
jmp 0x45ad1b
mov edx, dword [0x83f454]
lea esi, [edx + eax]
mov ecx, 0x85cb40
call fcn.005e6780
mov ecx, dword [0x829478]
lea eax, [esi + esi]
xor eax, 0x55555555
mov dword [0x8294e8], ebx
mov dword [0x820dd0], eax
mov al, byte [0x81c644]
not ecx
test al, al
mov dword [0x8294d8], ecx
jne 0x45ad60
mov ecx, 0x83f450
call fcn.005ddd50
mov byte [0x81c644], 1
call ebp
mov ecx, dword [0x83f450]
cmp eax, ecx
jbe 0x45ad70
sub eax, ecx
jmp 0x45ad78
mov edx, dword [0x83f454]
add eax, edx
mov dword [0x829470], eax
mov al, byte [0x81c644]
test al, al
jne 0x45ad97
mov ecx, 0x83f450
call fcn.005ddd50
mov byte [0x81c644], 1
call ebp
mov ecx, dword [0x83f450]
cmp eax, ecx
jbe 0x45ada7
sub eax, ecx
jmp 0x45adaf
mov ecx, dword [0x83f454]
add eax, ecx
mov dword [0x829468], eax
mov ecx, 0x2000
xor eax, eax
mov edi, 0x820e44
rep stosd dword es:[edi], eax
mov eax, dword [0x8294e8]
mov dword [0x8294f0], ebx
cmp eax, ebx
je 0x45b5a8
push ebx
call fcn.0045d120
mov eax, dword [0x81c700]
add esp, 4
inc eax
cmp eax, 0x186a0
mov dword [0x81c700], eax
jb 0x45b5a8
mov eax, dword [0x820dd0]
mov ecx, dword [0x829478]
mov edx, eax
mov dword [0x81c700], ebx
sub edx, ecx
cmp edx, eax
jne 0x45ae23
inc dword [0x8294f0]
call fcn.0045dca0
mov ecx, dword [0x829478]
mov eax, dword [0x820dd0]
mov edx, ecx
sub edx, eax
cmp edx, ecx
jne 0x45ae36
inc dword [0x8294f0]
call fcn.0045dca0
mov al, byte [0x81c644]
test al, al
jne 0x45ae50
mov ecx, 0x83f450
call fcn.005ddd50
mov byte [0x81c644], 1
call ebp
mov ecx, dword [0x83f450]
cmp eax, ecx
jbe 0x45ae60
sub eax, ecx
jmp 0x45ae68
mov ecx, dword [0x83f454]
add eax, ecx
mov ecx, dword [0x829468]
cmp eax, ecx
jb 0x45ae88
mov edx, ecx
or edx, eax
je 0x45ae88
mov edx, eax
sub edx, ecx
cmp edx, 0x3a98
jbe 0x45b5a8
mov cl, byte [0x81c6fc]
test cl, cl
jne 0x45b5a8
mov ecx, dword [0x8294e8]
mov dword [0x829468], eax
mov eax, dword [0x829478]
cmp ecx, ebx
mov byte [0x81c6fc], 1
not eax
jle 0x45af04
mov ebx, 0x820e44
mov dword [esp + 0x18], ecx
mov ecx, dword [ebx]
test ecx, ecx
je 0x45aef6
mov esi, dword [ecx + 4]
test esi, esi
jle 0x45aef6
mov edx, dword [ecx]
mov edi, dword [edx + 0xc]
sar edi, 2
test edx, edx
je 0x45aef6
test esi, esi
jle 0x45aef6
mov ebp, esi
mov ecx, dword [edx]
xor eax, ecx
lea ecx, [edx + 0x14]
test edi, edi
jle 0x45aef0
mov esi, edi
xor eax, dword [ecx]
add ecx, 4
dec esi
jne 0x45aee8
mov edx, dword [edx + 4]
dec ebp
jne 0x45aedb
mov ecx, dword [esp + 0x18]
add ebx, 4
dec ecx
mov dword [esp + 0x18], ecx
jne 0x45aebc
cmp eax, dword [0x8294d8]
je 0x45af17
inc dword [0x8294f0]
call fcn.0045dca0
mov eax, dword [0x8294e8]
xor edi, edi
cmp eax, edi
je 0x45b19b
mov eax, dword [0x829464]
mov dword [esp + 0x14], edi
cmp eax, edi
je 0x45b161
push eax
call fcn.0045c0b0
add esp, 4
cmp eax, edi
je 0x45b156
mov edx, dword [0x829488]
push edi
add eax, 0x14
push 4
push eax
lea eax, [edx*4 + 0x82948c]
push eax
call fcn.0045cba0
mov eax, dword [0x829488]
add esp, 0x10
lea ecx, [eax*4 + 0x82948c]
inc eax
cmp eax, 8
mov dword [esp + 0x14], ecx
mov dword [0x829488], eax
jl 0x45af86
mov dword [0x829488], edi
push edi
call fcn.0045d120
mov eax, dword [0x81c700]
add esp, 4
inc eax
cmp eax, 0x186a0
mov dword [0x81c700], eax
jb 0x45b146
mov eax, dword [0x820dd0]
mov ecx, dword [0x829478]
mov edx, eax
mov dword [0x81c700], edi
sub edx, ecx
cmp edx, eax
jne 0x45afce
call fcn.00406630
mov ecx, dword [0x829478]
mov eax, dword [0x820dd0]
mov edx, ecx
sub edx, eax
cmp edx, ecx
jne 0x45afdb
call fcn.00406630
mov ecx, 0x83f450
call fcn.004065e0
mov ecx, dword [0x829468]
cmp eax, ecx
jb 0x45b005
mov edx, eax
or edx, ecx
je 0x45b005
mov edx, eax
sub edx, ecx
cmp edx, 0x3a98
jbe 0x45b146
mov cl, byte [0x81c6fc]
test cl, cl
jne 0x45b146
mov esi, dword [0x829478]
mov dword [0x829468], eax
mov eax, dword [0x8294e8]
mov byte [0x81c6fc], 1
cmp eax, edi
mov dword [esp + 0x18], edi
not esi
jle 0x45b0a8
mov dword [esp + 0x10], 0x820e44
mov eax, dword [esp + 0x10]
mov eax, dword [eax]
test eax, eax
je 0x45b08a
mov ecx, dword [eax + 4]
test ecx, ecx
jle 0x45b08a
mov edi, dword [eax]
mov ebp, dword [edi + 0xc]
sar ebp, 2
test edi, edi
je 0x45b08a
xor ebx, ebx
test ecx, ecx
jle 0x45b08a
mov ecx, edi
call fcn.00406620
xor esi, eax
lea eax, [edi + 0x14]
test ebp, ebp
jle 0x45b07b
mov ecx, ebp
mov edx, dword [eax]
add eax, 4
xor esi, edx
dec ecx
jne 0x45b071
mov ecx, dword [esp + 0x10]
mov edi, dword [edi + 4]
inc ebx
mov edx, dword [ecx]
cmp ebx, dword [edx + 4]
jl 0x45b05f
mov eax, dword [esp + 0x18]
mov edx, dword [esp + 0x10]
mov ecx, dword [0x8294e8]
inc eax
add edx, 4
cmp eax, ecx
mov dword [esp + 0x18], eax
mov dword [esp + 0x10], edx
jl 0x45b03c
cmp esi, dword [0x8294d8]
je 0x45b0b5
call fcn.00406630
mov eax, dword [0x8294e8]
xor esi, esi
cmp eax, esi
je 0x45b13d
mov ecx, 0x829464
mov dword [esp + 0x10], esi
call fcn.00406620
test eax, eax
je 0x45b0ff
mov ecx, dword [0x829464]
lea eax, [esp + 0x10]
push eax
push ecx
call fcn.00407b70
add esp, 8
test al, al
je 0x45b0fa
mov eax, dword [esp + 0x10]
cmp eax, esi
je 0x45b0fa
cmp dword [eax], 0x29874362
je 0x45b0ff
call fcn.00406630
mov ecx, 0x8294b0
mov dword [esp + 0x10], esi
call fcn.00406620
test eax, eax
je 0x45b13d
mov eax, dword [0x8294b0]
lea edx, [esp + 0x10]
push edx
push eax
call fcn.00407b70
add esp, 8
test al, al
je 0x45b138
mov eax, dword [esp + 0x10]
cmp eax, esi
je 0x45b138
cmp dword [eax], 0xbad0bad
je 0x45b13d
call fcn.00406630
mov byte [0x81c6fc], 0
xor edi, edi
mov eax, dword [esp + 0x14]
cmp eax, edi
je 0x45b156
cmp dword [eax], 0x29874362
je 0x45b161
inc dword [0x8294f0]
call fcn.0045dca0
mov eax, dword [0x8294b0]
mov dword [esp + 0x14], edi
cmp eax, edi
je 0x45b19b
lea ecx, [esp + 0x14]
push ecx
push eax
call fcn.00407b70
add esp, 8
test al, al
je 0x45b190
mov eax, dword [esp + 0x14]
cmp eax, edi
je 0x45b190
cmp dword [eax], 0xbad0bad
je 0x45b19b
inc dword [0x8294f0]
call fcn.0045dca0
mov eax, dword [esp + 0x24]
pop edi
pop esi
pop ebp
mov byte [0x81c6fc], 0
pop ebx
add esp, 0x58
ret
cmp eax, 1
jne 0x45b5a8
cmp dword [0x829464], ebx
jne 0x45b5a8
cmp dword [0x8294b0], ebx
jne 0x45b5a8
mov eax, dword [0x81c700]
mov dword [esp + 0x1c], 0x29874362
inc eax
mov dword [esp + 0x20], 0xbad0bad
cmp eax, 0x186a0
mov dword [0x81c700], eax
jb 0x45b3a2
mov eax, dword [0x820dd0]
mov ecx, dword [0x829478]
mov edx, eax
mov dword [0x81c700], ebx
sub edx, ecx
cmp edx, eax
jne 0x45b224
inc dword [0x8294f0]
call fcn.0045dca0
mov ecx, dword [0x829478]
mov eax, dword [0x820dd0]
mov edx, ecx
sub edx, eax
cmp edx, ecx
jne 0x45b237
inc dword [0x8294f0]
call fcn.0045dca0
mov al, byte [0x81c644]
test al, al
jne 0x45b251
mov ecx, 0x83f450
call fcn.005ddd50
mov byte [0x81c644], 1
call dword [sym.imp.WINMM.dll_timeGetTime]
mov ecx, dword [0x83f450]
cmp eax, ecx
jbe 0x45b265
sub eax, ecx
jmp 0x45b26d
mov ecx, dword [0x83f454]
add eax, ecx
mov ecx, dword [0x829468]
cmp eax, ecx
jb 0x45b28d
mov edx, eax
or edx, ecx
je 0x45b28d
mov edx, eax
sub edx, ecx
cmp edx, 0x3a98
jbe 0x45b3a2
mov cl, byte [0x81c6fc]
test cl, cl
jne 0x45b3a2
mov ecx, dword [0x8294e8]
mov dword [0x829468], eax
mov eax, dword [0x829478]
cmp ecx, ebx
mov byte [0x81c6fc], 1
not eax
jle 0x45b309
mov ebx, 0x820e44
mov dword [esp + 0x18], ecx
mov ecx, dword [ebx]
test ecx, ecx
je 0x45b2fb
mov esi, dword [ecx + 4]
test esi, esi
jle 0x45b2fb
mov edx, dword [ecx]
mov edi, dword [edx + 0xc]
sar edi, 2
test edx, edx
je 0x45b2fb
test esi, esi
jle 0x45b2fb
mov ebp, esi
mov ecx, dword [edx]
xor eax, ecx
lea ecx, [edx + 0x14]
test edi, edi
jle 0x45b2f5
mov esi, edi
xor eax, dword [ecx]
add ecx, 4
dec esi
jne 0x45b2ed
mov edx, dword [edx + 4]
dec ebp
jne 0x45b2e0
mov ecx, dword [esp + 0x18]
add ebx, 4
dec ecx
mov dword [esp + 0x18], ecx
jne 0x45b2c1
cmp eax, dword [0x8294d8]
je 0x45b31c
inc dword [0x8294f0]
call fcn.0045dca0
mov eax, dword [0x8294e8]
xor ebx, ebx
cmp eax, ebx
je 0x45b39b
mov eax, dword [0x829464]
mov dword [esp + 0x14], ebx
cmp eax, ebx
je 0x45b361
lea edx, [esp + 0x14]
push edx
push eax
call fcn.00407b70
add esp, 8
test al, al
je 0x45b356
mov eax, dword [esp + 0x14]
cmp eax, ebx
je 0x45b356
cmp dword [eax], 0x29874362
je 0x45b361
inc dword [0x8294f0]
call fcn.0045dca0
mov eax, dword [0x8294b0]
mov dword [esp + 0x14], ebx
cmp eax, ebx
je 0x45b39b
lea ecx, [esp + 0x14]
push ecx
push eax
call fcn.00407b70
add esp, 8
test al, al
je 0x45b390
mov eax, dword [esp + 0x14]
cmp eax, ebx
je 0x45b390
cmp dword [eax], 0xbad0bad
je 0x45b39b
inc dword [0x8294f0]
call fcn.0045dca0
mov byte [0x81c6fc], 0
push 0x18
call fcn.00672b70
mov esi, eax
add esp, 4
cmp esi, ebx
je 0x45b584
push 1
lea edx, [esp + 0x20]
push 4
lea eax, [esi + 0x14]
push edx
push eax
mov dword [esi + 4], ebx
mov dword [esi + 8], ebx
mov dword [esi + 0xc], 4
mov byte [esi + 0x10], 0
call fcn.0045cb20
mov ecx, dword [0x820ddc]
push ecx
call fcn.0045ccf0
mov ebp, eax
add esp, 0x14
cmp ebp, 0xffffffff
je 0x45b584
cmp dword [ebp*4 + 0x820e44], ebx
je 0x45b584
mov dword [esp + 0x10], ebx
push ebp
mov word [esp + 0x16], bp
call fcn.0045dc50
mov dl, byte [0x820ddc]
mov ecx, dword [0x829478]
mov edi, dword [0x8294d8]
mov byte [esp + 0x14], al
mov byte [esp + 0x15], dl
mov eax, dword [esp + 0x14]
xor eax, ecx
push ebx
xor edi, eax
mov dword [0x8294d8], edi
mov dword [esi], eax
mov eax, dword [0x820ddc]
push eax
push ebp
push esi
call fcn.0045ced0
mov ecx, dword [ebp*4 + 0x820e44]
add esp, 0x14
cmp dword [ecx + 4], 1
jne 0x45b4f9
mov eax, dword [0x828e44]
xor edi, edi
cmp eax, ebx
jle 0x45b4f9
push 0x18
call fcn.00672b70
mov esi, eax
add esp, 4
cmp esi, ebx
je 0x45b4eb
mov dword [esi + 4], ebx
mov dword [esi + 8], ebx
mov dword [esi + 0xc], 4
mov byte [esi + 0x10], 1
mov edx, dword [0x829478]
push 1
push edx
lea eax, [esi + 0x14]
push 4
push eax
call fcn.0045cc20
push ebp
mov dword [esp + 0x2c], ebx
call fcn.0045dc50
mov cl, byte [0x820ddc]
mov edx, dword [0x8294d8]
mov byte [esp + 0x2c], al
mov word [esp + 0x2e], bp
mov byte [esp + 0x2d], cl
mov eax, dword [esp + 0x2c]
mov ecx, dword [0x829478]
push 1
xor eax, ecx
xor edx, eax
mov dword [0x8294d8], edx
mov dword [esi], eax
mov edx, dword [0x820ddc]
push edx
push ebp
push esi
call fcn.0045ced0
add esp, 0x24
mov eax, dword [0x828e44]
inc edi
cmp edi, eax
jl 0x45b46a
mov eax, dword [ebp*4 + 0x820e44]
mov ecx, dword [eax + 0xc]
cmp ecx, ebx
je 0x45b576
mov edx, dword [eax + 4]
add ecx, ecx
cmp edx, ecx
jle 0x45b576
mov edx, dword [eax]
mov ecx, 0x10
xor eax, eax
lea edi, [esp + 0x28]
rep stosd dword es:[edi], eax
mov ebx, dword [0x820dd0]
xor ecx, ecx
test edx, edx
je 0x45b55b
mov eax, dword [ebp*4 + 0x820e44]
mov esi, dword [eax + 4]
test esi, esi
jle 0x45b55b
mov edi, dword [0x829478]
lea eax, [esp + 0x28]
cmp byte [edx + 0x10], 0
je 0x45b555
mov ebp, dword [edx]
xor ebp, ebx
xor ebp, edi
inc ecx
mov dword [eax], ebp
add eax, 4
mov edx, dword [edx + 4]
dec esi
jne 0x45b543
test ecx, ecx
jle 0x45b57c
lea esi, [esp + 0x28]
mov edi, ecx
mov ecx, dword [esi]
push ecx
call fcn.004150b0
add esp, 4
add esi, 4
dec edi
jne 0x45b565
mov ebx, dword [0x820dd0]
mov eax, dword [esp + 0x10]
xor eax, ebx
jmp 0x45b587
or eax, 0xffffffff
mov dword [0x829464], eax
lea edx, [esp + 0x20]
push 0
lea eax, [esp + 0x1c]
push edx
push eax
call fcn.00414a40
mov ecx, dword [eax]
add esp, 0xc
mov dword [0x8294b0], ecx
mov eax, dword [esp + 0x24]
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x58
ret