Function at 0x415d70
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
mov eax, 0x15c4
call fcn.004168a0
mov edi, ecx
mov ebx, dword [esp + 0x15dc]
mov ecx, dword [esp + 0x15d8]
pxor xmm0, xmm0
movdqu xmmword [esp + 0x40], xmm0
movdqu xmmword [esp + 0x50], xmm0
movdqu xmmword [esp + 0x60], xmm0
movdqu xmmword [esp + 0x70], xmm0
movdqu xmmword [esp + 0x80], xmm0
movdqu xmmword [esp + 0x90], xmm0
movdqu xmmword [esp + 0xa0], xmm0
movdqu xmmword [esp + 0xb0], xmm0
mov dword [esp + 0xc0], 0
cmp dword [esp + 0x15e0], 0
mov dword [esp + 0x18], edx
je 0x415e55
test ecx, ecx
jle 0x4166de
xor eax, eax
cmp ecx, 1
je 0x415e28
and ecx, 0xfffffffe
mov eax, dword [esp + 0x18]
lea eax, [eax + eax*8]
shl eax, 5
lea edx, [eax + edi]
add edx, 0x8f13
xor eax, eax
nop
movzx esi, byte [edx + eax - 1]
inc dword [esp + esi*4 + 0x40]
movzx esi, byte [edx + eax]
inc dword [esp + esi*4 + 0x40]
add eax, 2
cmp ecx, eax
jne 0x415e10
mov ecx, dword [esp + 0x15d8]
test cl, 1
je 0x4166de
mov ecx, dword [esp + 0x18]
lea ecx, [ecx + ecx*8]
shl ecx, 5
add ecx, edi
movzx eax, byte [eax + ecx + 0x8f12]
inc dword [esp + eax*4 + 0x40]
jmp 0x4166de
lea esi, [edx + edx*8]
mov eax, esi
shl eax, 6
mov dword [esp + 0x14], eax
test ecx, ecx
mov dword [esp + 0xc], edi
mov dword [esp + 0x34], esi
jle 0x415f5b
cmp ecx, 1
jne 0x4167f0
mov ebp, edi
xor eax, eax
xor edi, edi
mov ecx, dword [esp + 0x15d8]
test cl, 1
je 0x415eb2
mov ecx, dword [esp + 0x14]
add ecx, ebp
add ecx, 0x8192
movzx ecx, word [ecx + eax*2]
test cx, cx
je 0x415eb2
mov word [esp + edi*4 + 0x4c4], cx
mov word [esp + edi*4 + 0x4c6], ax
inc edi
lea eax, [esp + 0x944]
push 0x800
push 0
push eax
call fcn.00416a80
add esp, 0xc
test edi, edi
sete byte [esp + 7]
je 0x415f72
mov ecx, edi
xor eax, eax
cmp edi, 1
je 0x415f2f
mov ecx, edi
and ecx, 0xfffffffe
xor eax, eax
nop word cs:[eax + eax]
movzx edx, word [esp + eax*4 + 0x4c4]
movzx esi, dl
inc dword [esp + esi*4 + 0x944]
shr edx, 8
inc dword [esp + edx*4 + 0xd44]
movzx edx, word [esp + eax*4 + 0x4c8]
movzx esi, dl
inc dword [esp + esi*4 + 0x944]
shr edx, 8
inc dword [esp + edx*4 + 0xd44]
add eax, 2
cmp ecx, eax
jne 0x415ef0
mov ecx, edi
test cl, 1
je 0x415f52
movzx eax, word [esp + eax*4 + 0x4c4]
movzx ecx, al
inc dword [esp + ecx*4 + 0x944]
shr eax, 8
inc dword [esp + eax*4 + 0xd44]
mov eax, dword [esp + 0xd44]
jmp 0x415f7b
lea eax, [esp + 0x944]
push 0x800
push 0
push eax
call fcn.00416a80
add esp, 0xc
xor edi, edi
mov byte [esp + 7], 1
xor eax, eax
xor ecx, ecx
cmp eax, edi
sete cl
mov eax, 2
sub eax, ecx
mov dword [esp + 0x3c], eax
lea eax, [edi - 1]
mov dword [esp + 0x10], eax
mov dword [esp + 8], edi
and edi, 0xfffffffe
mov dword [esp + 0x1c], edi
lea eax, [esp + 0x4c4]
mov dword [esp], eax
xor ecx, ecx
lea eax, [esp + 0x1144]
lea edx, [esp + 0x944]
mov dword [esp + 0x30], 0
jmp 0x415ff0
mov esi, dword [esp + 0x30]
inc esi
add ecx, 8
add edx, 0x400
mov eax, dword [esp + 0x20]
mov dword [esp + 0x30], esi
cmp esi, dword [esp + 0x3c]
je 0x416111
mov esi, dword [esp]
mov dword [esp], eax
mov ebp, 3
xor eax, eax
nop dword [eax]
mov dword [esp + ebp*4 + 0xb8], eax
add eax, dword [edx + ebp*4 - 0xc]
mov dword [esp + ebp*4 + 0xbc], eax
add eax, dword [edx + ebp*4 - 8]
mov dword [esp + ebp*4 + 0xc0], eax
add eax, dword [edx + ebp*4 - 4]
mov dword [esp + ebp*4 + 0xc4], eax
add eax, dword [edx + ebp*4]
add ebp, 4
cmp ebp, 0x103
jne 0x416000
mov dword [esp + 0x20], esi
cmp byte [esp + 7], 0
jne 0x415fd0
mov dword [esp + 0x38], edx
cmp dword [esp + 0x10], 0
je 0x4160ba
xor ebp, ebp
nop
mov edx, dword [esp + 0x20]
movzx eax, word [edx + ebp*4]
shr eax, cl
mov edi, eax
xor edi, 0x3fffff00
or eax, 0xff
and eax, edi
mov edi, dword [esp + eax*4 + 0xc4]
mov ebx, dword [edx + ebp*4]
mov esi, dword [esp]
mov dword [esi + edi*4], ebx
inc edi
movzx ebx, word [edx + ebp*4 + 4]
shr ebx, cl
mov dword [esp + eax*4 + 0xc4], edi
mov eax, ebx
xor eax, 0x3fffff00
or ebx, 0xff
and ebx, eax
mov eax, dword [esp + ebx*4 + 0xc4]
lea edi, [eax + 1]
mov dword [esp + ebx*4 + 0xc4], edi
mov edi, dword [edx + ebp*4 + 4]
mov dword [esi + eax*4], edi
add ebp, 2
cmp dword [esp + 0x1c], ebp
jne 0x416050
jmp 0x4160bc
xor ebp, ebp
test byte [esp + 8], 1
mov ebx, dword [esp + 0x15dc]
mov edx, dword [esp + 0x38]
je 0x415fd0
mov esi, dword [esp + 0x20]
movzx eax, word [esi + ebp*4]
shr eax, cl
mov edi, eax
xor edi, 0x3fffff00
or eax, 0xff
and eax, edi
mov edi, dword [esp + eax*4 + 0xc4]
lea ebx, [edi + 1]
mov dword [esp + eax*4 + 0xc4], ebx
mov ebx, dword [esp + 0x15dc]
mov eax, dword [esi + ebp*4]
mov esi, dword [esp]
mov dword [esi + edi*4], eax
jmp 0x415fd0
cmp dword [esp + 8], 0
je 0x4165b0
mov ecx, ebx
mov ebx, dword [esp + 8]
cmp ebx, 1
jne 0x416136
mov eax, dword [esp]
mov word [eax], 1
mov ebx, ecx
jmp 0x416384
mov ebp, dword [esp]
movzx eax, word [ebp + 4]
add word [ebp], ax
cmp ebx, 3
jl 0x4161dd
mov eax, 1
mov ecx, 2
xor edx, edx
jmp 0x416181
movzx edi, word [ebp + edx*4]
add word [ebp + eax*4], di
mov word [ebp + edx*4], ax
inc edx
mov esi, eax
and esi, 1
xor eax, 1
lea eax, [eax + esi*2]
cmp eax, dword [esp + 0x10]
jge 0x4161dd
movzx esi, word [ebp + edx*4]
cmp ecx, ebx
jge 0x416194
movzx edi, word [ebp + ecx*4]
cmp si, di
jae 0x4161b0
mov word [ebp + eax*4], si
mov word [ebp + edx*4], ax
inc edx
cmp ecx, ebx
jge 0x416160
jmp 0x4161ba
inc ecx
mov word [ebp + eax*4], di
cmp ecx, ebx
jge 0x416160
cmp edx, eax
jge 0x4161d0
movzx esi, word [ebp + ecx*4]
movzx edi, word [ebp + edx*4]
cmp di, si
jb 0x416165
jmp 0x4161d5
movzx esi, word [ebp + ecx*4]
inc ecx
add word [ebp + eax*4], si
jmp 0x416170
mov word [ebp + ebx*4 - 8], 0
mov eax, ebx
or eax, 0xfffffffc
mov ecx, ebx
and ecx, 0xfffffffc
add ecx, eax
inc ecx
js 0x416265
lea edx, [ebx + 2]
mov eax, ecx
and edx, 3
je 0x416214
mov eax, ecx
nop
movzx esi, word [ebp + eax*4]
movzx esi, word [ebp + esi*4]
inc esi
mov word [ebp + eax*4], si
dec eax
dec edx
jne 0x416200
cmp ecx, 3
jb 0x416265
inc eax
nop word [eax + eax]
movzx ecx, word [ebp + eax*4 - 4]
movzx ecx, word [ebp + ecx*4]
inc ecx
mov word [ebp + eax*4 - 4], cx
movzx ecx, word [ebp + eax*4 - 8]
movzx ecx, word [ebp + ecx*4]
inc ecx
mov word [ebp + eax*4 - 8], cx
movzx ecx, word [ebp + eax*4 - 0xc]
movzx ecx, word [ebp + ecx*4]
inc ecx
mov word [ebp + eax*4 - 0xc], cx
movzx ecx, word [ebp + eax*4 - 0x10]
movzx ecx, word [ebp + ecx*4]
inc ecx
mov word [ebp + eax*4 - 0x10], cx
add eax, 0xfffffffc
jne 0x416220
lea ecx, [ebx - 2]
mov ebx, 1
xor edx, edx
mov eax, dword [esp + 0x10]
jmp 0x4162ad
mov esi, edi
and esi, 2
mov ebp, edi
or ebp, 2
imul ebp, esi
xor esi, 2
and edi, 0xfffffffd
imul edi, esi
add ebp, edi
mov esi, edx
and esi, 1
xor edx, 1
lea edx, [edx + esi*2]
mov ebx, ebp
test ebp, ebp
jle 0x416372
test ecx, ecx
js 0x4162e0
lea esi, [ecx + 1]
mov dword [esp + 0x20], esi
xor esi, esi
mov ebp, dword [esp]
nop dword [eax]
movzx edi, word [ebp + ecx*4]
cmp edx, edi
jne 0x4162f0
inc esi
add ecx, 0xffffffff
jb 0x4162c0
mov ecx, 0xffffffff
mov edi, dword [esp + 0x20]
jmp 0x4162f2
xor edi, edi
jmp 0x4162f2
mov edi, esi
mov ebp, ebx
sub ebp, edi
jle 0x416280
mov esi, edi
not esi
add esi, ebx
and ebp, 3
je 0x416337
mov dword [esp + 0x1c], esi
mov dword [esp + 0x20], edi
mov esi, dword [esp]
lea edi, [esi + eax*4]
xor esi, esi
nop word cs:[eax + eax]
mov word [edi], dx
inc esi
add edi, 0xfffffffc
cmp ebp, esi
jne 0x416320
sub ebx, esi
sub eax, esi
mov edi, dword [esp + 0x20]
mov esi, dword [esp + 0x1c]
cmp esi, 3
mov esi, dword [esp]
jb 0x416280
nop word cs:[eax + eax]
mov word [esi + eax*4], dx
mov word [esi + eax*4 - 4], dx
mov word [esi + eax*4 - 8], dx
mov word [esi + eax*4 - 0xc], dx
add eax, 0xfffffffc
add ebx, 0xfffffffc
cmp ebx, edi
jg 0x416350
jmp 0x416280
cmp dword [esp + 8], 0
mov ebx, dword [esp + 0x15dc]
jle 0x4165b0
mov eax, dword [esp + 8]
and eax, 3
xor ecx, ecx
cmp dword [esp + 0x10], 3
mov edi, dword [esp]
jb 0x4163ca
mov edx, dword [esp + 8]
and edx, 0xfffffffc
xor ecx, ecx
movzx esi, word [edi + ecx*4]
inc dword [esp + esi*4 + 0x40]
movzx esi, word [edi + ecx*4 + 4]
inc dword [esp + esi*4 + 0x40]
movzx esi, word [edi + ecx*4 + 8]
inc dword [esp + esi*4 + 0x40]
movzx esi, word [edi + ecx*4 + 0xc]
inc dword [esp + esi*4 + 0x40]
add ecx, 4
cmp edx, ecx
jne 0x4163a0
test eax, eax
je 0x4163ed
mov edx, dword [esp]
lea ecx, [edx + ecx*4]
xor edx, edx
nop word cs:[eax + eax]
movzx esi, word [ecx + edx*4]
inc dword [esp + esi*4 + 0x40]
inc edx
cmp eax, edx
jne 0x4163e0
cmp dword [esp + 8], 2
jl 0x4165b0
lea eax, [ebx + 1]
cmp eax, 0x20
jg 0x416460
mov ecx, dword [esp + ebx*4 + 0x40]
mov edx, ebx
neg edx
and edx, 3
je 0x41641c
nop dword [eax]
add ecx, dword [esp + eax*4 + 0x40]
mov dword [esp + ebx*4 + 0x40], ecx
inc eax
dec edx
jne 0x416410
lea edx, [ebx - 0x1d]
cmp edx, 3
jb 0x416458
add eax, 3
nop word [eax + eax]
add ecx, dword [esp + eax*4 + 0x34]
mov dword [esp + ebx*4 + 0x40], ecx
add ecx, dword [esp + eax*4 + 0x38]
mov dword [esp + ebx*4 + 0x40], ecx
add ecx, dword [esp + eax*4 + 0x3c]
mov dword [esp + ebx*4 + 0x40], ecx
add ecx, dword [esp + eax*4 + 0x40]
mov dword [esp + ebx*4 + 0x40], ecx
add eax, 4
cmp eax, 0x24
jne 0x416430
test ebx, ebx
jle 0x416855
cmp ebx, 1
mov ecx, ebx
adc ecx, 0xffffffff
inc ecx
xor edx, edx
mov eax, ebx
cmp ecx, 8
jb 0x416585
mov esi, ecx
and esi, 0xfffffff8
mov eax, ebx
sub eax, esi
movd xmm0, ebx
pshufd xmm0, xmm0, 0
movdqa xmm1, xmmword [0x45e920]
movdqu xmmword [esp + 0x20], xmm0
paddd xmm1, xmm0
mov edx, esi
neg edx
lea ebx, [esp + ebx*4]
add ebx, 0x34
pxor xmm2, xmm2
xor ebp, ebp
movdqa xmm5, xmmword [0x45e940]
pxor xmm3, xmm3
nop word cs:[eax + eax]
movdqu xmm6, xmmword [ebx + ebp*4]
pshufd xmm4, xmm6, 0x1b
movdqu xmm0, xmmword [esp + 0x20]
psubd xmm0, xmm1
movdqa xmm7, xmm0
pslld xmm0, 0x17
paddd xmm0, xmm5
cvttps2dq xmm0, xmm0
pmuludq xmm4, xmm0
pshufd xmm6, xmm6, 0x4e
pshufd xmm0, xmm0, 0xf5
pmuludq xmm0, xmm6
pshufd xmm4, xmm4, 0xe8
pshufd xmm0, xmm0, 0xe8
punpckldq xmm4, xmm0
movdqu xmm0, xmmword [ebx + ebp*4 - 0x10]
paddd xmm2, xmm4
pshufd xmm4, xmm0, 0x1b
psubd xmm7, xmmword [0x45e930]
pslld xmm7, 0x17
paddd xmm7, xmm5
cvttps2dq xmm6, xmm7
pmuludq xmm4, xmm6
pshufd xmm0, xmm0, 0x4e
pshufd xmm6, xmm6, 0xf5
pmuludq xmm6, xmm0
pshufd xmm0, xmm4, 0xe8
pshufd xmm4, xmm6, 0xe8
punpckldq xmm0, xmm4
paddd xmm3, xmm0
paddd xmm1, xmmword [0x45e950]
add ebp, 0xfffffff8
cmp edx, ebp
jne 0x4164c0
paddd xmm3, xmm2
pshufd xmm0, xmm3, 0xee
paddd xmm0, xmm3
pshufd xmm1, xmm0, 0x55
paddd xmm1, xmm0
movd edx, xmm1
cmp ecx, esi
mov ebx, dword [esp + 0x15dc]
je 0x41659f
mov ecx, ebx
sub ecx, eax
inc eax
nop word [eax + eax]
mov esi, dword [esp + eax*4 + 0x3c]
shl esi, cl
add edx, esi
dec eax
inc ecx
cmp eax, 1
ja 0x416590
mov eax, 1
mov ecx, ebx
shl eax, cl
cmp edx, eax
jne 0x416860
mov edi, dword [esp + 0x34]
shl edi, 5
mov esi, dword [esp + 0xc]
lea eax, [esi + edi]
add eax, 0x8f12
push 0x120
push 0
push eax
call fcn.00416a80
add esp, 0xc
mov eax, dword [esp + 0x14]
add eax, esi
add eax, 0x8852
mov esi, edi
push 0x240
push 0
push eax
call fcn.00416a80
add esp, 0xc
test ebx, ebx
jle 0x4166da
add dword [esp], 0xfffffffe
mov eax, 1
jmp 0x41662c
mov ebx, dword [esp + 8]
mov dword [esp + 8], ebx
lea ecx, [eax + 1]
mov ebx, dword [esp + 0x15dc]
cmp eax, ebx
mov eax, ecx
je 0x4166da
mov edi, dword [esp + eax*4 + 0x40]
test edi, edi
jle 0x416610
mov edx, edi
and edx, 3
je 0x416680
mov dword [esp + 0x20], edi
mov ecx, dword [esp + 8]
mov edi, esi
mov esi, dword [esp]
lea ebx, [esi + ecx*4]
xor esi, esi
mov ecx, edi
nop
movzx edi, word [ebx]
mov ebp, dword [esp + 0xc]
add ebp, ecx
mov byte [edi + ebp + 0x8f12], al
inc esi
add ebx, 0xfffffffc
cmp edx, esi
jne 0x416650
sub dword [esp + 8], esi
mov edi, dword [esp + 0x20]
mov edx, edi
sub edx, esi
mov esi, ecx
jmp 0x416682
mov edx, edi
cmp edi, 4
mov ebx, dword [esp + 8]
mov ebp, dword [esp]
jb 0x416614
dec edx
nop
movzx ecx, word [ebp + ebx*4]
mov edi, esi
mov esi, dword [esp + 0xc]
add esi, edi
mov byte [ecx + esi + 0x8f12], al
movzx ecx, word [ebp + ebx*4 - 4]
mov byte [ecx + esi + 0x8f12], al
movzx ecx, word [ebp + ebx*4 - 8]
mov byte [ecx + esi + 0x8f12], al
movzx ecx, word [ebp + ebx*4 - 0xc]
mov byte [ecx + esi + 0x8f12], al
mov esi, edi
add ebx, 0xfffffffc
add edx, 0xfffffffc
cmp edx, 0xfffffffe
jb 0x416690
jmp 0x416614
mov edi, dword [esp + 0xc]
mov ebp, edi
mov dword [esp + 0x948], 0
cmp ebx, 2
jl 0x416727
mov eax, 2
xor ecx, ecx
mov edx, 4
nop dword [eax]
mov esi, eax
xor esi, 0x3ffffffe
mov edi, edx
and edi, 0x3ffffffc
add edi, esi
add ecx, dword [esp + edi*4 + 0x44]
add ecx, ecx
mov dword [esp + eax*4 + 0x944], ecx
inc eax
add edx, 2
cmp eax, ebx
jle 0x416700
mov ecx, dword [esp + 0x15d8]
test ecx, ecx
jle 0x4167e5
xor eax, eax
mov edx, dword [esp + 0x18]
lea edx, [edx + edx*8]
mov esi, edx
shl esi, 5
add esi, ebp
mov dword [esp], esi
shl edx, 6
add edx, ebp
mov dword [esp + 0x20], edx
jmp 0x416786
and ebx, 1
test byte [esp + 0xc], 1
lea ecx, [ebx + edi*2]
cmove ecx, edi
mov edx, dword [esp + 0x20]
mov word [edx + eax*2 + 0x8852], cx
mov ecx, dword [esp + 0x15d8]
inc eax
cmp eax, ecx
je 0x4167e5
mov edx, dword [esp]
movzx edx, byte [eax + edx + 0x8f12]
test edx, edx
je 0x416781
mov ebx, dword [esp + edx*4 + 0x944]
lea ecx, [ebx + 1]
mov dword [esp + edx*4 + 0x944], ecx
xor edi, edi
cmp dl, 1
mov dword [esp + 0xc], edx
je 0x416760
mov ebp, edx
and ebp, 0xfffffffe
lea ecx, [edx + edx]
add ecx, 0xfffffffe
xor edx, edx
nop
mov edi, ebx
shr edi, 1
mov esi, ebx
and esi, 1
add esi, esi
lea edx, [esi + edx*4]
and edi, 1
or edi, edx
shr ebx, 2
add ecx, 0xfffffffc
mov edx, edi
add ebp, 0xfffffffe
jne 0x4167c0
jmp 0x416760
add esp, 0x15c4
pop esi
pop edi
pop ebx
pop ebp
ret
and ecx, 0xfffffffe
mov eax, dword [esp + 0x14]
mov ebp, edi
lea edx, [eax + edi]
add edx, 0x8194
xor eax, eax
xor edi, edi
jmp 0x41681b
add eax, 2
cmp ecx, eax
je 0x415e80
movzx esi, word [edx + eax*2 - 2]
test si, si
je 0x416836
mov word [esp + edi*4 + 0x4c4], si
mov word [esp + edi*4 + 0x4c6], ax
inc edi
movzx esi, word [edx + eax*2]
test si, si
je 0x416810
mov word [esp + edi*4 + 0x4c4], si
lea esi, [eax + 1]
mov word [esp + edi*4 + 0x4c6], si
inc edi
jmp 0x416810
mov eax, 1
mov ecx, ebx
shl eax, cl
xor edx, edx
lea ecx, [ebx - 1]
jmp 0x416879
dec edx
cmp edx, eax
je 0x4165b0
dec dword [esp + ebx*4 + 0x40]
mov esi, ecx
nop
test esi, esi
jle 0x416870
mov edi, dword [esp + esi*4 + 0x40]
dec esi
test edi, edi
je 0x416880
dec edi
mov dword [esp + esi*4 + 0x44], edi
add dword [esp + esi*4 + 0x48], 2
jmp 0x416870