Function at 0x7a4770
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x1c
mov eax, dword [0xbcbae0]
mov edi, edx
mov esi, ecx
mov ebp, esp
xor edx, edx
mov ecx, ebp
xor eax, esp
mov dword [esp + 0x18], eax
push 0
push 0x20
push esi
call fcn.007779c0
add esp, 0xc
movzx eax, word [edi + 8]
test al, 4
je 0x7a48fe
mov edx, 0x77efe0
xor eax, eax
movzx ebx, byte [0xbad53f]
and edx, 1
inc edx
mov ecx, edx
xor ecx, 0x77efe0
sete al
mov ecx, eax
xor ecx, 1
lea eax, [eax + ecx*2 + 2]
bt ebx, eax
jb 0x7a48ee
mov al, byte [0xbad53f]
mov ebp, edx
xor ebx, ebx
mov ah, 1
xor ebp, 0x77efe0
sete bl
mov ecx, ebx
xor ecx, 1
lea ecx, [ebx + ecx*2 + 2]
xor cl, 7
shl ah, cl
or ah, al
lock cmpxchg byte [0xbad53f], ah
jne 0x7a47d9
mov ecx, 0x77efe0
xor edx, edx
movzx eax, al
and ecx, 1
inc ecx
mov ebx, ecx
xor ebx, 0x77efe0
sete dl
mov ebx, edx
xor ebx, 1
lea edx, [edx + ebx*2 + 2]
xor dl, 7
movzx edx, dl
bt eax, edx
jae 0x7a4858
mov ebp, esp
mov edx, ecx
xor eax, eax
movzx ebx, byte [0xbad53f]
xor edx, 0x77efe0
sete al
mov edx, eax
xor edx, 1
lea eax, [eax + edx*2 + 2]
bt ebx, eax
jae 0x7a4831
jmp 0x7a48ee
xor eax, eax
xor ecx, 0x77efe0
movzx edx, byte [0xbad53f]
mov ebp, esp
sete al
mov ecx, eax
xor ecx, 1
lea eax, [eax + ecx*2 + 2]
bt edx, eax
jb 0x7a48c5
mov ecx, 0x77efe0
xor eax, eax
mov ebx, dword [0xbad534]
mov dl, 1
and ecx, 1
inc ecx
xor ecx, 0x77efe0
sete al
mov ecx, eax
not ecx
and ecx, 0x405
lea ecx, [eax + ecx*2 + 0x3afc932]
xor ebx, ecx
mov dword [0xbad534], ebx
not ebx
imul ebx, ecx
and cl, 7
shl dl, cl
xor dword [0xbad538], ebx
or byte [0xbad53f], dl
mov eax, 0x77efe0
xor ecx, ecx
and eax, 1
inc eax
xor eax, 0x77efe0
sete cl
mov eax, ecx
xor eax, 1
lea ecx, [ecx + eax*2 + 2]
mov al, 0xfe
xor cl, 7
rol al, cl
and byte [0xbad53f], al
push dword [edi + 4]
push dword [edi]
push 0xbad534
push ebp
jmp 0x7a4b9f
test al, 0x20
je 0x7a4a6f
mov edx, fcn.008031e0
xor eax, eax
movzx ebx, byte [0xbad54b]
not edx
and edx, 1
mov ecx, edx
add ecx, fcn.008031e0
sete al
mov ecx, eax
xor ecx, 1
lea eax, [eax + ecx*2 + 2]
bt ebx, eax
jb 0x7a4a56
mov al, byte [0xbad54b]
mov ebx, edx
xor ecx, ecx
mov ah, 1
add ebx, fcn.008031e0
sete cl
mov ebx, ecx
xor ebx, 1
lea ecx, [ecx + ebx*2 + 2]
xor cl, 7
shl ah, cl
or ah, al
lock cmpxchg byte [0xbad54b], ah
jne 0x7a493b
mov ecx, fcn.008031e0
xor edx, edx
movzx eax, al
not ecx
and ecx, 1
mov ebx, ecx
add ebx, fcn.008031e0
sete dl
mov ebx, edx
xor ebx, 1
lea edx, [edx + ebx*2 + 2]
xor dl, 7
movzx edx, dl
bt eax, edx
jae 0x7a49b9
mov edx, ecx
xor eax, eax
movzx ebx, byte [0xbad54b]
add edx, fcn.008031e0
sete al
mov edx, eax
xor edx, 1
lea eax, [eax + edx*2 + 2]
bt ebx, eax
jae 0x7a4992
jmp 0x7a4a56
xor eax, eax
add ecx, fcn.008031e0
movzx edx, byte [0xbad54b]
sete al
mov ecx, eax
xor ecx, 1
lea eax, [eax + ecx*2 + 2]
bt edx, eax
jb 0x7a4a2c
mov ecx, fcn.008031e0
xor eax, eax
mov ebx, dword [0xbad540]
not ecx
and ecx, 1
add ecx, fcn.008031e0
sete al
mov ecx, eax
not ecx
and ecx, 0x8a9
lea ecx, [eax + ecx*2 + 0x6d2da752]
mov edx, ecx
xor ebx, ecx
shr edx, 0x1f
mov dword [0xbad540], ebx
not ebx
or edx, ecx
and cl, 7
imul edx, ebx
xor dword [0xbad544], edx
mov dl, 1
shl dl, cl
or byte [0xbad54b], dl
mov eax, fcn.008031e0
xor ecx, ecx
not eax
and eax, 1
add eax, fcn.008031e0
sete cl
mov eax, ecx
xor eax, 1
lea ecx, [ecx + eax*2 + 2]
mov al, 0xfe
xor cl, 7
rol al, cl
and byte [0xbad54b], al
fild qword [edi]
sub esp, 0x10
fstp qword [esp + 8]
mov dword [esp], ebp
mov dword [esp + 4], 0xbad540
jmp 0x7a4b9f
mov edx, 0x79f8c0
movzx ecx, byte [0xbad557]
not edx
and edx, 1
mov eax, edx
add eax, 0x79f8c0
sete al
or al, 4
movzx eax, al
bt ecx, eax
jb 0x7a4b8b
mov al, byte [0xbad557]
mov ecx, edx
mov ah, 1
add ecx, 0x79f8c0
sete cl
or cl, 4
xor cl, 7
shl ah, cl
or ah, al
lock cmpxchg byte [0xbad557], ah
jne 0x7a4a9d
mov ecx, 0x79f8c0
movzx eax, al
not ecx
and ecx, 1
mov edx, ecx
add edx, 0x79f8c0
sete dl
or dl, 4
xor dl, 7
movzx edx, dl
bt eax, edx
jae 0x7a4b04
mov eax, ecx
movzx edx, byte [0xbad557]
add eax, 0x79f8c0
sete al
or al, 4
movzx eax, al
bt edx, eax
jae 0x7a4ae4
jmp 0x7a4b8b
add ecx, 0x79f8c0
movzx ecx, byte [0xbad557]
sete al
or al, 4
movzx eax, al
bt ecx, eax
jb 0x7a4b69
mov eax, 0x79f8c0
xor ecx, ecx
not eax
and eax, 1
add eax, 0x79f8c0
mov eax, dword [0xbad54c]
sete cl
or ecx, 0xd8698858
add ecx, 0x24c
mov edx, ecx
xor eax, ecx
shr edx, 0x1f
mov dword [0xbad54c], eax
not eax
or edx, ecx
and cl, 7
imul edx, eax
xor dword [0xbad550], edx
mov dl, 1
shl dl, cl
or byte [0xbad557], dl
mov eax, 0x79f8c0
not eax
and eax, 1
add eax, 0x79f8c0
mov al, 0xfe
sete cl
or cl, 4
xor cl, 7
rol al, cl
and byte [0xbad557], al
fld qword [edi]
sub esp, 0x10
fstp qword [esp + 8]
mov dword [esp], ebp
mov dword [esp + 4], 0xbad54c
call fcn.00777c30
add esp, 0x10
mov eax, dword [esp + 0x10]
mov byte [esi + eax], 0
mov ecx, dword [esp + 0x18]
xor ecx, esp
call fcn.00980459
add esp, 0x1c
pop esi
pop edi
pop ebx
pop ebp
ret