Function at 0x588870
Capabilities:
Encode data using xor

Disassembly:
push ebp
lea ebp, [esp - 0x60]
sub esp, 0xfc
push ebx
push esi
push edi
mov esi, dword [ebp + 0x68]
mov edi, dword [ebp + 0x6c]
mov dword [ebp + 0x4c], esi
mov dword [ebp + 0x54], edi
mov esi, dword [ebp + 0x70]
mov dword [ebp + 0x5c], 2
mov dword [ebp + 0x50], esi
mov esi, dword [ebp + 0x4c]
mov edi, dword [ebp + 0x54]
movq mm0, qword [esi + 0x20]
movq mm1, qword [edi + 0x20]
movq mm2, qword [esi + 0x60]
pmullw mm0, mm1
movq mm3, qword [edi + 0x60]
movq mm6, qword [0x5fff88]
pmullw mm2, mm3
movq mm7, qword [0x5fffa8]
movq mm4, mm0
pmaddwd mm4, mm6
movq mm5, mm0
movq mm3, mm2
psrlq mm5, 0x10
movq mm1, qword [0x5fff80]
pmaddwd mm5, mm6
psrlq mm3, 0x10
paddw mm0, mm2
pmaddwd mm2, mm7
movq mm6, mm0
psrlq mm6, 0x10
pmaddwd mm3, mm7
movq mm7, qword [0x5fffd0]
pmaddwd mm0, mm1
pmaddwd mm6, mm1
pxor mm2, mm7
movq mm1, qword [0x5fffd8]
pxor mm3, mm7
paddd mm2, mm1
paddd mm3, mm1
paddd mm2, mm0
paddd mm4, mm0
movq mm0, qword [esi]
paddd mm3, mm6
movq mm1, qword [edi]
paddd mm5, mm6
movq mm6, qword [esi + 0x40]
pmullw mm0, mm1
movq mm7, qword [edi + 0x40]
nop
movq qword [ebp - 0x9c], mm2
pmullw mm6, mm7
movq mm7, qword [0x5fffe0]
movq mm1, mm0
paddw mm0, mm6
nop
psubw mm1, mm6
movq mm6, mm0
pmaddwd mm0, mm7
psrlq mm6, 0x10
pmaddwd mm6, mm7
movq mm2, mm1
pmaddwd mm1, mm7
psrlq mm2, 0x10
pmaddwd mm2, mm7
pslld mm0, 0xd
movq mm7, mm4
pslld mm6, 0xd
paddd mm4, mm0
psubd mm0, mm7
movq mm7, mm5
pslld mm2, 0xd
movq qword [ebp - 0x8c], mm0
paddd mm5, mm6
movq mm0, qword [ebp - 0x9c]
psubd mm6, mm7
movq qword [ebp - 0x7c], mm5
movq mm7, mm3
movq qword [ebp - 0x6c], mm6
paddd mm3, mm2
movq qword [ebp - 0x5c], mm4
pslld mm1, 0xd
movq qword [ebp - 0x4c], mm3
psubd mm2, mm7
movq mm6, qword [esi + 0x10]
movq mm3, mm0
movq qword [ebp - 0x3c], mm2
paddd mm0, mm1
movq mm7, qword [edi + 0x10]
movq qword [ebp - 0x2c], mm0
psubd mm1, mm3
movq mm0, qword [esi + 0x70]
pmullw mm6, mm7
movq qword [ebp - 0x1c], mm1
movq mm1, qword [edi + 0x70]
movq mm2, qword [esi + 0x50]
pmullw mm0, mm1
movq mm3, qword [edi + 0x50]
movq mm4, qword [esi + 0x30]
pmullw mm2, mm3
movq mm5, qword [edi + 0x30]
movq mm1, mm0
movq qword [ebp - 0xc], mm6
pmullw mm4, mm5
movq qword [ebp + 4], mm0
paddw mm0, mm6
movq qword [ebp + 0x14], mm2
movq mm3, mm2
movq qword [ebp + 0x24], mm4
paddw mm2, mm4
paddw mm1, mm4
movq mm4, qword [0x5fff98]
paddw mm3, mm6
movq mm5, mm1
movq mm7, mm0
psrlq mm7, 0x10
paddw mm5, mm3
movq mm6, mm5
pmaddwd mm5, mm4
pmaddwd mm0, qword [0x5fff90]
psrlq mm6, 0x10
pmaddwd mm6, mm4
movq mm4, mm2
movq qword [ebp + 0x34], mm5
psrlq mm4, 0x10
pxor mm0, qword [0x5fffd0]
movq mm5, mm1
movq qword [ebp + 0x3c], mm6
psrlq mm5, 0x10
movq mm6, qword [0x5fffc0]
nop
paddd mm0, qword [0x5fffd8]
pmaddwd mm2, mm6
movq qword [ebp - 0x64], mm0
pmaddwd mm4, mm6
pmaddwd mm7, qword [0x5fff90]
movq mm0, mm3
movq mm6, qword [0x5fffb0]
psrlq mm0, 0x10
pxor mm2, qword [0x5fffd0]
pmaddwd mm1, mm6
paddd mm2, qword [0x5fffd8]
pmaddwd mm5, mm6
movq mm6, qword [0x5fff78]
nop
pxor mm4, qword [0x5fffd0]
pmaddwd mm3, mm6
paddd mm4, qword [0x5fffd8]
pmaddwd mm0, mm6
movq mm6, qword [0x5fffd0]
nop
pxor mm1, mm6
pxor mm7, mm6
paddd mm1, qword [0x5fffd8]
pxor mm5, mm6
paddd mm7, qword [0x5fffd8]
pxor mm3, mm6
paddd mm5, qword [0x5fffd8]
nop
movq qword [ebp - 0x24], mm7
pxor mm0, mm6
paddd mm1, qword [ebp + 0x34]
nop
movq mm6, qword [ebp - 0x64]
nop
paddd mm5, qword [ebp + 0x3c]
paddd mm6, mm1
paddd mm3, qword [0x5fffd8]
paddd mm1, mm2
paddd mm0, qword [0x5fffd8]
paddd mm7, mm5
paddd mm3, qword [ebp + 0x34]
paddd mm5, mm4
paddd mm0, qword [ebp + 0x3c]
paddd mm2, mm3
paddd mm3, qword [ebp - 0x64]
paddd mm4, mm0
paddd mm0, qword [ebp - 0x24]
movq qword [ebp + 0x44], mm1
nop
movq qword [ebp - 0x14], mm0
nop
movq mm0, qword [ebp + 4]
nop
movq qword [ebp - 0x54], mm2
movq mm1, mm0
movq mm2, qword [0x5fff70]
psrlq mm1, 0x10
movq qword [ebp - 4], mm3
pmaddwd mm0, mm2
movq mm3, qword [ebp + 0x14]
pmaddwd mm1, mm2
movq qword [ebp - 0x74], mm4
movq mm2, mm3
movq mm4, qword [0x5fffb8]
psrlq mm2, 0x10
movq qword [ebp + 0xc], mm5
pmaddwd mm3, mm4
movq mm5, qword [ebp + 0x24]
pmaddwd mm2, mm4
movq qword [ebp - 0x44], mm6
movq mm4, mm5
movq mm6, qword [0x5fffc8]
psrlq mm4, 0x10
movq qword [ebp + 0x1c], mm7
pmaddwd mm5, mm6
movq mm7, qword [ebp - 0xc]
pmaddwd mm4, mm6
paddd mm0, qword [ebp - 0x44]
movq mm6, mm7
paddd mm1, qword [ebp + 0x1c]
psrlq mm6, 0x10
movq qword [ebp - 0x84], mm0
nop
movq mm0, qword [0x5fffa0]
nop
movq qword [ebp + 0x2c], mm1
pmaddwd mm7, mm0
paddd mm3, qword [ebp - 0x54]
pmaddwd mm6, mm0
movq mm0, qword [ebp - 0x5c]
nop
paddd mm7, qword [ebp - 4]
nop
paddd mm6, qword [ebp - 0x14]
psubd mm0, mm7
movq mm1, qword [ebp - 0x7c]
nop
movq qword [ebp - 0x34], mm3
psubd mm1, mm6
movq mm3, qword [0x5fffe8]
nop
paddd mm2, qword [ebp - 0x74]
paddd mm0, mm3
paddd mm7, qword [ebp - 0x5c]
psrad mm0, 0xb
movq qword [ebp - 0x94], mm2
paddd mm1, mm3
paddd mm6, qword [ebp - 0x7c]
psrad mm1, 0xb
paddd mm5, qword [ebp + 0x44]
movq mm2, mm0
paddd mm4, qword [ebp + 0xc]
punpcklwd mm0, mm1
paddd mm6, mm3
punpckhwd mm2, mm1
paddd mm7, mm3
punpckldq mm0, mm2
mov edi, dword [ebp + 0x50]
movq qword [edi + 0x70], mm0
psrad mm6, 0xb
movq mm2, qword [ebp - 0x2c]
psrad mm7, 0xb
psubd mm2, mm5
movq mm0, mm7
movq mm1, qword [ebp - 0x4c]
punpcklwd mm7, mm6
psubd mm1, mm4
punpckhwd mm0, mm6
paddd mm5, qword [ebp - 0x2c]
punpckldq mm7, mm0
paddd mm4, qword [ebp - 0x4c]
paddd mm2, mm3
paddd mm1, mm3
paddd mm5, mm3
paddd mm4, mm3
psrad mm2, 0xb
movq qword [edi], mm7
psrad mm1, 0xb
movq mm0, mm2
psrad mm5, 0xb
movq mm6, qword [ebp - 0x1c]
punpcklwd mm2, mm1
punpckhwd mm0, mm1
movq mm1, mm5
movq mm7, qword [ebp - 0x3c]
punpckldq mm2, mm0
movq qword [edi + 0x60], mm2
psrad mm4, 0xb
movq mm2, mm6
punpcklwd mm5, mm4
paddd mm6, qword [ebp - 0x34]
punpckhwd mm1, mm4
psubd mm2, qword [ebp - 0x34]
punpckldq mm5, mm1
movq qword [edi + 0x10], mm5
movq mm0, mm7
paddd mm7, qword [ebp - 0x94]
paddd mm6, mm3
psubd mm0, qword [ebp - 0x94]
paddd mm7, mm3
paddd mm2, mm3
psrad mm7, 0xb
paddd mm0, mm3
psrad mm6, 0xb
movq mm1, mm6
psrad mm2, 0xb
movq mm4, qword [ebp - 0x8c]
punpcklwd mm6, mm7
movq mm5, mm4
punpckhwd mm1, mm7
paddd mm4, qword [ebp - 0x84]
punpckldq mm6, mm1
psubd mm5, qword [ebp - 0x84]
psrad mm0, 0xb
movq qword [edi + 0x20], mm6
movq mm6, mm2
paddd mm4, mm3
punpcklwd mm2, mm0
paddd mm5, mm3
punpckhwd mm6, mm0
movq mm0, qword [ebp - 0x6c]
punpckldq mm2, mm6
movq mm1, mm0
psrad mm4, 0xb
paddd mm0, qword [ebp + 0x2c]
psrad mm5, 0xb
paddd mm0, mm3
movq mm6, mm4
psubd mm1, qword [ebp + 0x2c]
psrad mm0, 0xb
paddd mm1, mm3
punpcklwd mm4, mm0
movq mm3, mm5
punpckhwd mm6, mm0
movq qword [edi + 0x50], mm2
punpckldq mm4, mm6
psrad mm1, 0xb
movq qword [edi + 0x30], mm4
punpcklwd mm5, mm1
punpckhwd mm3, mm1
punpckldq mm5, mm3
add dword [ebp + 0x4c], 8
add dword [ebp + 0x54], 8
movq qword [edi + 0x40], mm5
add dword [ebp + 0x50], 8
mov eax, dword [ebp + 0x5c]
dec eax
mov dword [ebp + 0x5c], eax
jne 0x588897
mov esi, dword [ebp + 0x70]
mov dword [ebp + 0x5c], 8
mov dword [ebp + 0x50], esi
mov dword [ebp + 0x58], 0
mov esi, dword [ebp + 0x50]
mov edi, dword [ebp + 0x74]
movq mm0, qword [esi]
movq mm1, qword [esi + 8]
movq mm2, mm0
movq mm3, mm0
paddw mm2, mm1
movq mm4, mm2
punpckhdq mm3, mm1
pmaddwd mm3, qword [0x600000]
movq mm6, mm0
pmaddwd mm2, qword [0x600008]
psubw mm6, mm1
punpckldq mm4, mm6
movq mm6, mm0
movq mm5, mm3
pslld mm4, 0x10
pxor mm3, qword [0x5fffd0]
punpckhdq mm2, mm2
paddd mm3, qword [0x5fffd8]
psrad mm4, 3
psrlq mm3, 0x20
movq mm7, mm4
punpckldq mm5, mm3
movq mm3, mm0
paddd mm5, mm2
paddw mm3, mm1
paddd mm4, mm5
psubd mm7, mm5
movq mm5, mm3
movq mm2, mm0
pmaddwd mm0, qword [0x600010]
punpckldq mm5, mm5
paddw mm5, mm3
punpckldq mm2, mm2
pmaddwd mm5, qword [0x600030]
punpckhdq mm6, mm2
pmaddwd mm3, qword [0x600028]
paddw mm6, mm1
pmaddwd mm6, qword [0x600020]
nop
pmaddwd mm1, qword [0x600018]
punpckhdq mm5, mm5
movq mm2, qword [0x5fffd8]
nop
pxor mm3, qword [0x5fffd0]
nop
pxor mm6, qword [0x5fffd0]
paddd mm3, mm2
paddd mm6, mm2
paddd mm3, mm5
movq mm5, mm6
paddd mm6, mm3
movq mm2, mm5
punpckldq mm5, mm5
punpckhdq mm2, mm5
paddd mm1, mm6
paddd mm2, mm3
movq mm5, mm1
movq mm3, mm4
paddd mm0, mm2
movq mm2, mm7
punpckldq mm5, mm5
punpckhdq mm1, mm5
psubd mm3, mm0
movq mm5, qword [0x5ffff0]
paddd mm0, mm4
movq mm6, qword [0x5ffff8]
psubd mm2, mm1
paddd mm0, mm5
paddd mm1, mm7
paddd mm1, mm5
psrad mm0, 0x12
paddd mm3, mm5
psrad mm1, 0x12
paddd mm2, mm5
psrad mm3, 0x12
pand mm1, mm6
psrad mm2, 0x12
movd ebx, mm1
psrlq mm1, 0x20
mov ecx, dword [ebp + 0x7c]
add edi, dword [ebp + 0x58]
movd edx, mm1
pand mm0, mm6
mov ah, byte [ecx + ebx]
mov edi, dword [edi]
movd ebx, mm0
psrlq mm0, 0x20
mov al, byte [ecx + edx]
add dword [ebp + 0x58], 4
movd edx, mm0
pand mm3, mm6
add edi, dword [ebp + 0x78]
shl eax, 0x10
mov al, byte [ecx + ebx]
mov ah, byte [ecx + edx]
movd mm4, eax
pand mm2, mm6
movd ebx, mm3
psrlq mm3, 0x20
movd edx, mm3
mov ah, byte [ecx + ebx]
mov al, byte [ecx + edx]
movd ebx, mm2
psrlq mm2, 0x20
shl eax, 0x10
movd edx, mm2
mov al, byte [ecx + ebx]
mov ah, byte [ecx + edx]
movd mm5, eax
punpckldq mm4, mm5
add dword [ebp + 0x50], 0x10
mov eax, dword [ebp + 0x5c]
movq qword [edi], mm4
dec eax
mov dword [ebp + 0x5c], eax
jne 0x588d7c
emms
pop edi
pop esi
pop ebx
add ebp, 0x60
mov esp, ebp
pop ebp
ret 0x18