Function at 0x78adf0
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
mov ebx, edx
mov esi, ecx
call fcn.0078a1f0
test eax, eax
je 0x78ae15
mov ecx, 0x4d29
call fcn.00780040
mov edi, 0x15
jmp 0x78b0f4
mov eax, dword [esi]
push dword [eax + 0xc]
call fcn.007801d0
add esp, 4
cmp dword [esi + 0x14], 0x2df20da3
jne 0x78ae35
cmp dword [esi + 0x24], 0
js 0x78b073
mov edx, fcn.007ffa10
movzx ecx, byte [0xbb69bf]
xor eax, eax
imul edx, edx
and edx, 3
cmp edx, 2
sete al
bt ecx, eax
jb 0x78b031
mov al, byte [0xbb69bf]
cmp edx, 2
mov ah, 1
sete cl
xor cl, 7
shl ah, cl
or ah, al
lock cmpxchg byte [0xbb69bf], ah
jne 0x78ae5d
mov ecx, fcn.007ffa10
movzx eax, al
imul ecx, ecx
and ecx, 3
cmp ecx, 2
sete dl
xor dl, 7
movzx edx, dl
bt eax, edx
jae 0x78aeae
movzx edx, byte [0xbb69bf]
xor eax, eax
cmp ecx, 2
sete al
bt edx, eax
jae 0x78ae95
jmp 0x78b031
movzx edx, byte [0xbb69bf]
xor eax, eax
cmp ecx, 2
sete al
bt edx, eax
jb 0x78b013
mov eax, fcn.007ffa10
xor ecx, ecx
imul eax, eax
and eax, 3
cmp eax, 2
mov eax, dword [0xbb6990]
sete cl
or ecx, 0xf1ba6a90
add ecx, 0x898
mov edx, ecx
xor eax, ecx
shr edx, 0x1f
mov dword [0xbb6990], eax
not eax
or edx, ecx
and cl, 7
imul edx, eax
mov eax, dword [0xbb6994]
lea edi, [edx + edx]
xor eax, edx
shr edx, 0x1e
mov dword [0xbb6994], eax
or edi, edx
not eax
mov edx, dword [0xbb6998]
imul eax, edi
lea edi, [eax*4]
xor edx, eax
shr eax, 0x1d
mov dword [0xbb6998], edx
or edi, eax
not edx
mov eax, dword [0xbb699c]
imul edx, edi
lea edi, [edx*8]
xor eax, edx
shr edx, 0x1c
mov dword [0xbb699c], eax
or edi, edx
not eax
mov edx, dword [0xbb69a0]
imul eax, edi
mov edi, eax
shl edi, 4
xor edx, eax
shr eax, 0x1b
mov dword [0xbb69a0], edx
or eax, edi
not edx
mov ebx, dword [0xbb69a4]
imul edx, eax
mov edi, edx
shl edi, 5
xor ebx, edx
shr edx, 0x1a
mov dword [0xbb69a4], ebx
or edx, edi
not ebx
imul ebx, edx
mov edx, dword [0xbb69a8]
mov edi, ebx
shl edi, 6
xor edx, ebx
shr ebx, 0x19
mov dword [0xbb69a8], edx
or ebx, edi
not edx
mov ebp, dword [0xbb69ac]
imul edx, ebx
mov edi, edx
shl edi, 7
xor ebp, edx
shr edx, 0x18
mov dword [0xbb69ac], ebp
or edx, edi
not ebp
imul ebp, edx
mov edx, dword [0xbb69b0]
mov edi, ebp
shl edi, 8
xor edx, ebp
shr ebp, 0x17
mov dword [0xbb69b0], edx
or ebp, edi
not edx
mov ebx, dword [0xbb69b4]
imul edx, ebp
mov edi, edx
shl edi, 9
xor ebx, edx
shr edx, 0x16
mov dword [0xbb69b4], ebx
or edx, edi
not ebx
imul ebx, edx
mov dl, 1
xor dword [0xbb69b8], ebx
shl dl, cl
or byte [0xbb69bf], dl
mov eax, fcn.007ffa10
imul eax, eax
and eax, 3
cmp eax, 2
mov al, 0xfe
sete cl
xor cl, 7
rol al, cl
and byte [0xbb69bf], al
mov ecx, dword [esi]
mov edx, 0x15
mov edi, 0x15
call fcn.007870c0
mov eax, dword [esi]
push dword [eax + 0xc]
call fcn.007801e0
add esp, 4
push dword [esi + 0xc0]
push 0xbb6990
push 0x15
call fcn.00783470
add esp, 0xc
mov ecx, 0x4d31
call fcn.00780040
jmp 0x78b0f4
test ebx, ebx
jle 0x78b07f
movsx eax, word [esi + 0x10]
cmp eax, ebx
jge 0x78b09f
mov ecx, dword [esi]
mov edx, 0x19
mov edi, 0x19
call fcn.007870c0
mov eax, dword [esi]
push dword [eax + 0xc]
call fcn.007801e0
add esp, 4
jmp 0x78b0f4
mov edi, dword [esi + 0x64]
dec ebx
lea ebp, [ebx + ebx*4]
lea ecx, [edi + ebp*8]
call fcn.007891f0
mov word [edi + ebp*8 + 8], 1
xor edi, edi
mov eax, dword [esi]
mov dword [eax + 0x40], 0
mov eax, dword [esi + 0xd4]
test eax, eax
je 0x78b0f4
mov edx, 1
mov ecx, ebx
shl edx, cl
cmp ebx, 0x1e
mov ebx, 0x80000000
cmovle ebx, edx
test eax, ebx
je 0x78b0f4
mov eax, dword [esi + 0x98]
and eax, 0xfffffffc
or eax, 1
mov dword [esi + 0x98], eax
mov eax, edi
pop esi
pop edi
pop ebx
pop ebp
ret