Function at 0x800ad0
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 8
mov ebp, dword [ecx]
mov esi, ecx
mov edi, edx
mov ecx, ebp
call fcn.007aa960
xor ebx, ebx
test eax, eax
jne 0x800f36
test byte [ebp + 0xa8], 2
jne 0x800f36
cmp byte [ebp + 0xa5], 0
je 0x800b64
mov ebp, dword [ebp + 0xac]
push dword [ebp]
push dword [esp + 0x20]
call fcn.00783700
add esp, 8
test eax, eax
jne 0x800b44
push dword [ebp + 4]
push edi
call fcn.00783700
add esp, 8
test eax, eax
jne 0x800b44
push dword [ebp + 8]
push dword [esp + 0x24]
call fcn.00783700
add esp, 8
test eax, eax
je 0x800f36
cmp byte [0xbb32f9], 0
je 0x800f36
push 0xc26bb4
push esi
call fcn.0078de60
add esp, 8
jmp 0x800f31
cmp byte [esi + 0x12], 0
jne 0x800cdc
mov edx, 0x799120
mov eax, 0x799120
movzx ecx, byte [0xbb803b]
and edx, 1
xor edx, eax
cmp edx, 0xffffffff
sete al
not al
add al, 0x10
and al, 7
movzx eax, al
bt ecx, eax
jb 0x800cc8
mov al, byte [0xbb803b]
cmp edx, 0xffffffff
mov ah, 1
sete cl
not cl
add cl, 0x10
and cl, 7
xor cl, 7
shl ah, cl
or ah, al
lock cmpxchg byte [0xbb803b], ah
jne 0x800ba1
mov ecx, 0x799120
mov edx, 0x799120
movzx eax, al
and ecx, 1
xor ecx, edx
cmp ecx, 0xffffffff
sete dl
not dl
add dl, 0x10
and dl, 7
xor dl, 7
movzx edx, dl
bt eax, edx
jae 0x800c0d
cmp ecx, 0xffffffff
movzx edx, byte [0xbb803b]
sete al
not al
add al, 0x10
and al, 7
movzx eax, al
bt edx, eax
jae 0x800bed
jmp 0x800cc8
cmp ecx, 0xffffffff
movzx ecx, byte [0xbb803b]
sete al
not al
add al, 0x10
and al, 7
movzx eax, al
bt ecx, eax
jb 0x800c9e
mov edx, 0x799120
mov eax, 0x799120
xor ecx, ecx
and edx, 1
xor edx, eax
mov eax, dword [0xbb802c]
cmp edx, 0xffffffff
sete cl
xor ecx, 0xd433edf7
add ecx, 0x410
mov edx, ecx
xor eax, ecx
mov dword [esp + 4], ecx
shr edx, 0x1f
mov dword [0xbb802c], eax
not eax
or edx, ecx
mov ecx, dword [0xbb8030]
imul edx, eax
lea eax, [edx + edx]
mov dword [esp], eax
mov al, 1
xor ecx, edx
shr edx, 0x1e
mov dword [0xbb8030], ecx
or dword [esp], edx
not ecx
imul ecx, dword [esp]
xor dword [0xbb8034], ecx
mov ecx, dword [esp + 4]
and cl, 7
shl al, cl
or byte [0xbb803b], al
mov ecx, 0x799120
mov eax, 0x799120
and ecx, 1
xor ecx, eax
mov al, 0xfe
cmp ecx, 0xffffffff
sete cl
not cl
add cl, 0x10
and cl, 7
xor cl, 7
rol al, cl
and byte [0xbb803b], al
push 7
push 0xbb802c
push edi
call fcn.00783750
add esp, 0xc
test eax, eax
je 0x800cfc
mov ecx, ebp
call fcn.00801170
test eax, eax
je 0x800f36
mov ecx, ebp
mov edx, edi
call fcn.008011a0
test eax, eax
je 0x800f36
mov edx, fcn.00783f90
movzx ecx, byte [0xbb806f]
not edx
and edx, 1
mov eax, edx
add eax, fcn.00783f90
sete al
not al
and al, 3
movzx eax, al
bt ecx, eax
jb 0x800f22
mov al, byte [0xbb806f]
mov ecx, edx
mov ah, 1
add ecx, fcn.00783f90
sete cl
not cl
and cl, 3
xor cl, 7
shl ah, cl
or ah, al
lock cmpxchg byte [0xbb806f], ah
jne 0x800d2c
mov ecx, fcn.00783f90
movzx eax, al
not ecx
and ecx, 1
mov edx, ecx
add edx, fcn.00783f90
sete dl
not dl
and dl, 3
xor dl, 7
movzx edx, dl
bt eax, edx
jae 0x800d99
mov eax, ecx
movzx edx, byte [0xbb806f]
add eax, fcn.00783f90
sete al
not al
and al, 3
movzx eax, al
bt edx, eax
jae 0x800d77
jmp 0x800f22
add ecx, fcn.00783f90
movzx ecx, byte [0xbb806f]
sete al
not al
and al, 3
movzx eax, al
bt ecx, eax
jb 0x800efe
mov eax, fcn.00783f90
xor ecx, ecx
not eax
and eax, 1
add eax, fcn.00783f90
mov eax, dword [0xbb8040]
sete cl
xor ecx, 0x3ec411fb
add ecx, 0xc08
xor eax, ecx
mov dword [0xbb8040], eax
not eax
mov edx, dword [0xbb8044]
imul eax, ecx
and cl, 7
lea ebx, [eax + eax]
xor edx, eax
shr eax, 0x1e
mov dword [0xbb8044], edx
or ebx, eax
not edx
mov eax, dword [0xbb8048]
imul edx, ebx
lea ebx, [edx*4]
xor eax, edx
shr edx, 0x1d
mov dword [0xbb8048], eax
or ebx, edx
not eax
mov edx, dword [0xbb804c]
imul eax, ebx
lea ebx, [eax*8]
xor edx, eax
shr eax, 0x1c
mov dword [0xbb804c], edx
or ebx, eax
not edx
mov eax, dword [0xbb8050]
imul edx, ebx
mov ebx, edx
shl ebx, 4
xor eax, edx
shr edx, 0x1b
mov dword [0xbb8050], eax
or edx, ebx
not eax
imul eax, edx
mov edx, dword [0xbb8054]
mov ebx, eax
shl ebx, 5
xor edx, eax
shr eax, 0x1a
mov dword [0xbb8054], edx
or eax, ebx
not edx
imul edx, eax
mov eax, dword [0xbb8058]
mov ebx, edx
shl ebx, 6
xor eax, edx
shr edx, 0x19
mov dword [0xbb8058], eax
or edx, ebx
not eax
imul eax, edx
mov edx, dword [0xbb805c]
mov ebx, eax
shl ebx, 7
xor edx, eax
shr eax, 0x18
mov dword [0xbb805c], edx
or eax, ebx
not edx
mov ebp, dword [0xbb8060]
imul edx, eax
mov ebx, edx
shl ebx, 8
xor ebp, edx
shr edx, 0x17
mov dword [0xbb8060], ebp
or edx, ebx
not ebp
imul ebp, edx
mov edx, dword [0xbb8064]
mov ebx, ebp
shl ebx, 9
xor edx, ebp
shr ebp, 0x16
mov dword [0xbb8064], edx
or ebp, ebx
not edx
imul edx, ebp
xor dword [0xbb8068], edx
mov dl, 1
shl dl, cl
or byte [0xbb806f], dl
mov eax, fcn.00783f90
not eax
and eax, 1
add eax, fcn.00783f90
mov al, 0xfe
sete cl
not cl
and cl, 3
xor cl, 7
rol al, cl
and byte [0xbb806f], al
push edi
push 0xbb8040
push esi
call fcn.0078de60
add esp, 0xc
mov ebx, 1
mov eax, ebx
add esp, 8
pop esi
pop edi
pop ebx
pop ebp
ret