Function at 0x747540
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x6c
mov ebp, dword [esp + 0x8c]
push ebp
call fcn.00586200
add esp, 4
push ebp
call fcn.005863b0
add esp, 4
xor ebx, ebx
test eax, eax
je 0x747654
mov esi, eax
push dword [esp + 0x88]
call fcn.00589790
add esp, 4
cmp eax, 2
jl 0x747654
mov edi, eax
mov ebx, dword [esp + 0x84]
dec edi
nop
push ebp
push 0
push 0
push 0xffffffffffffffff
push edi
push esi
call fcn.0058d7a0
add esp, 0x18
test eax, eax
je 0x747652
push esi
call fcn.00589920
add esp, 4
test eax, eax
jne 0x747590
push ebp
push dword [esp + 0x8c]
push esi
push ebx
push dword [esp + 0x90]
call fcn.00747240
add esp, 0x14
test eax, eax
je 0x747652
push ebp
call fcn.00586200
add esp, 4
push ebp
call fcn.005863b0
add esp, 4
mov dword [esp + 0x28], eax
push ebp
call fcn.005863b0
add esp, 4
mov dword [esp + 0x2c], eax
push ebp
call fcn.005863b0
add esp, 4
mov dword [esp + 0x18], eax
push ebp
call fcn.005863b0
add esp, 4
mov dword [esp + 0x30], eax
test eax, eax
mov ebx, 0
je 0x747647
push dword [esp + 0x88]
push dword [esp + 0x84]
push dword [esp + 0x20]
call fcn.00746920
add esp, 0xc
test eax, eax
je 0x747647
push dword [esp + 0x18]
call fcn.00589920
add esp, 4
test eax, eax
je 0x747667
push ebp
call fcn.005862e0
add esp, 4
jmp 0x747654
xor ebx, ebx
push ebp
call fcn.005862e0
add esp, 4
mov eax, ebx
add esp, 0x6c
pop esi
pop edi
pop ebx
pop ebp
ret
push dword [esp + 0x88]
push dword [esp + 0x34]
call fcn.00589c90
add esp, 8
test eax, eax
je 0x747647
push dword [esp + 0x18]
call fcn.00589790
add esp, 4
mov edi, eax
push dword [esp + 0x30]
call fcn.00589790
add esp, 4
mov dword [esp + 8], eax
mov eax, dword [esp + 0x88]
mov eax, dword [eax + 4]
mov dword [esp], eax
push eax
push dword [esp + 0x1c]
call fcn.00589cf0
add esp, 8
test eax, eax
je 0x747647
mov edx, dword [esp + 0x18]
mov eax, dword [edx]
mov dword [esp + 4], eax
mov ecx, dword [edx + 4]
mov eax, dword [esp]
sub eax, ecx
jle 0x7476e8
mov edx, dword [esp + 4]
lea ecx, [edx + ecx*4]
shl eax, 2
push eax
push 0
push ecx
call sub.api_ms_win_crt_string_l1_1_0.dll_memset
mov edx, dword [esp + 0x24]
add esp, 0xc
mov eax, dword [esp]
mov dword [edx + 4], eax
push eax
push dword [esp + 0x2c]
call fcn.00589cf0
add esp, 8
test eax, eax
je 0x747647
mov eax, dword [esp + 0x28]
mov eax, dword [eax]
mov dword [esp + 0x10], eax
mov dword [eax], 1
mov ecx, dword [esp]
cmp ecx, 2
jl 0x74773c
mov eax, dword [esp + 0x10]
add eax, 4
mov ecx, dword [esp]
lea ecx, [ecx*4 - 4]
push ecx
push 0
push eax
call sub.api_ms_win_crt_string_l1_1_0.dll_memset
mov ecx, dword [esp + 0xc]
add esp, 0xc
mov eax, dword [esp + 0x28]
mov dword [eax + 4], ecx
push ecx
push dword [esp + 0x30]
call fcn.00589cf0
add esp, 8
test eax, eax
mov ecx, dword [esp + 4]
je 0x747647
mov eax, dword [esp + 0x2c]
mov ebp, dword [eax]
mov edx, dword [esp]
test edx, edx
jle 0x747784
lea eax, [edx*4]
push eax
push 0
push ebp
call sub.api_ms_win_crt_string_l1_1_0.dll_memset
mov edx, dword [esp + 0xc]
mov ecx, dword [esp + 0x10]
add esp, 0xc
mov dword [esp + 0x14], ebp
mov eax, dword [esp + 0x2c]
mov dword [eax + 4], edx
mov eax, dword [esp + 0x30]
mov eax, dword [eax]
mov dword [esp + 0x24], eax
lea eax, [edx - 1]
mov ebp, edx
lea edx, [edx*4]
mov dword [esp + 0x48], edx
lea edx, [ebp - 2]
mov dword [esp + 0x68], edx
mov dword [esp + 0x4c], eax
and eax, 0xfffffffc
mov dword [esp + 0x64], eax
mov eax, ebp
and eax, 0x7ffffff8
mov dword [esp + 0x60], eax
mov dword [esp + 0x50], esi
mov ebp, dword [esp + 8]
jmp 0x7477e5
push eax
call fcn.00589720
mov ecx, dword [esp + 8]
add esp, 4
mov edi, eax
sub edi, esi
mov esi, dword [esp + 0x50]
mov dword [esp + 0x5c], ebp
test edi, edi
mov dword [esp + 4], ecx
mov ebp, dword [esp + 0x8c]
je 0x747aab
mov eax, dword [esp + 0x48]
lea edx, [ecx + eax]
mov dword [esp + 0x38], edx
mov edx, dword [esp + 0x10]
add eax, edx
mov dword [esp + 0x44], eax
cmp ecx, eax
setb byte [esp + 8]
cmp edx, dword [esp + 0x38]
setb dl
and dl, byte [esp + 8]
mov byte [esp + 0xf], dl
mov dword [esp + 0x3c], edi
jmp 0x747854
mov eax, dword [esp + 8]
shr eax, 1
mov ecx, dword [esp + 4]
mov dword [ecx + esi*4], eax
shr edx, 1
mov eax, dword [esp + 0x10]
mov dword [eax + esi*4], edx
dec dword [esp + 0x3c]
mov esi, dword [esp + 0x50]
je 0x747aab
mov eax, dword [ecx]
mov dword [esp + 8], eax
test al, 1
jne 0x747bc5
mov ecx, dword [esp + 0x10]
mov esi, dword [ecx]
mov edi, esi
and edi, 1
neg edi
mov ecx, dword [esp + 0x88]
mov ecx, dword [ecx]
mov edx, dword [ecx]
mov dword [esp + 0x1c], edi
and edx, edi
xor edx, esi
xor esi, esi
mov edi, dword [esp]
cmp edi, 2
jl 0x747830
xor esi, esi
cmp edi, 5
jae 0x7478e9
test byte [esp], 1
jne 0x747a00
mov ebx, dword [esp + 4]
mov edi, esi
mov esi, dword [ebx + esi*4 + 4]
mov eax, dword [esp + 8]
shrd eax, esi, 1
mov dword [ebx + edi*4], eax
mov ebx, dword [ecx + edi*4 + 4]
and ebx, dword [esp + 0x1c]
mov eax, dword [esp + 0x10]
xor ebx, dword [eax + edi*4 + 4]
shrd edx, ebx, 1
mov dword [eax + edi*4], edx
mov eax, edi
or eax, 1
mov dword [esp + 8], esi
mov edx, ebx
xor ebx, ebx
mov esi, dword [esp + 0x4c]
cmp dword [esp + 0x68], edi
je 0x747830
jmp 0x747a12
lea esi, [ecx + 4]
mov edi, dword [esp + 0x48]
add edi, ecx
cmp dword [esp + 4], edi
setb bl
cmp esi, dword [esp + 0x38]
setb bh
and bh, bl
or bh, byte [esp + 0xf]
cmp dword [esp + 0x10], edi
setb bl
cmp esi, dword [esp + 0x44]
setb al
test bh, bh
jne 0x7479f2
and bl, al
mov esi, dword [esp + 0x1c]
jne 0x7479f2
movd xmm0, edx
pshufd xmm2, xmm0, 0
movd xmm0, dword [esp + 8]
pshufd xmm0, xmm0, 0
movd xmm1, esi
pshufd xmm1, xmm1, 0
xor eax, eax
xor ebx, ebx
mov edx, dword [esp + 4]
mov esi, dword [esp + 0x10]
mov edi, dword [esp + 0x64]
nop word cs:[eax + eax]
movdqa xmm4, xmm0
movdqa xmm3, xmm2
movups xmm0, xmmword [edx + eax*4 + 4]
shufps xmm4, xmm0, 3
shufps xmm4, xmm0, 0x98
psrld xmm4, 1
movaps xmm2, xmm0
pslld xmm2, 0x1f
por xmm2, xmm4
movdqu xmmword [edx + eax*4], xmm2
movdqu xmm4, xmmword [esi + eax*4 + 4]
movdqu xmm2, xmmword [ecx + eax*4 + 4]
pand xmm2, xmm1
pxor xmm2, xmm4
shufps xmm3, xmm2, 3
shufps xmm3, xmm2, 0x98
psrld xmm3, 1
movdqa xmm4, xmm2
pslld xmm4, 0x1f
por xmm4, xmm3
movdqu xmmword [esi + eax*4], xmm4
add eax, 4
cmp edi, eax
jne 0x747960
pshufd xmm1, xmm2, 0xff
movd edx, xmm1
pshufd xmm0, xmm0, 0xff
movd dword [esp + 8], xmm0
mov esi, dword [esp + 0x4c]
cmp esi, edi
je 0x747830
mov esi, edi
test byte [esp], 1
jne 0x747a00
jmp 0x74789d
xor ebx, ebx
xor esi, esi
test byte [esp], 1
je 0x74789d
mov eax, esi
mov edi, esi
mov esi, dword [esp + 0x4c]
cmp dword [esp + 0x68], edi
je 0x747830
mov esi, dword [esp]
sub esi, eax
mov dword [esp + 0x40], esi
lea ecx, [ecx + eax*4]
add ecx, 4
mov dword [esp + 0x58], ecx
mov ecx, dword [esp + 0x10]
lea ecx, [ecx + eax*4]
mov dword [esp + 0x54], ecx
mov ecx, dword [esp + 4]
lea eax, [ecx + eax*4]
mov dword [esp + 0x34], eax
mov edi, 1
mov eax, dword [esp + 0x34]
mov ecx, dword [eax + edi*4]
mov esi, dword [esp + 8]
shrd esi, ecx, 1
mov dword [eax + edi*4 - 4], esi
mov ebp, dword [esp + 0x58]
mov ebx, dword [ebp + edi*4 - 4]
and ebx, dword [esp + 0x1c]
mov esi, dword [esp + 0x54]
xor ebx, dword [esi + edi*4]
shrd edx, ebx, 1
mov dword [esi + edi*4 - 4], edx
mov edx, dword [eax + edi*4 + 4]
mov dword [esp + 8], edx
shrd ecx, edx, 1
mov dword [eax + edi*4], ecx
mov edx, dword [ebp + edi*4]
and edx, dword [esp + 0x1c]
xor edx, dword [esi + edi*4 + 4]
shrd ebx, edx, 1
mov dword [esi + edi*4], ebx
add edi, 2
cmp dword [esp + 0x40], edi
jne 0x747a40
mov esi, dword [esp + 0x4c]
mov ebp, dword [esp + 0x8c]
xor ebx, ebx
jmp 0x747830
mov eax, dword [ecx]
mov dword [esp + 8], eax
xor ecx, ecx
mov edx, dword [esp + 0x14]
cmp dword [esp + 8], 0
je 0x747647
cmp dword [esp + 8], 1
je 0x747d68
mov edi, dword [esp + 0x5c]
cmp ecx, edi
mov dword [esp + 0x3c], ecx
jge 0x747b1f
mov eax, dword [esp + 0x24]
mov dword [esp + 4], eax
mov ebx, ecx
mov ecx, dword [esp + 0x18]
mov eax, dword [ecx]
mov dword [esp + 0x10], edx
mov dword [esp + 0x24], eax
mov edx, dword [esp + 0x28]
mov eax, dword [edx]
mov dword [esp + 0x14], eax
mov eax, dword [esp + 0x30]
mov dword [esp + 0x18], eax
mov eax, edx
mov edx, dword [esp + 0x2c]
mov dword [esp + 0x28], edx
mov dword [esp + 0x2c], eax
mov dword [esp + 0x30], ecx
mov dword [esp + 0x1c], edi
mov dword [esp + 8], ebx
jmp 0x747b27
mov dword [esp + 0x1c], ecx
mov dword [esp + 8], edi
mov eax, dword [esp]
test eax, eax
jle 0x747d18
mov ecx, eax
xor eax, eax
cmp ecx, 0xc
jae 0x747bdb
mov edx, dword [esp]
mov ecx, eax
or ecx, 1
test dl, 1
je 0x747b6a
mov edx, dword [esp + 0x24]
mov edx, dword [edx + eax*4]
mov ebx, dword [esp + 4]
xor dword [ebx + eax*4], edx
mov edx, dword [esp + 0x14]
mov edx, dword [edx + eax*4]
mov ebx, dword [esp + 0x10]
xor dword [ebx + eax*4], edx
mov eax, ecx
mov ebx, dword [esp]
cmp ebx, ecx
mov edx, dword [esp + 0x10]
mov ebp, dword [esp + 0x14]
mov esi, dword [esp + 0x24]
je 0x747d18
nop word cs:[eax + eax]
mov ecx, dword [esi + eax*4]
mov edi, ebp
mov ebp, edx
mov edx, dword [esp + 4]
xor dword [edx + eax*4], ecx
mov ecx, dword [edi + eax*4]
xor dword [ebp + eax*4], ecx
mov ecx, dword [esi + eax*4 + 4]
xor dword [edx + eax*4 + 4], ecx
mov edx, ebp
mov ebp, edi
mov ecx, dword [edi + eax*4 + 4]
xor dword [edx + eax*4 + 4], ecx
add eax, 2
cmp ebx, eax
jne 0x747b90
jmp 0x747d18
mov ecx, dword [esp + 0x3c]
cmp ecx, 0x20
mov edx, dword [esp + 0x14]
jle 0x747ab7
jmp 0x747acd
mov edx, dword [esp + 4]
mov ecx, dword [esp + 0x48]
lea esi, [edx + ecx]
mov dword [esp + 0x34], esi
mov esi, dword [esp + 0x10]
lea edi, [esi + ecx]
mov dword [esp + 0x38], edi
mov ebx, dword [esp + 0x24]
lea ebp, [ebx + ecx]
mov edi, dword [esp + 0x14]
add ecx, edi
mov dword [esp + 0x40], ecx
mov ecx, dword [esp + 0x38]
cmp edx, ecx
setb byte [esp + 0x58]
mov edi, dword [esp + 0x34]
cmp esi, edi
setb byte [esp + 0x54]
cmp edx, ebp
setb byte [esp + 0x44]
cmp ebx, edi
setb byte [esp + 0xf]
cmp edx, dword [esp + 0x40]
setb byte [esp + 0x23]
mov edx, dword [esp + 0x14]
cmp edx, edi
setb byte [esp + 0x34]
cmp esi, ebp
setb byte [esp + 0x21]
cmp ebx, ecx
setb byte [esp + 0x22]
cmp esi, dword [esp + 0x40]
setb bh
cmp edx, ecx
setb cl
movzx edx, byte [esp + 0x54]
test byte [esp + 0x58], dl
jne 0x747b3f
movzx edx, byte [esp + 0xf]
and byte [esp + 0x44], dl
jne 0x747b3f
movzx edx, byte [esp + 0x23]
and dl, byte [esp + 0x34]
jne 0x747b3f
movzx edx, byte [esp + 0x21]
and dl, byte [esp + 0x22]
jne 0x747b3f
and bh, cl
mov edx, dword [esp]
mov ebx, dword [esp + 4]
mov ecx, dword [esp + 0x10]
mov ebp, dword [esp + 0x14]
mov edi, dword [esp + 0x24]
jne 0x747b42
xor eax, eax
mov edx, ebp
mov ebp, edi
mov edi, dword [esp + 0x60]
movups xmm0, xmmword [ebp + eax*4]
movups xmm1, xmmword [ebp + eax*4 + 0x10]
movups xmm2, xmmword [ebx + eax*4]
xorps xmm2, xmm0
movups xmm0, xmmword [ebx + eax*4 + 0x10]
xorps xmm0, xmm1
movups xmmword [ebx + eax*4], xmm2
movups xmmword [ebx + eax*4 + 0x10], xmm0
movups xmm0, xmmword [edx + eax*4]
movdqu xmm1, xmmword [edx + eax*4 + 0x10]
movups xmm2, xmmword [ecx + eax*4]
xorps xmm2, xmm0
movdqu xmm0, xmmword [ecx + eax*4 + 0x10]
pxor xmm0, xmm1
movups xmmword [ecx + eax*4], xmm2
movdqu xmmword [ecx + eax*4 + 0x10], xmm0
add eax, 8
cmp edi, eax
jne 0x747cb9
mov eax, edi
mov dword [esp + 4], ebx
mov edx, dword [esp]
cmp edx, edi
jne 0x747b42
mov eax, dword [esp + 0x3c]
cmp dword [esp + 0x5c], eax
mov ecx, dword [esp + 4]
mov ebx, 0
mov edi, dword [esp + 0x1c]
mov ebp, dword [esp + 8]
mov esi, dword [esp + 0x50]
jne 0x7477e5
lea eax, [edi - 1]
add edi, 0x1e
test eax, eax
cmovns edi, eax
sar edi, 5
mov esi, edi
not esi
shl esi, 5
mov eax, dword [ecx + edi*4]
add esi, 0x20
add edi, 0xffffffff
jae 0x7477d0
test eax, eax
je 0x747d50
jmp 0x7477d0
mov edi, dword [esp + 0x28]
push edi
call fcn.0058a7e0
add esp, 4
push edi
mov eax, dword [esp + 0x84]
push eax
call fcn.00589c90
add esp, 8
mov edi, eax
push ebp
call fcn.005862e0
add esp, 4
test edi, edi
je 0x747654
push ebp
push dword [esp + 0x8c]
push esi
mov eax, dword [esp + 0x8c]
push eax
push eax
call fcn.00747240
add esp, 0x14
xor ebx, ebx
test eax, eax
setne bl
jmp 0x747654