Function at 0x66f350
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x58
mov eax, dword [0xb2d318]
add eax, dword [eax]
mov dword [esp + 0x34], eax
mov eax, dword [0xab0a88]
mov dword [esp + 0x20], eax
mov eax, dword [0xb2d31c]
add eax, dword [eax]
mov dword [esp + 0x18], eax
cmp dword [esp + 0x6c], 0
je 0x66f84d
mov eax, dword [esp + 0x70]
test eax, eax
je 0x66f84d
inc dword [eax + 0x6c]
mov edi, dword [0xb2d314]
mov esi, edi
xor esi, 1
cmp dword [0xb2d320], 0x88ca8a38
jne 0x66f3e0
mov ecx, edi
and ecx, 1
mov eax, 0xfffffffe
shl eax, cl
shl eax, cl
or eax, ecx
imul eax, ecx
mov edx, esi
mov ecx, eax
shl edx, cl
mov eax, esi
mov ecx, edx
shl eax, cl
add eax, esi
mov esi, eax
sub esi, edi
mov ecx, eax
shl esi, cl
mov edx, esi
mov ecx, eax
shl edx, cl
mov ecx, edx
shl esi, cl
and esi, edx
mov edi, esi
jmp 0x66f3ea
mov eax, edi
and eax, 1
lea eax, [esi + eax*2]
and edi, eax
mov dword [0xb2d314], eax
test edi, edi
mov dword [esp + 0x2c], edi
je 0x66f855
xor ebp, ebp
mov dword [esp + 4], 0
xor edi, edi
xor edx, edx
mov ebx, dword [esp + 0x70]
mov ecx, dword [ebx]
lea eax, [ebx + 0x2c]
mov byte [ebx + ecx + 0x2c], 0x80
mov esi, dword [ebx]
mov dword [esp], esi
inc esi
mov dword [ebx], esi
cmp ecx, 0x38
jae 0x66f591
mov dword [esp + 0x10], esi
mov ebx, dword [0xab0a7c]
mov dword [esp + 0xc], ebp
mov ebp, dword [0xab0a78]
mov esi, dword [0xab0a74]
mov ecx, dword [0xab0a70]
sub ecx, dword [esp + 0xc]
sbb esi, dword [esp + 4]
sbb ebp, edi
sbb ebx, edx
xor edx, edx
cmp dword [esp + 0x2c], 0
cmovne esi, edx
cmovne ebx, edx
cmovne ecx, edx
cmovne ebp, edx
or ebp, ecx
or ebx, esi
or ebx, ebp
add dword [0xb533d8], ebx
mov edi, dword [esp]
cmp edi, 0x37
mov esi, dword [esp + 0x70]
je 0x66f4ee
add eax, dword [esp + 0x10]
mov ecx, 0x37
sub ecx, edi
mov edx, ecx
and edx, 7
je 0x66f4b0
mov ecx, edx
nop word cs:[eax + eax]
mov byte [eax], 0
inc eax
dec ecx
jne 0x66f4a0
add edx, edi
mov ecx, 0x37
sub ecx, edx
add edi, 0xffffffd0
cmp edi, 7
jb 0x66f4ee
xor edx, edx
nop word [eax + eax]
mov byte [eax + edx], 0
mov byte [eax + edx + 1], 0
mov byte [eax + edx + 2], 0
mov byte [eax + edx + 3], 0
mov byte [eax + edx + 4], 0
mov byte [eax + edx + 5], 0
mov byte [eax + edx + 6], 0
mov byte [eax + edx + 7], 0
add edx, 8
cmp ecx, edx
jne 0x66f4c0
pxor xmm0, xmm0
movdqu xmm2, xmmword [esi + 0x2c]
movdqu xmm1, xmmword [esi + 0x3c]
movdqa xmm3, xmm2
punpckhbw xmm3, xmm0
pshuflw xmm3, xmm3, 0x1b
pshufhw xmm3, xmm3, 0x1b
punpcklbw xmm2, xmm0
pshuflw xmm2, xmm2, 0x1b
pshufhw xmm2, xmm2, 0x1b
packuswb xmm2, xmm3
movdqu xmmword [esi + 0x2c], xmm2
movdqa xmm2, xmm1
punpckhbw xmm2, xmm0
pshuflw xmm2, xmm2, 0x1b
pshufhw xmm2, xmm2, 0x1b
punpcklbw xmm1, xmm0
pshuflw xmm1, xmm1, 0x1b
pshufhw xmm1, xmm1, 0x1b
packuswb xmm1, xmm2
movdqu xmmword [esi + 0x3c], xmm1
movdqu xmm1, xmmword [esi + 0x4c]
movdqa xmm2, xmm1
punpckhbw xmm2, xmm0
pshuflw xmm2, xmm2, 0x1b
pshufhw xmm2, xmm2, 0x1b
punpcklbw xmm1, xmm0
pshuflw xmm0, xmm1, 0x1b
pshufhw xmm0, xmm0, 0x1b
packuswb xmm0, xmm2
movdqu xmmword [esi + 0x4c], xmm0
mov eax, dword [esi + 0x5c]
bswap eax
mov dword [esi + 0x5c], eax
mov eax, dword [esi + 0x60]
bswap eax
mov dword [esi + 0x60], eax
jmp 0x66f7c1
mov ecx, esi
mov ebx, dword [esp]
cmp ebx, 0x3f
mov esi, dword [esp + 0x70]
je 0x66f61e
add eax, ecx
mov ecx, 0x3f
sub ecx, ebx
mov edx, ecx
and edx, 7
je 0x66f5da
lea ecx, [ebx - 0x3f]
xor esi, esi
nop dword [eax + eax]
mov byte [eax], 0
inc eax
mov edi, esi
xor edi, 1
and esi, 1
lea esi, [edi + esi*2]
inc ecx
cmp esi, edx
jne 0x66f5c0
neg ecx
mov esi, dword [esp + 0x70]
mov edx, dword [0xb533d8]
add edx, ebx
add edx, 0xffffffc8
cmp edx, 7
jb 0x66f61e
xor edx, edx
nop dword [eax]
mov byte [eax + edx], 0
mov byte [eax + edx + 1], 0
mov byte [eax + edx + 2], 0
mov byte [eax + edx + 3], 0
mov byte [eax + edx + 4], 0
mov byte [eax + edx + 5], 0
mov byte [eax + edx + 6], 0
mov byte [eax + edx + 7], 0
add edx, 8
cmp ecx, edx
jne 0x66f5f0
pxor xmm0, xmm0
movdqu xmm2, xmmword [esi + 0x2c]
movdqu xmm1, xmmword [esi + 0x3c]
movdqa xmm3, xmm2
punpckhbw xmm3, xmm0
pshuflw xmm3, xmm3, 0x1b
pshufhw xmm3, xmm3, 0x1b
punpcklbw xmm2, xmm0
pshuflw xmm2, xmm2, 0x1b
pshufhw xmm2, xmm2, 0x1b
packuswb xmm2, xmm3
movdqu xmmword [esi + 0x2c], xmm2
movdqa xmm2, xmm1
punpckhbw xmm2, xmm0
pshuflw xmm2, xmm2, 0x1b
pshufhw xmm2, xmm2, 0x1b
punpcklbw xmm1, xmm0
pshuflw xmm1, xmm1, 0x1b
pshufhw xmm1, xmm1, 0x1b
packuswb xmm1, xmm2
movdqu xmmword [esi + 0x3c], xmm1
movdqu xmm1, xmmword [esi + 0x4c]
movdqa xmm2, xmm1
punpckhbw xmm2, xmm0
pshuflw xmm2, xmm2, 0x1b
pshufhw xmm2, xmm2, 0x1b
punpcklbw xmm1, xmm0
pshuflw xmm1, xmm1, 0x1b
pshufhw xmm1, xmm1, 0x1b
packuswb xmm1, xmm2
movdqu xmmword [esi + 0x4c], xmm1
movdqu xmm1, xmmword [esi + 0x5c]
movdqa xmm2, xmm1
punpckhbw xmm2, xmm0
pshuflw xmm2, xmm2, 0x1b
pshufhw xmm2, xmm2, 0x1b
punpcklbw xmm1, xmm0
pshuflw xmm0, xmm1, 0x1b
pshufhw xmm0, xmm0, 0x1b
packuswb xmm0, xmm2
movdqu xmmword [esi + 0x5c], xmm0
mov ecx, esi
call fcn.0066f9d0
mov byte [esi + 0x2c], 0
mov byte [esi + 0x2d], 0
mov byte [esi + 0x2e], 0
mov byte [esi + 0x2f], 0
mov byte [esi + 0x30], 0
mov byte [esi + 0x31], 0
mov byte [esi + 0x32], 0
mov byte [esi + 0x33], 0
mov byte [esi + 0x34], 0
mov byte [esi + 0x35], 0
mov byte [esi + 0x36], 0
mov byte [esi + 0x37], 0
mov byte [esi + 0x38], 0
mov byte [esi + 0x39], 0
mov byte [esi + 0x3a], 0
mov byte [esi + 0x3b], 0
mov byte [esi + 0x3c], 0
mov byte [esi + 0x3d], 0
mov byte [esi + 0x3e], 0
mov byte [esi + 0x3f], 0
mov byte [esi + 0x40], 0
mov byte [esi + 0x41], 0
mov byte [esi + 0x42], 0
mov byte [esi + 0x43], 0
mov byte [esi + 0x44], 0
mov byte [esi + 0x45], 0
mov byte [esi + 0x46], 0
mov byte [esi + 0x47], 0
mov byte [esi + 0x48], 0
mov byte [esi + 0x49], 0
mov byte [esi + 0x4a], 0
mov byte [esi + 0x4b], 0
mov byte [esi + 0x4c], 0
mov byte [esi + 0x4d], 0
mov byte [esi + 0x4e], 0
mov byte [esi + 0x4f], 0
mov byte [esi + 0x50], 0
mov byte [esi + 0x51], 0
mov byte [esi + 0x52], 0
mov byte [esi + 0x53], 0
mov byte [esi + 0x54], 0
mov byte [esi + 0x55], 0
mov byte [esi + 0x56], 0
mov byte [esi + 0x57], 0
mov byte [esi + 0x58], 0
mov byte [esi + 0x59], 0
mov byte [esi + 0x5a], 0
mov byte [esi + 0x5b], 0
mov byte [esi + 0x5c], 0
mov byte [esi + 0x5d], 0
mov byte [esi + 0x5e], 0
mov byte [esi + 0x5f], 0
mov byte [esi + 0x60], 0
mov byte [esi + 0x61], 0
mov byte [esi + 0x62], 0
mov byte [esi + 0x63], 0
mov eax, dword [esi + 4]
mov ecx, dword [esi + 8]
shld eax, ecx, 3
mov dword [esi + 4], eax
shl ecx, 3
mov dword [esi + 8], ecx
mov dword [esi + 0x64], eax
mov dword [esi + 0x68], ecx
mov ecx, esi
call fcn.0066f9d0
movdqu xmm2, xmmword [esi + 0xc]
movdqu xmm0, xmmword [esi + 0x1c]
mov eax, dword [esp + 0x6c]
movdqu xmmword [eax], xmm2
movdqu xmmword [eax + 0x10], xmm0
pxor xmm1, xmm1
movdqa xmm3, xmm2
punpckhbw xmm3, xmm1
pshuflw xmm3, xmm3, 0x1b
pshufhw xmm3, xmm3, 0x1b
punpcklbw xmm2, xmm1
pshuflw xmm2, xmm2, 0x1b
pshufhw xmm2, xmm2, 0x1b
packuswb xmm2, xmm3
movdqu xmmword [eax], xmm2
movdqa xmm2, xmm0
punpckhbw xmm2, xmm1
pshuflw xmm2, xmm2, 0x1b
pshufhw xmm2, xmm2, 0x1b
punpcklbw xmm0, xmm1
pshuflw xmm0, xmm0, 0x1b
pshufhw xmm0, xmm0, 0x1b
packuswb xmm0, xmm2
movdqu xmmword [eax + 0x10], xmm0
add esp, 0x58
pop esi
pop edi
pop ebx
pop ebp
ret
xor eax, eax
cmp dword [0xb2d324], 0xa28be0c0
setne al
shl eax, 2
mov ecx, dword [esp + 0x18]
sub ecx, eax
mov eax, dword [ecx]
cmp dword [esp + 0x20], 0
jle 0x66f3fb
add ecx, eax
mov dword [esp + 0x1c], ecx
xor esi, esi
mov ecx, dword [0xb2d328]
mov dword [esp + 0x30], ecx
pcmpeqd xmm0, xmm0
xorps xmm1, xmm1
xor ebp, ebp
mov dword [esp + 4], 0
xor edi, edi
xor edx, edx
mov dword [esp + 8], 0
mov dword [esp + 0x24], 0
jmp 0x66f97c
mov eax, dword [ebx + 0x3c]
mov dword [esp + 0x14], eax
mov ecx, dword [ebx + 0x38]
mov ebp, dword [ebx + 0x30]
mov ebx, dword [ebx + 0x34]
mov dword [esp], ebx
mov dword [esp + 0x10], ecx
mov dword [esp + 8], eax
lea ecx, [eax*8]
movdqu xmmword [esp + 0x48], xmm0
movups xmmword [esp + 0x38], xmm1
shr cl, 3
and cl, 0xf
neg cl
movsx ecx, cl
mov ebx, dword [esp + ecx + 0x48]
not ebx
and ebp, ebx
mov dword [esp + 0x28], ebp
mov ebx, dword [esp + ecx + 0x4c]
not ebx
and dword [esp], ebx
mov ebx, dword [esp + ecx + 0x50]
not ebx
and dword [esp + 0x10], ebx
mov ecx, dword [esp + ecx + 0x54]
not ecx
mov eax, dword [esp + 0x14]
and eax, ecx
mov ecx, dword [esp + 0x18]
mov ebx, dword [esp + 0x24]
mov ebp, edx
lea edx, [ecx + ebx*4]
add edx, 4
add edx, dword [ecx + ebx*4 + 4]
mov dword [esp + 0x1c], edx
mov edx, ebp
lea ecx, [ebx + 1]
mov ebx, dword [esp + 8]
lea esi, [esi + ebx - 0xc]
mov dword [esp + 8], 0
mov dword [esp + 0x24], ecx
mov ecx, dword [esp + 0x10]
mov ebp, dword [esp + 0xc]
xor edx, eax
xor edi, ecx
mov eax, dword [esp + 4]
xor eax, dword [esp]
mov dword [esp + 4], eax
xor ebp, dword [esp + 0x28]
add esi, 0x10
cmp esi, dword [esp + 0x20]
jge 0x66f409
mov ecx, dword [esp + 0x34]
lea ebx, [ecx + esi]
cmp dword [esp + 0x30], 0x96583f07
mov dword [esp + 0xc], ebp
je 0x66f8c0
mov ebp, dword [esp + 0x1c]
sub ebp, ebx
mov ecx, dword [esp + 8]
sbb ecx, 0
mov eax, ebp
cmp ebp, 0x10
sbb ecx, 0
mov ecx, dword [ebx + 0xc]
mov dword [esp + 0x14], ecx
mov ecx, dword [ebx + 8]
mov ebp, dword [ebx]
mov ebx, dword [ebx + 4]
mov dword [esp], ebx
jl 0x66f8d3
mov dword [esp + 0x28], ebp
mov ebp, dword [esp + 0xc]
mov eax, dword [esp + 0x14]
jmp 0x66f95c