Function at 0x7e8960
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x44
mov esi, dword [ecx]
xor edi, edi
mov eax, dword [esi + 0x18]
cmp byte [esi + 0x51], 0
mov dword [esp + 0x40], eax
jne 0x7e9408
lea eax, [edx + 8]
xor edi, edi
mov ebp, ecx
mov dword [esp + 8], edx
xor edx, edx
push eax
call fcn.00800830
add esp, 4
test eax, eax
jne 0x7e899f
mov edx, dword [esp + 8]
jmp 0x7e9408
mov edx, dword [eax + 0x48]
mov ecx, dword [ebp]
mov edi, dword [esp + 0x58]
mov dword [esp + 0x10], eax
call fcn.007825f0
mov ecx, eax
mov eax, dword [esi + 0x10]
mov edx, edi
xor edi, edi
mov dword [esp + 0x20], ecx
shl ecx, 4
mov ebx, dword [eax + ecx]
or dword [esi + 0x18], 2
mov ecx, esi
call fcn.007d8f60
mov edx, dword [esp + 8]
test eax, eax
je 0x7e9408
mov edi, eax
mov dword [esp + 4], ebp
mov ecx, esi
mov edx, eax
push ebx
call fcn.0078bd40
add esp, 4
test eax, eax
jne 0x7e8a0a
mov ebp, ebx
mov ecx, esi
mov edx, edi
push ebx
call fcn.007bf210
add esp, 4
test eax, eax
je 0x7e8b6f
mov edx, fcn.00803910
xor eax, eax
movzx ebx, byte [0xbb3d5f]
imul edx, edx
and edx, 3
cmp edx, 3
sete al
mov ecx, eax
xor ecx, 1
lea eax, [eax + ecx*2 + 2]
bt ebx, eax
jb 0x7e8b54
mov al, byte [0xbb3d5f]
xor ebx, ebx
cmp edx, 3
mov ah, 1
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 [0xbb3d5f], ah
jne 0x7e8a3b
mov ecx, fcn.00803910
xor edx, edx
movzx eax, al
imul ecx, ecx
and ecx, 3
cmp ecx, 3
sete dl
mov ebx, edx
xor ebx, 1
lea edx, [edx + ebx*2 + 2]
xor dl, 7
movzx edx, dl
bt eax, edx
jae 0x7e8aab
xor eax, eax
cmp ecx, 3
movzx ebx, byte [0xbb3d5f]
sete al
mov edx, eax
xor edx, 1
lea eax, [eax + edx*2 + 2]
bt ebx, eax
jae 0x7e8a89
jmp 0x7e8b54
xor eax, eax
cmp ecx, 3
movzx ebx, byte [0xbb3d5f]
sete al
mov ecx, eax
not ecx
and ecx, 0x611
lea edx, [eax + ecx*2 - 0x2c26879e]
mov eax, edx
and al, 7
movzx eax, al
bt ebx, eax
jb 0x7e8b2b
mov dword [esp], edi
mov edi, 0xbb3d20
xor eax, eax
mov ebx, dword [edi]
mov ecx, eax
mov ebp, edx
inc eax
shl ebp, cl
xor cl, 0x1f
xor ebx, edx
shr edx, cl
mov dword [edi], ebx
or edx, ebp
not ebx
add edi, 4
imul edx, ebx
cmp eax, 0xf
jne 0x7e8ae1
mov eax, fcn.00803910
xor ecx, ecx
mov dl, 1
imul eax, eax
and eax, 3
cmp eax, 3
sete cl
mov eax, ecx
xor eax, 1
lea ecx, [ecx + eax*2 + 2]
shl dl, cl
or byte [0xbb3d5f], dl
mov edi, dword [esp]
mov eax, fcn.00803910
xor ecx, ecx
imul eax, eax
and eax, 3
cmp eax, 3
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 [0xbb3d5f], al
push edi
push 0xbb3d20
push dword [esp + 0xc]
call fcn.00782570
add esp, 0xc
mov edx, dword [esp + 8]
jmp 0x7e9408
mov ebx, dword [esp + 0x10]
mov ecx, dword [esp + 4]
mov edx, ebx
call fcn.0082f410
test eax, eax
je 0x7e8b8b
mov edx, dword [esp + 8]
jmp 0x7e9408
mov edx, 0x7c74d0
xor eax, eax
imul edx, edx
and edx, 3
cmp edx, 2
sete al
mov ecx, eax
not ecx
lea eax, [ecx + eax*2]
movzx ecx, byte [0xbb3d6b]
and al, 7
movzx eax, al
bt ecx, eax
jb 0x7e8cd2
mov al, byte [0xbb3d6b]
mov dword [esp], edi
xor ecx, ecx
cmp edx, 2
mov ah, 1
sete cl
mov ebx, ecx
not ebx
lea ecx, [ebx + ecx*2]
and cl, 7
xor cl, 7
shl ah, cl
or ah, al
lock cmpxchg byte [0xbb3d6b], ah
jne 0x7e8bc2
mov ecx, 0x7c74d0
xor edx, edx
movzx eax, al
imul ecx, ecx
and ecx, 3
cmp ecx, 2
sete dl
mov ebx, edx
not ebx
lea edx, [ebx + edx*2]
and dl, 7
xor dl, 7
movzx edx, dl
bt eax, edx
jae 0x7e8c3e
mov edi, dword [esp]
mov ebx, dword [esp + 0x10]
xor eax, eax
cmp ecx, 2
sete al
mov edx, eax
not edx
lea eax, [edx + eax*2]
movzx edx, byte [0xbb3d6b]
and al, 7
movzx eax, al
bt edx, eax
jae 0x7e8c19
jmp 0x7e8cd2
xor eax, eax
cmp ecx, 2
movzx edx, byte [0xbb3d6b]
mov ebx, dword [esp + 0x10]
sete al
mov ecx, eax
not ecx
lea eax, [ecx + eax*2]
and al, 7
movzx eax, al
bt edx, eax
jb 0x7e8ca5
mov eax, 0x7c74d0
xor ecx, ecx
mov edi, dword [0xbb3d60]
mov dl, 1
imul eax, eax
and eax, 3
cmp eax, 2
sete cl
mov eax, ecx
xor eax, 0x3c659717
lea ecx, [eax + ecx*2]
xor edi, ecx
mov dword [0xbb3d60], edi
not edi
imul edi, ecx
and cl, 7
shl dl, cl
xor dword [0xbb3d64], edi
or byte [0xbb3d6b], dl
mov eax, 0x7c74d0
xor ecx, ecx
imul eax, eax
and eax, 3
cmp eax, 2
sete cl
mov eax, ecx
not eax
lea ecx, [eax + ecx*2]
mov al, 0xfe
and cl, 7
xor cl, 7
rol al, cl
and byte [0xbb3d6b], al
mov edi, dword [esp]
mov ecx, dword [esp + 4]
mov edx, edi
push edi
push 0xbb3d60
call fcn.007f5270
add esp, 8
test eax, eax
je 0x7e8cf3
mov edx, dword [esp + 8]
jmp 0x7e9408
mov dword [esp], edi
cmp dword [ebx + 0xc], 0
mov edi, dword [ebx]
je 0x7e8ebc
mov edx, 0x81e7f0
movzx ecx, byte [0xbb3d8f]
imul edx, edx
and edx, 3
cmp edx, 3
sete al
not al
and al, 3
movzx eax, al
bt ecx, eax
jb 0x7e8ea8
mov al, byte [0xbb3d8f]
cmp edx, 3
mov ah, 1
sete cl
not cl
and cl, 3
xor cl, 7
shl ah, cl
or ah, al
lock cmpxchg byte [0xbb3d8f], ah
jne 0x7e8d2f
mov ecx, 0x81e7f0
movzx eax, al
imul ecx, ecx
and ecx, 3
cmp ecx, 3
sete dl
not dl
and dl, 3
xor dl, 7
movzx edx, dl
bt eax, edx
jae 0x7e8d8f
cmp ecx, 3
movzx edx, byte [0xbb3d8f]
sete al
not al
and al, 3
movzx eax, al
bt edx, eax
jae 0x7e8d71
jmp 0x7e8ea8
cmp ecx, 3
movzx ecx, byte [0xbb3d8f]
sete al
not al
and al, 3
movzx eax, al
bt ecx, eax
jb 0x7e8e85
mov eax, 0x81e7f0
xor ecx, ecx
imul eax, eax
and eax, 3
cmp eax, 3
mov eax, dword [0xbb3d70]
sete cl
xor ecx, 0xa456c40b
add ecx, 0x7c8
mov edx, ecx
xor eax, ecx
shr edx, 0x1f
mov dword [0xbb3d70], eax
not eax
or edx, ecx
and cl, 7
imul edx, eax
mov eax, dword [0xbb3d74]
lea ebx, [edx + edx]
xor eax, edx
shr edx, 0x1e
mov dword [0xbb3d74], eax
or ebx, edx
not eax
mov edx, dword [0xbb3d78]
imul eax, ebx
lea ebx, [eax*4]
xor edx, eax
shr eax, 0x1d
mov dword [0xbb3d78], edx
or ebx, eax
not edx
mov eax, dword [0xbb3d7c]
imul edx, ebx
lea ebx, [edx*8]
xor eax, edx
shr edx, 0x1c
mov dword [0xbb3d7c], eax
or ebx, edx
not eax
mov edx, dword [0xbb3d80]
imul eax, ebx
mov ebx, eax
shl ebx, 4
xor edx, eax
shr eax, 0x1b
mov dword [0xbb3d80], edx
or eax, ebx
not edx
mov ebp, dword [0xbb3d84]
imul edx, eax
mov ebx, edx
shl ebx, 5
xor ebp, edx
shr edx, 0x1a
mov dword [0xbb3d84], ebp
or edx, ebx
not ebp
imul ebp, edx
mov dl, 1
xor dword [0xbb3d88], ebp
shl dl, cl
or byte [0xbb3d8f], dl
mov eax, 0x81e7f0
imul eax, eax
and eax, 3
cmp eax, 3
mov al, 0xfe
sete cl
not cl
and cl, 3
xor cl, 7
rol al, cl
and byte [0xbb3d8f], al
push edi
push 0xbb3d70
push dword [esp + 0xc]
call fcn.00782570
add esp, 0xc
jmp 0x7e8ed9
mov ebx, ebp
mov ebp, dword [esp + 4]
mov edx, 0x1a
mov ecx, ebp
push 0
push edi
push ebx
call fcn.007f4a50
add esp, 0xc
test eax, eax
je 0x7e8ee5
mov edi, dword [esp]
mov edx, dword [esp + 8]
jmp 0x7e9408
mov dword [esp + 0x14], ebx
mov ebx, dword [esp + 0x10]
mov ecx, ebp
mov edx, ebx
call fcn.00800a50
mov edi, dword [esp]
test eax, eax
je 0x7e8f06
mov edx, dword [esp + 8]
jmp 0x7e9408
cmp dword [ebx + 0x38], 0
mov ebp, 0
je 0x7e8f29
mov ecx, esi
mov edx, ebx
call fcn.007c5030
mov ebp, eax
mov eax, dword [eax + 8]
mov eax, dword [eax]
mov eax, dword [eax + 0x4c]
test eax, eax
cmove ebp, eax
mov ecx, dword [esp + 4]
call fcn.007ebd10
test eax, eax
jne 0x7e8f3f
mov edx, dword [esp + 8]
jmp 0x7e9408
mov edx, fcn.007c7990
xor ecx, ecx
mov dword [esp + 0x28], eax
mov dword [esp + 0x2c], ebp
imul edx, edx
and edx, 3
mov dword [esp + 0x38], edx
xor eax, eax
cmp dword [esp + 0x38], 2
mov edi, dword [ecx*4 + 0xb4eb00]
mov ebx, dword [ecx*4 + 0xb4eb20]
mov dword [esp + 0x1c], ecx
sete al
or eax, 0x8009c78c
add eax, 0x10c0
xor eax, dword [ecx*4 + 0xb4eb40]
mov ecx, eax
mov dword [esp + 0x3c], eax
mov eax, 1
and cl, 7
movzx edx, cl
shl eax, cl
xor cl, 7
mov dword [esp + 0xc], edx
mov edx, 1
shl edx, cl
movzx ecx, byte [edi + ebx - 1]
mov ebp, dword [esp + 0xc]
bt ecx, ebp
jb 0x7e904c
mov dword [esp + 0x24], eax
mov al, byte [edi + ebx - 1]
mov ecx, eax
or cl, dl
lock cmpxchg byte [edi + ebx - 1], cl
jne 0x7e8fc0
mov ecx, dword [esp + 0x24]
movzx eax, al
test edx, eax
je 0x7e8fe2
movzx eax, byte [edi + ebx - 1]
test ecx, eax
je 0x7e8fd7
jmp 0x7e904c
mov dword [esp + 0x34], edx
movzx eax, byte [edi + ebx - 1]
test ecx, eax
jne 0x7e9042
mov edx, dword [esp + 0x3c]
lea ecx, [ebx - 4]
mov dword [esp + 0x30], ebx
shr ecx, 2
je 0x7e9036
xor eax, eax
mov ebp, edi
mov dword [esp + 0x18], ecx
mov ebx, dword [ebp]
mov ecx, eax
mov dword [esp + 0xc], edx
inc eax
shl dword [esp + 0xc], cl
and cl, 0x1f
xor cl, 0x1f
xor ebx, edx
shr edx, cl
mov ecx, dword [esp + 0x18]
or edx, dword [esp + 0xc]
mov dword [ebp], ebx
not ebx
add ebp, 4
imul edx, ebx
cmp eax, ecx
jne 0x7e9007
mov ebx, dword [esp + 0x30]
mov eax, dword [esp + 0x24]
or byte [edi + ebx - 1], al
mov eax, dword [esp + 0x34]
not al
and byte [edi + ebx - 1], al
mov ecx, dword [esp + 0x1c]
inc ecx
cmp ecx, 5
jne 0x7e8f58
mov ecx, dword [esp + 4]
call fcn.007f0b40
mov eax, dword [esp + 0x10]
mov edx, 0xffffffff
mov ebp, dword [eax]
mov ecx, ebp
call fcn.007c7ec0
mov dword [esp + 0x1c], eax
xor eax, eax
cmp dword [esp + 0x20], 1
sete al
push ebp
mov dword [esp + 0x10], eax
push eax
mov ebx, dword [esp + 8]
push ebx
push ebp
mov edi, dword [esp + 0x24]
push edi
push 0xbb3d90
push edi
push 0xbb3db0
push dword [esp + 0x24]
call fcn.007f6930
add esp, 0x24
mov dword [esp + 0x18], ebp
push ebp
push dword [esp + 0x20]
push ebx
push ebx
push ebx
push 0xbb3e70
push edi
push 0xbb3e90
push dword [esp + 0x24]
call fcn.007f6930
add esp, 0x24
mov ecx, esi
mov edx, 0xbb3fc0
push edi
call fcn.0078bd40
add esp, 4
test eax, eax
je 0x7e9244
mov edx, sub.KERNEL32.dll_WaitForSingleObject
xor eax, eax
movzx edi, byte [0xbb401f]
imul edx, edx
and edx, 3
cmp edx, 2
sete al
mov ecx, eax
xor ecx, 1
lea eax, [ecx + eax*2]
bt edi, eax
jb 0x7e9224
mov al, byte [0xbb401f]
xor ecx, ecx
cmp edx, 2
mov ah, 1
sete cl
mov ebx, ecx
xor ebx, 1
lea ecx, [ebx + ecx*2]
xor cl, 7
shl ah, cl
or ah, al
lock cmpxchg byte [0xbb401f], ah
jne 0x7e9116
mov ecx, sub.KERNEL32.dll_WaitForSingleObject
xor edx, edx
movzx eax, al
imul ecx, ecx
and ecx, 3
cmp ecx, 2
sete dl
mov ebx, edx
xor ebx, 1
lea edx, [ebx + edx*2]
xor dl, 7
movzx edx, dl
bt eax, edx
jae 0x7e9183
xor eax, eax
cmp ecx, 2
movzx edi, byte [0xbb401f]
sete al
mov edx, eax
xor edx, 1
lea eax, [edx + eax*2]
bt edi, eax
jae 0x7e9162
jmp 0x7e9224
xor eax, eax
cmp ecx, 2
movzx edi, byte [0xbb401f]
sete al
mov ecx, eax
xor ecx, 0xad72e569
lea edx, [ecx + eax*2]
and dl, 3
movzx edx, dl
bt edi, edx
jb 0x7e91fc
lea edi, [ecx + eax*2 + 0x1000]
mov edx, 0xbb3fe0
xor eax, eax
mov ebx, dword [edx]
mov ecx, eax
mov ebp, edi
inc eax
shl ebp, cl
xor cl, 0x1f
xor ebx, edi
shr edi, cl
mov dword [edx], ebx
or edi, ebp
not ebx
add edx, 4
imul edi, ebx
cmp eax, 0xf
jne 0x7e91b6
mov eax, sub.KERNEL32.dll_WaitForSingleObject
xor ecx, ecx
mov dl, 1
imul eax, eax
and eax, 3
cmp eax, 2
sete cl
mov eax, ecx
xor eax, 1
lea ecx, [eax + ecx*2]
shl dl, cl
or byte [0xbb401f], dl
mov eax, sub.KERNEL32.dll_WaitForSingleObject
xor ecx, ecx
imul eax, eax
and eax, 3
cmp eax, 2
sete cl
mov eax, ecx
xor eax, 1
lea ecx, [eax + ecx*2]
mov al, 0xfe
xor cl, 7
rol al, cl
and byte [0xbb401f], al
mov eax, dword [esp + 0x10]
push dword [eax]
push dword [esp + 4]
mov edi, dword [esp + 0x1c]
push edi
push 0xbb3fe0
push dword [esp + 0x14]
call fcn.007f6930
add esp, 0x14
cmp dword [esp + 0x20], 1
je 0x7e93a3
mov edx, fcn.007a0ae0
movzx ecx, byte [0xbb4123]
imul edx, edx
and edx, 3
cmp edx, 1
seta al
not al
add al, 0x20
and al, 7
movzx eax, al
bt ecx, eax
jb 0x7e9381
mov al, byte [0xbb4123]
cmp edx, 1
mov ah, 1
seta cl
not cl
add cl, 0x20
and cl, 7
xor cl, 7
shl ah, cl
or ah, al
lock cmpxchg byte [0xbb4123], ah
jne 0x7e927e
mov ecx, fcn.007a0ae0
movzx eax, al
imul ecx, ecx
and ecx, 3
cmp ecx, 1
seta dl
not dl
add dl, 0x20
and dl, 7
xor dl, 7
movzx edx, dl
bt eax, edx
jae 0x7e92e6
cmp ecx, 1
movzx edx, byte [0xbb4123]
seta al
not al
add al, 0x20
and al, 7
movzx eax, al
bt edx, eax
jae 0x7e92c6
jmp 0x7e9381
xor edx, edx
cmp ecx, 1
movzx ecx, byte [0xbb4123]
seta dl
xor edx, 0x49f4dcef
add edx, 0x220
mov eax, edx
and al, 7
movzx eax, al
bt ecx, eax
jb 0x7e935b
mov edi, 0xbb4020
xor eax, eax
mov ebx, dword [edi]
mov ecx, eax
mov ebp, edx
inc eax
shl ebp, cl
and cl, 0x1f
xor cl, 0x1f
xor ebx, edx
shr edx, cl
mov dword [edi], ebx
or edx, ebp
not ebx
add edi, 4
imul edx, ebx
cmp eax, 0x40
jne 0x7e9314
mov eax, fcn.007a0ae0
imul eax, eax
and eax, 3
cmp eax, 1
mov al, 1
seta cl
not cl
add cl, 0x20
and cl, 7
shl al, cl
or byte [0xbb4123], al
mov eax, fcn.007a0ae0
imul eax, eax
and eax, 3
cmp eax, 1
mov al, 0xfe
seta cl
not cl
add cl, 0x20
and cl, 7
xor cl, 7
rol al, cl
and byte [0xbb4123], al
mov eax, dword [esp]
push eax
mov edi, dword [esp + 0x18]
push edi
mov ecx, dword [esp + 0x20]
push ecx
push eax
push ecx
push edi
push 0xbb4020
push dword [esp + 0x20]
call fcn.007f6930
add esp, 0x20
mov ebp, dword [esp + 0x2c]
test ebp, ebp
je 0x7e93e0
mov eax, dword [esp + 4]
mov ebx, dword [esp + 0x28]
mov edi, dword [eax + 0x2c]
mov ecx, ebx
inc edi
mov dword [eax + 0x2c], edi
mov edx, edi
push dword [esp]
call fcn.007ec000
add esp, 4
mov ecx, ebx
mov edx, 0xa7
push 0xfffffffffffffff4
push ebp
push 0
push 0
push edi
call fcn.007ebd50
add esp, 0x14
mov edi, dword [esp + 4]
mov edx, dword [esp + 0x20]
mov ecx, edi
call fcn.0082f7e0
mov edx, dword [esp + 0x14]
mov ecx, edi
push dword [esp + 0xc]
call fcn.0082f820
add esp, 4
mov edx, dword [esp + 8]
mov edi, dword [esp]
mov ecx, esi
call fcn.007c0320
mov ecx, esi
mov edx, edi
call fcn.00774f10
mov eax, dword [esp + 0x40]
mov dword [esi + 0x18], eax
add esp, 0x44
pop esi
pop edi
pop ebx
pop ebp
ret