Function at 0x445520
Capabilities:
Encode data using xor

Disassembly:
sub esp, 0x250
mov eax, dword [esp + 0x25c]
push ebx
push ebp
xor ebp, ebp
mov ecx, dword [eax*4 + 0x40237c]
mov eax, 0x1000
mov dword [esp + 0x48], eax
mov dword [esp + 0x154], eax
mov eax, dword [esp + 0x270]
mov dword [esp + 0x38], ecx
or ecx, 0xffffffff
push esi
cmp eax, ebp
push edi
mov word [esp + 0x1c], bp
mov word [esp + 0x1e], bp
mov dword [esp + 0x14], ecx
mov dword [esp + 0x38], ecx
mov dword [esp + 0x24], ebp
mov dword [esp + 0x48], eax
jl 0x4455ac
mov ecx, dword [esp + 0x270]
xor edx, edx
mov dx, word [ecx + eax*2]
mov ecx, dword [esp + 0x264]
cmp word [ecx + edx*2], bp
jne 0x4455a4
dec eax
jns 0x445576
pop edi
pop esi
mov dword [esp + 0x40], eax
pop ebp
xor eax, eax
pop ebx
add esp, 0x250
ret
cmp eax, ebp
mov dword [esp + 0x48], eax
jge 0x4455b9
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x250
ret
cmp eax, ebp
mov dword [esp + 0x34], ebp
jl 0x445a29
mov dword [esp + 0x10], ebp
mov edx, dword [esp + 0x270]
xor ecx, ecx
xor eax, eax
mov dword [esp + 0x20], 0xf0000000
mov cx, word [edx + ebp*2]
mov edx, dword [esp + 0x274]
add ecx, ecx
mov ax, word [ecx + edx]
imul eax, dword [esp + 0x26c]
sar eax, 4
lea edx, [eax - 1]
lea edi, [eax + eax]
or edx, 1
lea eax, [edx + edi]
mov dword [esp + 0x2c], eax
mov eax, dword [esp + 0x268]
movsx esi, word [ecx + eax]
mov eax, dword [esp + 0x264]
movsx ebx, word [ecx + eax]
mov eax, esi
mov ecx, dword [esp + 0x24]
imul eax, esi
imul eax, dword [esp + 0x40]
add ecx, eax
mov dword [esp + 0x44], ebx
mov dword [esp + 0x24], ecx
lea ecx, [ebx + 1]
cmp ecx, 3
mov dword [esp + 0x3c], eax
jae 0x44573e
test esi, esi
jge 0x44565d
mov ecx, dword [esp + 0x10]
mov edx, dword [esp + 0x2c]
add esi, edx
mov word [esp + ecx + 0x5a], 0xffff
jmp 0x445670
mov eax, dword [esp + 0x10]
mov word [esp + eax + 0x5a], 1
mov eax, dword [esp + 0x2c]
sub eax, esi
mov esi, eax
mov edi, esi
mov eax, dword [esp + 0x10]
imul edi, esi
imul edi, dword [esp + 0x40]
mov ecx, dword [esp + eax + 0x15c]
mov word [esp + eax + 0x58], 1
mov eax, ebp
lea edx, [ecx + edi + 0x1800]
mov ecx, dword [esp + 0x14]
sub eax, ecx
mov dword [esp + 0x20], edx
test eax, eax
jle 0x445721
mov edx, ebp
mov ecx, 0x4022c8
sub edx, eax
dec ecx
lea edx, [esp + edx*4 + 0x160]
lea ebx, [ecx + eax]
mov dword [esp + 0x18], edx
mov edx, 0x4021c8
sub edx, ecx
dec edx
mov dword [esp + 0x44], edx
mov ecx, dword [esp + 0x18]
mov edx, dword [esp + 0x44]
mov esi, dword [ecx]
xor ecx, ecx
mov cl, byte [edx + ebx]
xor edx, edx
mov dl, byte [ebx]
add esi, edi
shl ecx, 0xb
shl edx, 0xb
add ecx, esi
add edx, esi
cmp ecx, dword [esp + 0x20]
jae 0x4456f9
mov dword [esp + 0x20], ecx
mov ecx, dword [esp + 0x10]
mov word [esp + ecx + 0x58], ax
cmp edx, dword [esp + 0x24]
jae 0x44570c
mov dword [esp + 0x24], edx
mov word [esp + 0x1c], ax
mov dword [esp + 0x38], ebp
mov esi, dword [esp + 0x18]
dec eax
add esi, 4
dec ebx
test eax, eax
mov dword [esp + 0x18], esi
jg 0x4456c7
mov ecx, dword [esp + 0x14]
cmp dword [esp + 0x38], ebp
jne 0x445936
mov edx, dword [esp + 0x10]
mov ax, word [esp + edx + 0x5a]
mov word [esp + 0x1e], ax
jmp 0x445936
lea ecx, [ebx + 0x19]
cmp ecx, 0x33
jae 0x445961
mov eax, ebx
imul eax, edi
sub eax, esi
cmp ebx, 1
mov esi, 0x401cc8
jle 0x4457b6
add eax, edx
lea ecx, [ebx - 1]
mov ebp, eax
mov dword [esp + 0x4c], ecx
sub ebp, edi
cmp ebx, 0x18
jg 0x44577a
mov edx, dword [ebx*4 + 0x402304]
mov dword [esp + 0x28], edx
jmp 0x44577e
mov dword [esp + 0x28], esi
cmp ecx, 0x18
jg 0x44578c
mov edx, dword [ecx*4 + 0x402304]
jmp 0x44578e
mov edx, esi
cmp ebx, 6
jg 0x4457a0
mov edi, dword [ebx*4 + 0x402364]
mov dword [esp + 0x30], edi
jmp 0x4457a4
mov dword [esp + 0x30], esi
cmp ecx, 6
jg 0x44581e
mov ecx, dword [ecx*4 + 0x402364]
mov dword [esp + 0x18], ecx
jmp 0x445822
sub eax, edx
lea ecx, [ebx + 1]
cmp ebx, 0xffffffe8
mov dword [esp + 0x4c], ecx
lea ebp, [eax + edi]
jl 0x4457d8
mov edx, ebx
not edx
mov edx, dword [edx*4 + 0x402308]
mov dword [esp + 0x28], edx
jmp 0x4457dc
mov dword [esp + 0x28], esi
cmp ecx, 0xffffffe8
jl 0x4457ee
mov edx, ecx
not edx
mov edx, dword [edx*4 + 0x402308]
jmp 0x4457f0
mov edx, esi
cmp ebx, 0xfffffffa
jl 0x445806
mov edi, ebx
not edi
mov edi, dword [edi*4 + 0x402368]
mov dword [esp + 0x30], edi
jmp 0x44580a
mov dword [esp + 0x30], esi
cmp ecx, 0xfffffffa
jl 0x44581e
not ecx
mov ecx, dword [ecx*4 + 0x402368]
mov dword [esp + 0x18], ecx
jmp 0x445822
mov dword [esp + 0x18], esi
mov ecx, eax
imul ebp, ebp
imul ecx, eax
imul ebp, dword [esp + 0x40]
imul ecx, dword [esp + 0x40]
mov esi, dword [esp + 0x34]
mov edi, dword [esp + 0x14]
sub esi, edi
sub ebp, ecx
test esi, esi
mov dword [esp + 0x54], ecx
jle 0x44592e
lea eax, [edx - 1]
mov edx, dword [esp + 0x34]
sub edx, esi
lea edi, [eax + esi]
lea edx, [esp + edx*4 + 0x160]
mov dword [esp + 0x2c], edx
mov edx, dword [esp + 0x28]
sub edx, eax
dec edx
mov dword [esp + 0x28], edx
mov edx, dword [esp + 0x30]
sub edx, eax
dec edx
mov dword [esp + 0x30], edx
mov edx, dword [esp + 0x18]
sub edx, eax
dec edx
mov dword [esp + 0x18], edx
jmp 0x44588a
mov ecx, dword [esp + 0x54]
mov eax, dword [esp + 0x2c]
mov edx, dword [eax]
mov eax, dword [esp + 0x28]
add edx, ecx
xor ecx, ecx
mov cl, byte [eax + edi]
xor eax, eax
mov al, byte [edi]
shl eax, 0xb
shl ecx, 0xb
add eax, edx
add ecx, edx
add eax, ebp
cmp eax, ecx
jae 0x4458b5
mov ebx, dword [esp + 0x4c]
mov ecx, eax
cmp ecx, dword [esp + 0x20]
jae 0x4458cd
mov eax, dword [esp + 0x10]
mov dword [esp + 0x20], ecx
mov word [esp + eax + 0x58], si
mov word [esp + eax + 0x5a], bx
mov ecx, dword [esp + 0x30]
mov ebx, dword [esp + 0x18]
xor eax, eax
mov al, byte [ecx + edi]
xor ecx, ecx
mov cl, byte [ebx + edi]
mov ebx, dword [esp + 0x44]
shl ecx, 0xb
shl eax, 0xb
add ecx, edx
add eax, edx
add ecx, ebp
cmp ecx, eax
jae 0x4458fb
mov eax, ecx
mov ecx, dword [esp + 0x4c]
jmp 0x4458fd
mov ecx, ebx
cmp eax, dword [esp + 0x24]
jae 0x445919
mov edx, dword [esp + 0x34]
mov dword [esp + 0x24], eax
mov word [esp + 0x1c], si
mov word [esp + 0x1e], cx
mov dword [esp + 0x38], edx
mov edx, dword [esp + 0x2c]
dec esi
add edx, 4
dec edi
test esi, esi
mov dword [esp + 0x2c], edx
jg 0x445886
mov ebp, dword [esp + 0x34]
mov ecx, dword [esp + 0x14]
mov eax, dword [esp + 0x3c]
mov edx, dword [esp + 0x10]
mov edi, dword [esp + 0x20]
mov dword [esp + edx + 0x160], edi
mov edx, dword [esp + 0x50]
lea esi, [eax + edx]
cmp edi, esi
jae 0x4459c7
mov dword [esp + 0x50], edi
mov dword [esp + 0x14], ebp
jmp 0x445a05
mov esi, dword [esp + 0x14]
mov ecx, ebp
sub ecx, esi
test ecx, ecx
jle 0x4459be
mov eax, ebp
sub eax, ecx
lea esi, [esp + eax*4 + 0x160]
mov eax, dword [esi]
mov edx, dword [esp + 0x20]
add eax, 0xf000
cmp eax, edx
jae 0x445999
mov edx, dword [esp + 0x10]
mov dword [esp + 0x20], eax
mov word [esp + edx + 0x58], cx
mov word [esp + edx + 0x5a], bx
cmp eax, dword [esp + 0x24]
jae 0x4459b1
mov dword [esp + 0x24], eax
mov word [esp + 0x1c], cx
mov word [esp + 0x1e], bx
mov dword [esp + 0x38], ebp
dec ecx
add esi, 4
test ecx, ecx
jg 0x445978
jmp 0x445932
mov ecx, dword [esp + 0x14]
jmp 0x44593a
mov edi, dword [esp + ecx*4 + 0x160]
add edx, 0x800
cmp edi, edx
jbe 0x4459e8
mov edi, dword [esp + ecx*4 + 0x164]
inc ecx
cmp edi, edx
ja 0x4459d8
mov dword [esp + 0x14], ecx
cmp ecx, ebp
jge 0x445a01
mov ebx, dword [esp + ecx*4 + 0x160]
add ebx, eax
mov dword [esp + ecx*4 + 0x160], ebx
inc ecx
cmp ecx, ebp
jl 0x4459ec
mov dword [esp + 0x50], esi
mov ecx, dword [esp + 0x10]
mov eax, dword [esp + 0x48]
inc ebp
add ecx, 4
cmp ebp, eax
mov dword [esp + 0x34], ebp
mov dword [esp + 0x10], ecx
jle 0x4455c9
mov edx, dword [esp + 0x38]
test edx, edx
jge 0x445a3b
mov eax, dword [esp + 0x27c]
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x250
ret
mov ebx, dword [esp + 0x264]
mov ecx, 0x20
xor eax, eax
mov edi, ebx
rep stosd dword es:[edi], eax
mov edi, dword [esp + 0x270]
mov ax, word [edi + edx*2]
mov ecx, eax
mov ax, word [esp + 0x1e]
mov word [ebx + ecx*2], ax
movsx ecx, word [esp + 0x1c]
movsx eax, ax
sub edx, ecx
mov ecx, edx
cdq
mov esi, eax
xor esi, edx
sub esi, edx
test ecx, ecx
jl 0x445a9c
mov ax, word [esp + ecx*4 + 0x5a]
xor edx, edx
mov dx, word [edi + ecx*2]
mov word [ebx + edx*2], ax
movsx eax, ax
cdq
xor eax, edx
sub eax, edx
add esi, eax
movsx eax, word [esp + ecx*4 + 0x58]
sub ecx, eax
jns 0x445a7a
mov eax, esi
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x250
ret