Function at 0x512810
Capabilities:
Encode data using add xor sub operations
Encode data using xor

Disassembly:
mov eax, 0x14
call fcn.005c5c30
mov eax, dword [esp + 0x1c]
mov ecx, dword [esp + 0x18]
push edi
mov edi, dword [esp + 0x24]
push edi
push eax
push ecx
call fcn.00511b90
add esp, 0xc
test eax, eax
jne 0x512ac0
mov edx, dword [edi + 0x110]
mov eax, dword [edi]
mov ecx, dword [edi + 4]
push ebx
mov ebx, dword [edi + 0xc]
push ebp
shl edx, 4
mov ebp, dword [edx + edi]
add edx, edi
push esi
mov esi, dword [edi + 8]
mov dword [edi], ebp
mov ebp, dword [edx + 4]
mov dword [edi + 4], ebp
mov ebp, dword [edx + 8]
mov dword [edi + 8], ebp
mov ebp, dword [edx + 0xc]
mov dword [edi + 0xc], ebp
mov dword [edx], eax
mov dword [edx + 4], ecx
mov dword [edx + 8], esi
mov dword [edx + 0xc], ebx
add edi, 0x10
sub edx, 0x10
cmp edi, edx
jae 0x512a15
mov ecx, dword [edi]
mov esi, dword [edi + 4]
mov eax, ecx
ror eax, 8
mov ebp, dword [edi + 8]
mov ebx, eax
xor ebx, ecx
rol ebx, 0x10
xor ebx, eax
mov ecx, esi
ror ecx, 8
mov eax, ecx
xor eax, esi
rol eax, 0x10
xor eax, ecx
mov ecx, ebp
ror ecx, 8
mov esi, ecx
xor esi, ebp
mov ebp, dword [edi + 0xc]
rol esi, 0x10
xor esi, ecx
xor eax, esi
mov ecx, ebp
ror ecx, 8
mov dword [esp + 0x10], ecx
xor ecx, ebp
rol ecx, 0x10
xor ecx, dword [esp + 0x10]
xor ebx, eax
xor esi, ecx
xor ecx, eax
xor esi, ebx
xor eax, esi
rol esi, 0x10
mov ebp, ecx
shr ebp, 0x10
mov dword [esp + 0x10], esi
mov esi, ecx
and esi, 0xff0000
xor esi, ebp
mov ebp, ecx
shl ecx, 0x10
and ebp, 0xff00
xor ebp, ecx
shl ebp, 8
shr esi, 8
xor esi, ebp
mov ecx, eax
mov ebp, eax
shr ecx, 8
shl ebp, 8
xor ecx, ebp
shl eax, 8
and ecx, 0xff00ff
xor ecx, eax
mov eax, dword [esp + 0x10]
xor ecx, eax
xor eax, esi
xor ebx, ecx
xor eax, ebx
xor esi, ecx
mov dword [esp + 0x14], ebx
mov ebx, eax
xor ebx, ecx
mov ecx, dword [edx]
mov dword [esp + 0x1c], eax
mov eax, ecx
ror eax, 8
mov ebp, eax
xor ebp, ecx
mov dword [esp + 0x20], esi
mov esi, dword [edx + 4]
rol ebp, 0x10
xor ebp, eax
mov ecx, esi
ror ecx, 8
mov eax, ecx
xor eax, esi
mov dword [esp + 0x18], ebx
rol eax, 0x10
mov ebx, dword [edx + 8]
xor eax, ecx
mov ecx, ebx
ror ecx, 8
mov esi, ecx
xor esi, ebx
mov ebx, dword [edx + 0xc]
rol esi, 0x10
xor esi, ecx
mov ecx, ebx
ror ecx, 8
mov dword [esp + 0x10], ecx
xor ecx, ebx
xor eax, esi
rol ecx, 0x10
xor ecx, dword [esp + 0x10]
xor ebp, eax
xor esi, ecx
xor ecx, eax
xor esi, ebp
xor eax, esi
rol esi, 0x10
mov ebx, ecx
mov dword [esp + 0x10], esi
mov esi, ecx
shr ebx, 0x10
and esi, 0xff0000
xor esi, ebx
mov ebx, ecx
shl ecx, 0x10
and ebx, 0xff00
xor ebx, ecx
shl ebx, 8
mov ecx, eax
shr esi, 8
xor esi, ebx
mov ebx, eax
shr ecx, 8
shl ebx, 8
xor ecx, ebx
shl eax, 8
and ecx, 0xff00ff
xor ecx, eax
mov eax, dword [esp + 0x10]
xor ecx, eax
xor eax, esi
xor ebp, ecx
xor eax, ebp
mov dword [edi + 8], eax
mov ebx, eax
mov eax, dword [esp + 0x14]
xor ebx, ecx
xor esi, ecx
mov ecx, dword [esp + 0x18]
mov dword [edi], ebp
mov dword [edi + 4], ebx
mov dword [edi + 0xc], esi
mov dword [edx], eax
mov eax, dword [esp + 0x1c]
mov dword [edx + 4], ecx
mov ecx, dword [esp + 0x20]
mov dword [edx + 8], eax
mov dword [edx + 0xc], ecx
add edi, 0x10
sub edx, 0x10
cmp edi, edx
jb 0x512883
mov ecx, dword [edi]
mov esi, dword [edi + 4]
mov ebp, dword [edi + 8]
mov eax, ecx
ror eax, 8
mov edi, dword [edi + 0xc]
mov ebx, eax
xor ebx, ecx
rol ebx, 0x10
xor ebx, eax
mov ecx, esi
ror ecx, 8
mov eax, ecx
xor eax, esi
rol eax, 0x10
xor eax, ecx
mov ecx, ebp
ror ecx, 8
mov esi, ecx
xor esi, ebp
rol esi, 0x10
xor esi, ecx
mov ebp, edi
ror ebp, 8
mov ecx, ebp
xor ecx, edi
rol ecx, 0x10
xor ecx, ebp
xor eax, esi
xor esi, ecx
xor ecx, eax
mov edi, ecx
mov ebp, ecx
shr ebp, 0x10
and edi, 0xff0000
xor edi, ebp
mov ebp, ecx
xor ebx, eax
shl ecx, 0x10
and ebp, 0xff00
xor ebp, ecx
xor esi, ebx
xor eax, esi
shl ebp, 8
shr edi, 8
xor edi, ebp
mov ecx, eax
mov ebp, eax
shr ecx, 8
shl ebp, 8
xor ecx, ebp
shl eax, 8
rol esi, 0x10
and ecx, 0xff00ff
xor ecx, eax
xor ecx, esi
xor esi, edi
xor ebx, ecx
xor esi, ebx
mov eax, esi
mov dword [edx + 8], esi
pop esi
xor eax, ecx
xor edi, ecx
pop ebp
mov dword [edx], ebx
mov dword [edx + 4], eax
mov dword [edx + 0xc], edi
xor eax, eax
pop ebx
pop edi
add esp, 0x14
ret