Function at 0x43cd40
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 + 0x46b494]
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 0x43cdcc
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 0x43cdc4
dec eax
jns 0x43cd96
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 0x43cdd9
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x250
ret
cmp eax, ebp
mov dword [esp + 0x34], ebp
jl 0x43d249
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 0x43cf5e
test esi, esi
jge 0x43ce7d
mov ecx, dword [esp + 0x10]
mov edx, dword [esp + 0x2c]
add esi, edx
mov word [esp + ecx + 0x5a], 0xffff
jmp 0x43ce90
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 0x43cf41
mov edx, ebp
mov ecx, 0x46b3e0
sub edx, eax
dec ecx
lea edx, [esp + edx*4 + 0x160]
lea ebx, [ecx + eax]
mov dword [esp + 0x18], edx
mov edx, 0x46b2e0
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 0x43cf19
mov dword [esp + 0x20], ecx
mov ecx, dword [esp + 0x10]
mov word [esp + ecx + 0x58], ax
cmp edx, dword [esp + 0x24]
jae 0x43cf2c
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 0x43cee7
mov ecx, dword [esp + 0x14]
cmp dword [esp + 0x38], ebp
jne 0x43d156
mov edx, dword [esp + 0x10]
mov ax, word [esp + edx + 0x5a]
mov word [esp + 0x1e], ax
jmp 0x43d156
lea ecx, [ebx + 0x19]
cmp ecx, 0x33
jae 0x43d181
mov eax, ebx
imul eax, edi
sub eax, esi
cmp ebx, 1
mov esi, 0x46ade0
jle 0x43cfd6
add eax, edx
lea ecx, [ebx - 1]
mov ebp, eax
mov dword [esp + 0x4c], ecx
sub ebp, edi
cmp ebx, 0x18
jg 0x43cf9a
mov edx, dword [ebx*4 + 0x46b41c]
mov dword [esp + 0x28], edx
jmp 0x43cf9e
mov dword [esp + 0x28], esi
cmp ecx, 0x18
jg 0x43cfac
mov edx, dword [ecx*4 + 0x46b41c]
jmp 0x43cfae
mov edx, esi
cmp ebx, 6
jg 0x43cfc0
mov edi, dword [ebx*4 + 0x46b47c]
mov dword [esp + 0x30], edi
jmp 0x43cfc4
mov dword [esp + 0x30], esi
cmp ecx, 6
jg 0x43d03e
mov ecx, dword [ecx*4 + 0x46b47c]
mov dword [esp + 0x18], ecx
jmp 0x43d042
sub eax, edx
lea ecx, [ebx + 1]
cmp ebx, 0xffffffe8
mov dword [esp + 0x4c], ecx
lea ebp, [eax + edi]
jl 0x43cff8
mov edx, ebx
not edx
mov edx, dword [edx*4 + 0x46b420]
mov dword [esp + 0x28], edx
jmp 0x43cffc
mov dword [esp + 0x28], esi
cmp ecx, 0xffffffe8
jl 0x43d00e
mov edx, ecx
not edx
mov edx, dword [edx*4 + 0x46b420]
jmp 0x43d010
mov edx, esi
cmp ebx, 0xfffffffa
jl 0x43d026
mov edi, ebx
not edi
mov edi, dword [edi*4 + 0x46b480]
mov dword [esp + 0x30], edi
jmp 0x43d02a
mov dword [esp + 0x30], esi
cmp ecx, 0xfffffffa
jl 0x43d03e
not ecx
mov ecx, dword [ecx*4 + 0x46b480]
mov dword [esp + 0x18], ecx
jmp 0x43d042
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 0x43d14e
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 0x43d0aa
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 0x43d0d5
mov ebx, dword [esp + 0x4c]
mov ecx, eax
cmp ecx, dword [esp + 0x20]
jae 0x43d0ed
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 0x43d11b
mov eax, ecx
mov ecx, dword [esp + 0x4c]
jmp 0x43d11d
mov ecx, ebx
cmp eax, dword [esp + 0x24]
jae 0x43d139
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 0x43d0a6
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 0x43d1e7
mov dword [esp + 0x50], edi
mov dword [esp + 0x14], ebp
jmp 0x43d225
mov esi, dword [esp + 0x14]
mov ecx, ebp
sub ecx, esi
test ecx, ecx
jle 0x43d1de
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 0x43d1b9
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 0x43d1d1
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 0x43d198
jmp 0x43d152
mov ecx, dword [esp + 0x14]
jmp 0x43d15a
mov edi, dword [esp + ecx*4 + 0x160]
add edx, 0x800
cmp edi, edx
jbe 0x43d208
mov edi, dword [esp + ecx*4 + 0x164]
inc ecx
cmp edi, edx
ja 0x43d1f8
mov dword [esp + 0x14], ecx
cmp ecx, ebp
jge 0x43d221
mov ebx, dword [esp + ecx*4 + 0x160]
add ebx, eax
mov dword [esp + ecx*4 + 0x160], ebx
inc ecx
cmp ecx, ebp
jl 0x43d20c
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 0x43cde9
mov edx, dword [esp + 0x38]
test edx, edx
jge 0x43d25b
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 0x43d2bc
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 0x43d29a
mov eax, esi
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x250
ret