Function at 0x51db20
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
push 0xffffffffffffffff
push 0x61a818
mov eax, dword fs:[0]
push eax
sub esp, 0x54
mov eax, dword [0x6b64f0]
xor eax, esp
mov dword [esp + 0x4c], eax
push esi
push edi
mov eax, dword [0x6b64f0]
xor eax, esp
push eax
lea eax, [esp + 0x60]
mov dword fs:[0], eax
mov edi, ecx
mov eax, dword [ebp + 8]
lea ecx, [esp + 0x24]
mov esi, dword [ebp + 0xc]
mov dword [esp + 0x4c], 8
mov byte [esp + 0x45], 1
mov dword [esp + 0x50], ecx
push esi
push eax
mov eax, ecx
mov dword [esp + 0x70], 0
push 0x20
push eax
mov dword [esp + 0x24], esi
mov dword [esp + 0x30], 4
call fcn.005decb9
mov eax, 0x20
sub eax, esi
push eax
lea eax, [esp + 0x38]
add eax, esi
push 0
push eax
call fcn.005dad10
add esp, 0x1c
lea edx, [esp + 0x20]
lea ecx, [esp + 0x14]
call fcn.004ef4a0
cmp esi, 0x20
jae 0x51dbdb
mov eax, dword [esp + 0x50]
mov edx, esi
shr edx, 2
and esi, 3
shl esi, 3
mov ecx, esi
lea edx, [eax + edx*4]
mov eax, 1
shl eax, cl
or dword [edx], eax
mov eax, dword [esp + 0x50]
mov ecx, dword [eax + 0x14]
xor ecx, dword [eax + 0xc]
xor ecx, dword [eax + 0x1c]
xor ecx, dword [eax]
xor ecx, 0x9e3779b9
rol ecx, 0xb
mov dword [eax], ecx
mov eax, dword [esp + 0x50]
mov dword [edi], ecx
mov edx, dword [eax + 0x18]
xor edx, dword [eax + 0x10]
xor edx, dword [eax + 4]
xor edx, ecx
xor edx, 0x9e3779b8
rol edx, 0xb
mov dword [eax + 4], edx
mov eax, dword [esp + 0x50]
mov dword [edi + 4], edx
mov ecx, dword [eax + 0x1c]
xor ecx, dword [eax + 0x14]
xor ecx, edx
xor ecx, dword [eax + 8]
xor ecx, 0x9e3779bb
rol ecx, 0xb
mov dword [eax + 8], ecx
mov eax, dword [esp + 0x50]
mov dword [edi + 8], ecx
mov esi, dword [eax + 0x18]
xor esi, ecx
xor esi, dword [eax]
xor esi, dword [eax + 0xc]
xor esi, 0x9e3779ba
rol esi, 0xb
mov dword [eax + 0xc], esi
lea eax, [edi + 0xc]
mov ecx, dword [esp + 0x50]
mov dword [eax], esi
mov edx, dword [ecx + 0x1c]
xor edx, dword [ecx + 4]
xor edx, dword [ecx + 0x10]
xor edx, esi
xor edx, 0x9e3779bd
rol edx, 0xb
mov dword [ecx + 0x10], edx
mov ecx, dword [esp + 0x50]
mov dword [edi + 0x10], edx
mov esi, dword [ecx + 8]
xor esi, edx
xor esi, dword [ecx]
xor esi, dword [ecx + 0x14]
xor esi, 0x9e3779bc
rol esi, 0xb
mov dword [ecx + 0x14], esi
mov ecx, dword [esp + 0x50]
mov dword [edi + 0x14], esi
mov edx, dword [ecx + 0xc]
xor edx, dword [ecx + 4]
xor edx, dword [ecx + 0x18]
xor edx, esi
xor edx, 0x9e3779bf
rol edx, 0xb
mov dword [ecx + 0x18], edx
mov ecx, dword [esp + 0x50]
mov dword [edi + 0x18], edx
mov esi, dword [ecx + 0x10]
xor esi, dword [ecx + 8]
xor esi, dword [ecx + 0x1c]
xor esi, edx
mov edx, 8
xor esi, 0x9e3779be
rol esi, 0xb
mov dword [ecx + 0x1c], esi
mov dword [edi + 0x1c], esi
mov edi, edi
mov ecx, dword [eax - 0xc]
lea eax, [eax + 4]
xor ecx, dword [eax + 4]
xor ecx, edx
inc edx
xor esi, ecx
xor esi, dword [eax - 4]
xor esi, 0x9e3779b9
rol esi, 0xb
mov dword [eax + 0x10], esi
cmp edx, 0x84
jb 0x51dcd0
sub edi, 0x50
mov dword [esp + 0x20], 4
mov dword [esp + 0x10], edi
mov ecx, dword [edi + 0x50]
mov esi, ecx
mov eax, dword [edi + 0x54]
mov edi, dword [edi + 0x58]
mov edx, dword [esp + 0x10]
mov edx, dword [edx + 0x5c]
or ecx, edx
xor edx, eax
and eax, esi
xor esi, edi
xor edi, edx
or esi, eax
mov dword [esp + 0x14], edi
and edx, ecx
xor ecx, eax
xor edx, esi
mov dword [esp + 0x1c], ecx
and esi, dword [esp + 0x1c]
mov ecx, edx
xor ecx, eax
xor esi, dword [esp + 0x14]
or ecx, dword [esp + 0x1c]
mov eax, edx
xor ecx, edi
mov edi, dword [esp + 0x10]
or eax, ecx
xor eax, edx
xor eax, dword [esp + 0x1c]
mov dword [edi + 0x50], eax
mov eax, edi
mov dword [eax + 0x54], ecx
mov ecx, edi
mov eax, dword [ecx + 0x60]
mov edi, eax
mov dword [ecx + 0x58], edx
mov edx, dword [ecx + 0x64]
mov dword [ecx + 0x5c], esi
mov esi, dword [ecx + 0x68]
and edi, esi
mov ecx, dword [ecx + 0x6c]
xor edi, ecx
mov dword [esp + 0x14], eax
mov eax, edi
xor eax, edx
xor esi, eax
mov dword [esp + 0x1c], esi
mov esi, dword [esp + 0x14]
mov eax, dword [esp + 0x1c]
or esi, ecx
xor esi, edx
mov edx, dword [esp + 0x14]
xor edx, eax
mov ecx, edx
or ecx, esi
xor ecx, edi
and edi, esi
xor edx, edi
mov edi, dword [esp + 0x10]
mov dword [edi + 0x60], eax
mov eax, edx
xor eax, esi
mov dword [edi + 0x64], ecx
mov esi, dword [edi + 0x7c]
not edx
mov dword [edi + 0x6c], edx
xor eax, ecx
mov edx, dword [esp + 0x10]
mov dword [edi + 0x68], eax
mov eax, dword [edi + 0x74]
mov edi, dword [edi + 0x70]
mov edx, dword [edx + 0x78]
not edi
mov ecx, edi
not edx
and edi, eax
xor edx, edi
or edi, esi
xor eax, edi
xor esi, edx
xor edi, ecx
or ecx, eax
xor eax, esi
or edx, edi
xor edi, eax
mov dword [esp + 0x14], eax
mov eax, dword [esp + 0x10]
and edx, ecx
mov dword [eax + 0x70], edx
mov eax, edx
and edx, dword [esp + 0x14]
and eax, edi
xor eax, ecx
xor edx, edi
mov ecx, dword [esp + 0x10]
mov dword [ecx + 0x78], esi
mov esi, ecx
mov dword [ecx + 0x74], eax
mov ecx, dword [esi + 0x80]
mov edi, dword [esi + 0x88]
lea eax, [esi + 0x80]
mov dword [esi + 0x7c], edx
mov edx, dword [esi + 0x8c]
xor edx, ecx
mov dword [esp + 0x18], eax
mov eax, dword [esi + 0x84]
mov dword [esp + 0x14], edi
xor edi, eax
mov dword [esp + 0x1c], edx
and edx, eax
mov eax, dword [esp + 0x1c]
xor edx, ecx
mov esi, eax
or esi, ecx
mov ecx, dword [esp + 0x14]
xor esi, edi
xor edi, eax
xor eax, ecx
or ecx, edx
xor ecx, edi
not edi
or edi, edx
mov dword [esp + 0x14], ecx
mov ecx, eax
or eax, esi
xor ecx, edx
mov dword [esp + 0x1c], eax
mov edx, dword [esp + 0x1c]
xor ecx, edi
xor eax, ecx
xor edx, edi
mov ecx, dword [esp + 0x18]
mov edi, dword [esp + 0x14]
mov dword [ecx], eax
mov eax, dword [esp + 0x10]
mov dword [eax + 0x8c], esi
mov esi, ecx
mov dword [eax + 0x84], edx
mov dword [eax + 0x88], edi
mov dword [esp + 0x10], esi
mov eax, dword [esi + 0x10]
mov edx, dword [esi + 0x14]
mov ecx, dword [esi + 0x18]
mov edi, dword [esi + 0x1c]
mov esi, edx
and esi, ecx
xor esi, edi
and edi, edx
xor ecx, esi
xor esi, edx
xor edx, eax
mov dword [esp + 0x14], edx
mov edx, ecx
xor edi, dword [esp + 0x14]
or edx, eax
xor edx, esi
xor esi, edi
mov eax, esi
and edi, edx
xor eax, ecx
xor edi, ecx
not eax
and esi, edx
mov ecx, dword [esp + 0x10]
xor esi, eax
and eax, edx
xor eax, dword [esp + 0x14]
xor eax, edi
mov dword [ecx + 0x14], eax
mov eax, dword [ecx + 0x28]
mov dword [ecx + 0x18], edi
not eax
mov dword [ecx + 0x1c], edx
mov edx, dword [ecx + 0x2c]
mov edi, edx
mov dword [ecx + 0x10], esi
mov esi, dword [ecx + 0x20]
and edx, esi
mov ecx, dword [ecx + 0x24]
xor edx, eax
xor esi, edi
mov dword [esp + 0x14], edx
xor ecx, edx
mov edx, edi
or edx, eax
mov dword [esp + 0x18], ecx
mov eax, dword [esp + 0x14]
xor edx, esi
or esi, ecx
xor edx, ecx
mov ecx, dword [esp + 0x10]
xor edi, esi
or eax, esi
mov esi, dword [esp + 0x14]
xor edi, esi
xor eax, edx
xor edi, eax
not esi
mov dword [ecx + 0x20], eax
mov eax, dword [esp + 0x10]
mov ecx, dword [esp + 0x18]
mov dword [eax + 0x28], edi
and edi, edx
mov edx, dword [eax + 0x30]
xor edi, esi
mov esi, dword [eax + 0x34]
xor edx, esi
mov dword [eax + 0x2c], edi
mov edi, dword [eax + 0x3c]
xor esi, edi
mov dword [eax + 0x24], ecx
not edi
mov ecx, dword [eax + 0x38]
mov eax, edx
xor ecx, edi
and eax, esi
xor eax, ecx
or ecx, esi
xor esi, edi
and edi, eax
xor esi, ecx
xor edi, edx
xor esi, eax
xor ecx, edx
mov dword [esp + 0x18], esi
not ecx
mov esi, dword [esp + 0x10]
mov dword [esi + 0x30], eax
mov eax, esi
mov dword [eax + 0x34], edi
mov eax, edi
or edi, dword [esp + 0x18]
and eax, edx
xor eax, dword [esp + 0x18]
mov edx, esi
xor edi, ecx
mov dword [edx + 0x38], eax
mov eax, esi
mov ecx, dword [eax + 0x4c]
mov edx, dword [eax + 0x44]
mov dword [eax + 0x3c], edi
xor edx, ecx
mov edi, dword [eax + 0x40]
not ecx
mov esi, dword [eax + 0x48]
xor esi, ecx
xor ecx, edi
mov eax, ecx
and eax, edx
xor edx, ecx
xor eax, esi
xor edi, edx
and esi, edx
xor esi, edi
and edi, eax
xor ecx, edi
mov dword [esp + 0x18], ecx
mov ecx, eax
or ecx, edx
mov edx, dword [esp + 0x10]
xor ecx, edi
mov dword [edx + 0x40], eax
mov edx, dword [esp + 0x18]
mov eax, edx
and eax, esi
xor eax, ecx
mov ecx, dword [esp + 0x10]
mov dword [ecx + 0x44], eax
mov eax, edx
or eax, edi
mov edi, ecx
xor eax, esi
dec dword [esp + 0x20]
not eax
mov dword [edi + 0x48], eax
mov dword [edi + 0x4c], edx
jne 0x51dd04
mov ecx, dword [edi + 0x50]
mov esi, ecx
mov edx, dword [esp + 0x10]
mov eax, dword [edi + 0x54]
mov edi, dword [edi + 0x58]
mov edx, dword [edx + 0x5c]
or ecx, edx
xor edx, eax
and eax, esi
xor esi, edi
xor edi, edx
or esi, eax
and edx, ecx
xor ecx, eax
mov dword [esp + 0x18], esi
xor edx, esi
mov dword [esp + 0x14], ecx
mov esi, dword [esp + 0x10]
mov ecx, edx
xor ecx, eax
mov eax, edx
or ecx, dword [esp + 0x14]
xor ecx, edi
or eax, ecx
xor eax, edx
xor eax, dword [esp + 0x14]
mov dword [esi + 0x50], eax
mov eax, esi
mov esi, dword [esp + 0x18]
and esi, dword [esp + 0x14]
xor esi, edi
mov edi, dword [esp + 0x50]
mov dword [eax + 0x54], ecx
mov dword [eax + 0x58], edx
mov dword [eax + 0x5c], esi
lea eax, [esp + 0x24]
cmp edi, eax
jne 0x51e05e
mov ecx, dword [esp + 0x4c]
xor eax, eax
rep stosd dword es:[edi], eax
mov ecx, dword [esp + 0x60]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
mov ecx, dword [esp + 0x4c]
xor ecx, esp
call fcn.005d67d1
mov esp, ebp
pop ebp
ret