Function at 0x456120
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
push edi
push esi
push ebx
sub esp, 0xfc
xorps xmm4, xmm4
movups xmmword [ebp - 0x38], xmm4
xor eax, eax
mov dword [ebp - 0x28], eax
mov dword [ebp - 0xfc], ecx
mov esi, edx
mov edi, dword [ebp + 8]
test edi, edi
jne 0x45616f
call fcn.00455db0
mov edi, eax
mov ecx, dword [ebp - 0xfc]
mov eax, dword [ecx + 0xc]
mov dword [ebp - 0x90], eax
test al, 3
je 0x45618c
mov dword [ebp - 0x10], esi
test esi, esi
jne 0x4561a5
xor eax, eax
jmp 0x456a4e
mov ecx, dword [ebp - 0xfc]
cmp dword [ecx + 8], edi
jne 0x456161
mov eax, dword [ecx + 0x10]
inc eax
je 0x456a58
mov dword [ecx + 0x10], eax
jmp 0x456283
lea edx, [eax + 1]
lea ebx, [ecx + 0xc]
lock cmpxchg dword [ebx], edx
mov edx, dword [ebp - 0x90]
cmp eax, edx
jne 0x456161
jmp 0x456280
mov eax, dword [0x56c050]
cmp eax, 1
je 0x456297
cmp eax, 3
jne 0x45628a
mov ecx, dword [ebp - 0xfc]
cmp word [ecx + 0x14], 0x8000
jne 0x4561d7
mov edx, 0x56c050
movsx edx, word [edx + 6]
mov word [ecx + 0x14], dx
mov edx, 0x56c050
movsx ebx, word [edx + 6]
test ebx, ebx
je 0x456201
mov edx, 0x56c050
movsx edx, word [edx + 8]
mov dword [ebp - 0x18], edx
movsx eax, word [ecx + 0x14]
test eax, eax
jge 0x456323
inc eax
mov word [ecx + 0x14], ax
mov eax, dword [ecx + 4]
test eax, eax
jne 0x456219
xor edx, edx
call fcn.00456ad0
mov edx, eax
mov eax, edx
mov ecx, dword [ebp - 0xfc]
mov dword [ebp - 0x100], eax
mov eax, dword [ecx + 0xc]
xor edx, edx
mov dword [ebp - 0x5c], edx
jmp 0x45622b
mov esi, eax
mov dword [ebp - 0x60], eax
test byte [ebp - 0x60], 3
jne 0x4565e9
mov edx, dword [ebp - 0x60]
inc edx
mov dword [ebp - 0x60], edx
mov edx, dword [ebp - 0x60]
mov dword [ebp - 0xa8], edx
lea edx, [ecx + 0xc]
mov esi, dword [ebp - 0xa8]
mov dword [ebp - 0xa4], eax
lock cmpxchg dword [edx], esi
mov esi, dword [ebp - 0xa4]
cmp eax, esi
jne 0x456229
mov dword [ebp - 0xa4], esi
test esi, 3
mov dword [ebp - 0x108], edx
mov dword [ebp - 0x14], ebx
jne 0x45663d
mov dword [ecx + 8], edi
mov eax, edi
jmp 0x456a4e
call fcn.00455e60
test eax, eax
jne 0x4561bc
mov ebx, 1
push 0
lea ecx, [ebp - 0x88]
mov edx, 4
call fcn.00402e00
call sub.KERNEL32.dll_Sleep
lea ecx, [ebp - 0x88]
call fcn.00402e31
mov eax, dword [0x56c050]
cmp eax, 3
je 0x4561bc
mov ecx, dword [ebp - 0xfc]
test eax, eax
je 0x45628a
mov eax, dword [ecx + 0xc]
mov dword [ebp - 0x94], eax
test al, 3
je 0x456304
test ebx, ebx
sete bl
movzx ebx, bl
test ebx, ebx
jne 0x45629c
push 1
call fcn.00404230
cmp dword [0x56db20], 0
je 0x4562be
jmp 0x456a7b
lea edx, [eax + 1]
mov ecx, dword [ebp - 0xfc]
lea esi, [ecx + 0xc]
lock cmpxchg dword [esi], edx
mov edx, dword [ebp - 0x94]
cmp eax, edx
jne 0x4562e3
jmp 0x456280
xor edx, edx
mov dword [ebp - 0x20], edx
mov edx, dword [ecx + 0xc]
jmp 0x45633b
mov edx, eax
mov eax, dword [ebp - 0x1c]
mov ecx, dword [ebp - 0xfc]
mov edi, dword [ebp + 8]
mov dword [ebp - 0x98], edx
mov dword [ebp - 0x54], edx
mov dword [ebp - 0x58], 1
cmp dword [ebp - 0x54], 0x80
mov edx, dword [ebp - 0x98]
jb 0x4563bc
test byte [ebp - 0x54], 2
je 0x45636a
mov edx, 2
jmp 0x45642d
movzx esi, word [ecx + 0x16]
test esi, esi
je 0x4563bc
cmp dword [0x56db20], 0
mov dword [ebp - 0x98], edx
mov dword [ebp - 0x1c], eax
jne 0x456a85
call sub.KERNEL32.dll_GetTickCount64
sub eax, esi
movzx eax, ax
cmp eax, 0x64
jl 0x4563b3
mov eax, dword [ebp - 0x54]
add eax, 2
mov dword [ebp - 0x54], eax
mov esi, 2
mov dword [ebp - 0x58], esi
mov dword [ebp + 8], edi
mov edx, dword [ebp - 0x98]
jmp 0x4563de
mov eax, dword [ebp - 0x1c]
mov edx, dword [ebp - 0x98]
mov ecx, dword [ebp - 0xfc]
test byte [ebp - 0x54], 1
jne 0x45649b
mov esi, dword [ebp - 0x54]
inc esi
mov dword [ebp - 0x54], esi
xor esi, esi
mov dword [ebp - 0x58], esi
mov dword [ebp - 0x1c], eax
mov dword [ebp + 8], edi
mov esi, dword [ebp - 0x54]
mov dword [ebp - 0x9c], esi
mov ecx, dword [ebp - 0xfc]
lea esi, [ecx + 0xc]
mov edi, dword [ebp - 0x9c]
mov eax, edx
lock cmpxchg dword [esi], edi
cmp eax, edx
jne 0x45632d
mov esi, dword [ebp - 0x58]
cmp esi, 1
jne 0x45641f
mov eax, 1
test dl, 0x1c
mov edx, eax
cmovne edx, dword [ebp - 0x20]
mov eax, edx
mov dword [ebp - 0x20], eax
mov edx, esi
mov eax, dword [ebp - 0x1c]
mov ecx, dword [ebp - 0xfc]
mov edi, dword [ebp + 8]
cmp edx, 1
jne 0x4565db
cmp dword [ebp - 0x20], 0
cmovne eax, ebx
mov dword [ebp - 0x1c], eax
xor edx, edx
push 0
mov dword [ebp - 0x24], edx
mov ecx, edx
mov edx, 0xa
call fcn.00459400
mov ecx, dword [ebp - 0x24]
inc ecx
movsx ecx, cx
mov eax, ecx
mov dword [ebp - 0x24], eax
mov edx, dword [ebp - 0x1c]
cmp eax, edx
jge 0x456567
mov ecx, dword [ebp - 0xfc]
mov esi, dword [ecx + 0xc]
jmp 0x45647d
mov esi, eax
mov edx, dword [ebp - 0x1c]
mov edi, dword [ebp + 8]
test esi, 3
je 0x4564e9
test esi, 2
jne 0x456515
mov esi, 1
jmp 0x45651a
test byte [ebp - 0x54], 0x1c
je 0x4564de
mov dword [ebp - 0x1c], eax
test eax, eax
mov dword [ebp - 0x98], edx
je 0x4564d6
lea ecx, [ebp - 0x54]
call fcn.0047ed10
test eax, eax
mov edx, dword [ebp - 0x98]
je 0x4564c8
mov dword [ebp + 8], edi
jmp 0x4563de
mov eax, dword [ebp - 0x1c]
mov ecx, dword [ebp - 0xfc]
jmp 0x456360
mov eax, dword [ebp - 0x1c]
jmp 0x456360
mov dword [ebp - 0x98], edx
mov dword [ebp - 0x1c], eax
jmp 0x4564ae
mov dword [ebp - 0x1c], edx
mov dword [ebp + 8], edi
lea edx, [esi - 3]
mov ecx, dword [ebp - 0xfc]
lea eax, [ecx + 0xc]
mov edi, eax
mov eax, esi
lock cmpxchg dword [edi], edx
cmp eax, esi
jne 0x456475
xor esi, esi
mov edx, dword [ebp - 0x1c]
mov edi, dword [ebp + 8]
jmp 0x45651a
mov esi, 2
cmp esi, 1
mov dword [ebp - 0x1c], edx
je 0x45655f
mov edx, esi
mov ecx, dword [ebp - 0xfc]
test edx, edx
jne 0x456567
cmp dword [ebp - 0x20], 0
je 0x456280
mov esi, dword [ebp - 0x18]
test esi, esi
jg 0x456280
movsx edx, word [ecx + 0x14]
mov esi, edx
cmp esi, ebx
jge 0x456280
lea eax, [esi + 1]
mov word [ecx + 0x14], ax
jmp 0x456280
mov edx, dword [ebp - 0x24]
jmp 0x456442
mov ecx, dword [ebp - 0xfc]
lea eax, [ecx + 0xc]
mov edx, eax
mov eax, 0xfffffffc
lock xadd dword [edx], eax
add eax, 0xfffffffc
jmp 0x456582
mov esi, eax
test al, 1
je 0x45658d
mov edx, 2
jmp 0x4565a6
lea esi, [eax + 1]
mov dword [ebp - 0xa0], eax
lock cmpxchg dword [edx], esi
mov esi, dword [ebp - 0xa0]
cmp eax, esi
jne 0x456580
xor edx, edx
cmp dword [ebp - 0x20], 0
je 0x4565db
cmp dword [ebp - 0x18], 0
jg 0x4565db
movsx eax, word [ecx + 0x14]
test edx, edx
jne 0x4565c5
cmp eax, ebx
jge 0x4565db
inc eax
mov word [ecx + 0x14], ax
jmp 0x4565db
lea esi, [eax - 1]
movsx esi, si
test eax, eax
cmovle esi, dword [ebp - 0x18]
mov word [ecx + 0x14], si
mov ecx, dword [ebp - 0xfc]
cmp edx, 2
je 0x456201
jmp 0x456280
mov dword [ebp - 0xa4], eax
lea ecx, [ebp - 0x60]
call fcn.0047ed30
test eax, eax
je 0x456a8f
mov eax, dword [ebp - 0xa4]
cmp eax, 0x80
mov ecx, dword [ebp - 0xfc]
jae 0x45623f
mov edx, dword [ebp - 0x5c]
test edx, edx
mov dword [ebp - 0x5c], edx
jne 0x45623f
mov edx, 1
mov word [ecx + 0x16], 0
mov dword [ebp - 0x5c], edx
mov ecx, dword [ebp - 0xfc]
jmp 0x45623f
mov eax, dword [ebp - 0xa4]
mov edx, dword [ebp - 0x5c]
mov esi, dword [ebp - 0x10]
cmp eax, 0x80
setb al
movzx eax, al
or eax, edx
je 0x456688
call sub.KERNEL32.dll_GetTickCount64
movzx ecx, ax
cmp dword [0x56db20], 0
jne 0x456a95
lea eax, [ecx - 1]
movzx eax, ax
test ecx, ecx
cmove ecx, eax
mov eax, dword [ebp - 0xfc]
mov word [eax + 0x16], cx
mov ecx, dword [ebp - 0xfc]
mov eax, 0x56c050
add eax, 0x10
mov dword [ebp - 0x104], eax
mov dword [ebp - 0x10], esi
mov dword [ebp + 8], edi
mov edx, eax
mov esi, dword [edx]
mov edx, dword [edx + 4]
mov dword [ebp - 0xb0], edx
mov edi, esi
add edi, 1
mov ebx, edx
adc ebx, 0
push ebx
push edi
push edx
push esi
mov ecx, eax
call fcn.00404210
xor eax, esi
mov esi, dword [ebp - 0xb0]
xor edx, esi
or eax, edx
mov eax, dword [ebp - 0x104]
jne 0x45669c
mov ecx, dword [ebp - 0xfc]
mov esi, dword [ebp - 0x10]
mov edi, dword [ebp + 8]
xorps xmm0, xmm0
movups xmmword [ebp - 0x34], xmm0
mov dword [ebp - 0x38], ecx
lea eax, [ebp - 0x38]
mov dword [ebp - 0x34], eax
mov dword [ebp - 0x30], 2
mov dword [ebp - 0x2c], esi
call fcn.0040172b
mov edx, dword [eax + 4]
mov dword [ebp - 0x28], edx
lea edx, [ebp - 0x34]
mov dword [eax + 4], edx
xor edx, edx
mov dword [ebp - 0x3c], edx
test esi, esi
jl 0x456722
call sub.KERNEL32.dll_GetTickCount64
cmp dword [0x56db20], 0
je 0x456734
jmp 0x456729
xor eax, eax
mov dword [ebp - 0x50], eax
jmp 0x456734
mov dword [ebp - 0x50], eax
call fcn.00402631
mov eax, dword [ebp - 0x50]
mov dword [ebp - 0x40], eax
mov dword [ebp - 0x10], esi
mov edx, esi
jmp 0x456749
mov ecx, esi
sub ecx, eax
mov eax, ecx
mov dword [ebp - 0x10], esi
mov edx, eax
mov ecx, dword [ebp - 0xfc]
mov eax, dword [ecx + 0xc]
test al, 0x40
setne al
movzx eax, al
push eax
push 0
push 0
mov ecx, dword [ebp - 0x100]
mov dword [ebp - 0x44], edx
cmp dword [ecx], ecx
call fcn.0045afb0
test eax, eax
je 0x4569c6
xor eax, eax
mov ebx, dword [ebp - 0x14]
test ebx, ebx
jle 0x45678d
xor edx, edx
mov ecx, dword [ebp - 0xfc]
mov esi, dword [ecx + 0xc]
jmp 0x4567a3
mov dword [ebp - 0x14], ebx
jmp 0x4567d0
mov esi, eax
mov dword [ebp - 0x108], ebx
mov eax, dword [ebp - 0x4c]
mov ebx, dword [ebp - 0x14]
mov edi, dword [ebp + 8]
test esi, 1
je 0x456843
push 0
mov dword [ebp - 0x4c], eax
mov ecx, eax
mov edx, 0xa
call fcn.00459400
mov esi, dword [ebp - 0x4c]
inc esi
movsx esi, si
mov dword [ebp - 0x14], ebx
cmp esi, ebx
mov eax, esi
jl 0x4567f2
mov esi, dword [ebp - 0x3c]
test esi, esi
jne 0x4567ed
mov eax, 0xffffffe0
mov edx, dword [ebp - 0x108]
lock xadd dword [edx], eax
add eax, 0xffffffe0
xor ecx, ecx
jmp 0x456804
jmp 0x4569c6
mov ebx, dword [ebp - 0x14]
jmp 0x456780
mov esi, eax
mov dword [ebp - 0x108], edx
mov eax, esi
mov esi, dword [ebp - 0x3c]
test al, 1
je 0x456910
mov eax, dword [ebp - 0x44]
test eax, eax
mov edx, eax
jl 0x456749
call sub.KERNEL32.dll_GetTickCount64
mov edx, dword [ebp - 0x40]
sub eax, edx
mov dword [ebp - 0x48], eax
cmp dword [0x56db20], 0
jne 0x456a05
mov esi, dword [ebp - 0x10]
cmp eax, esi
jae 0x4569c6
jmp 0x45673e
mov dword [ebp + 8], edi
lea edi, [esi - 0x9f]
test edi, 2
je 0x456890
add edi, 0xfffffffe
cmp edi, 0x80
jb 0x456888
test edx, edx
mov dword [ebp - 0x4c], eax
jne 0x456883
mov dword [ebp - 0x68], 1
call sub.KERNEL32.dll_GetTickCount64
movzx eax, ax
cmp dword [0x56db20], 0
je 0x456898
jmp 0x4569d4
mov dword [ebp - 0x14], ebx
jmp 0x4568b2
mov dword [ebp - 0x4c], eax
mov dword [ebp - 0x14], ebx
jmp 0x4568b2
mov dword [ebp - 0x4c], eax
mov dword [ebp - 0x14], ebx
jmp 0x4568b2
test eax, eax
jne 0x4568a2
dec eax
movzx eax, ax
mov edx, eax
mov ecx, dword [ebp - 0xfc]
mov word [ecx + 0x16], ax
mov dword [ebp - 0x14], ebx
mov edx, dword [ebp - 0x68]
mov ebx, dword [ebp - 0x108]
mov eax, esi
lock cmpxchg dword [ebx], edi
cmp eax, esi
jne 0x456792
cmp edi, 0x80
jb 0x4568f9
test edx, edx
jne 0x4568f9
call sub.KERNEL32.dll_GetTickCount64
movzx ebx, ax
cmp dword [0x56db20], 0
jne 0x4569e4
test ebx, ebx
jne 0x4568ef
dec ebx
movzx ebx, bx
mov ecx, dword [ebp - 0xfc]
mov word [ecx + 0x16], bx
mov ecx, dword [ebp - 0xfc]
mov edi, dword [ebp + 8]
mov dword [ecx + 8], edi
mov dword [ebp - 0x8c], edi
jmp 0x456a30
mov dword [ebp - 0xac], eax
lea ebx, [eax - 0x7f]
test bl, 2
je 0x45694e
add ebx, 0xfffffffe
cmp ebx, 0x80
jb 0x45694c
test ecx, ecx
jne 0x45694a
mov dword [ebp - 0x70], 1
call sub.KERNEL32.dll_GetTickCount64
movzx eax, ax
cmp dword [0x56db20], 0
je 0x456950
jmp 0x4569ee
jmp 0x456967
jmp 0x456967
jmp 0x456967
test eax, eax
jne 0x45695a
dec eax
movzx eax, ax
mov edx, eax
mov ecx, dword [ebp - 0xfc]
mov word [ecx + 0x16], ax
mov ecx, dword [ebp - 0x70]
mov edx, dword [ebp - 0x108]
mov eax, dword [ebp - 0xac]
lock cmpxchg dword [edx], ebx
mov esi, dword [ebp - 0xac]
cmp eax, esi
jne 0x4567f7
cmp ebx, 0x80
mov dword [ebp + 8], edi
jb 0x4568f9
mov ebx, ecx
test ebx, ebx
jne 0x4568f9
call sub.KERNEL32.dll_GetTickCount64
movzx esi, ax
cmp dword [0x56db20], 0
jne 0x4569fe
test esi, esi
jne 0x4569b7
dec esi
movzx esi, si
mov ecx, dword [ebp - 0xfc]
mov word [ecx + 0x16], si
jmp 0x4568f9
cmp dword [ebp - 0x3c], 0
mov dword [ebp + 8], edi
je 0x456a15
jmp 0x4568f9
mov dword [ebp - 0x6c], eax
call fcn.00402631
mov eax, dword [ebp - 0x6c]
jmp 0x456898
call fcn.00402631
jmp 0x4568e7
mov dword [ebp - 0x74], eax
call fcn.00402631
mov eax, dword [ebp - 0x74]
jmp 0x456950
call fcn.00402631
jmp 0x4569af
call fcn.00402631
mov eax, dword [ebp - 0x48]
mov edx, dword [ebp - 0x40]
jmp 0x456833
cmp dword [ebp - 0x38], 0
je 0x456a39
call fcn.0040172b
mov ecx, dword [ebp - 0x28]
mov dword [eax + 4], ecx
xor ecx, ecx
mov dword [ebp - 0x34], ecx
mov dword [ebp - 0x38], ecx
jmp 0x456a39
mov ecx, esp
call fcn.00456aa5
jmp 0x456a48
mov ecx, dword [ebp - 0xfc]
call fcn.0047ed60
xor eax, eax
jmp 0x456a4e
mov eax, dword [ebp - 0x8c]
lea esp, [ebp - 0xc]
pop ebx
pop esi
pop edi
pop ebp
ret 4
mov ecx, 0x4db6b8
call fcn.00401de0
mov esi, eax
mov ecx, esi
call fcn.00448400
mov ecx, 0x4d1590
mov dword [esi + 4], ecx
mov ecx, esi
call fcn.0040239b
int3
call fcn.00402631
jmp 0x4562be
call fcn.00402631
jmp 0x456388
call fcn.00450510
int3
mov dword [ebp - 0x64], ecx
call fcn.00402631
mov ecx, dword [ebp - 0x64]
jmp 0x45666d