Function at 0x420010
Capabilities:
Encode data using add xor sub operations
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x20
mov eax, dword [esp + 0x38]
mov ebx, 0xfffffffe
cmp word [eax + ebx + 2], 0
lea ebx, [ebx + 2]
jne 0x41fdf0
sar ebx, 1
mov ecx, esp
push ecx
push 0
push 0
push ebx
push eax
push 0
call dword [0x44d264]
mov dword [esp + 0xc], 0xe92a2b41
mov edi, 0x38
mov ebp, 0x87
movzx esi, byte [esp + ebp - 0x7b]
lea edx, [esi + esi]
not edx
add edx, esi
and edx, 0x31
and esi, 0xffffffce
or esi, edx
mov ecx, edi
and ecx, 0x31
mov edx, ebp
and edx, 0x8e
or edx, ecx
xor edx, esi
add dl, 0x5d
mov byte [esp + ebp - 0x7b], dl
dec edi
inc ebp
cmp edi, 0x34
jne case.default.0x41fe5c
xor ecx, ecx
cmp eax, dword [esp + 0xc]
setne cl
jmp dword [ecx*4 + 0x44701c]
mov edi, dword [esp + 0x38]
jmp dword [0x447038]
xor ebx, ebx
jmp dword [0x447030]
mov eax, ebx
add esp, 0x20
pop esi
pop edi
pop ebx
pop ebp
ret
lea edi, [esp + 0xc]
push edi
push esi
call fcn.004406a0
add esp, 8
not eax
shr eax, 0x1f
jmp dword [eax*4 + 0x447054]
xor ecx, ecx
test byte [esp + 0xc], 0x10
sete cl
mov eax, 1
jmp dword [ecx*4 + 0x44705c]
jmp dword [0x447064]
push esi
call fcn.00408260
add esp, 4
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
xor eax, eax
jmp dword [0x447074]
xor ebx, ebx
jmp dword [eax*4 + 0x44707c]
mov eax, dword [esp + 0x34]
mov dword [esp + 0xc], eax
mov dword [esp + 0x10], esi
mov eax, dword [esp + 0x3c]
mov dword [esp + 0x14], eax
mov eax, dword [esp + 0x40]
mov dword [esp + 0x18], eax
mov eax, dword [esp + 0x44]
mov dword [esp + 0x1c], eax
mov dword [esp + 4], 0x8f8e89f6
mov word [esp + 8], 0
mov byte [esp + 0xa], 0
xor eax, eax
jmp dword [0x447084]
mov esi, dword [esp]
lea eax, [esi + esi]
test esi, esi
jns 0x41ff30
mov eax, 0xffffffff
push eax
call fcn.00408250
add esp, 4
mov ecx, esp
push ecx
push esi
push eax
push ebx
push edi
push 0
call dword [0x44d264]
mov ebp, dword [esp]
lea eax, [ebp*2]
test ebp, ebp
jns 0x41ff5b
mov eax, 0xffffffff
push eax
call fcn.00408250
add esp, 4
mov esi, eax
mov eax, esp
push eax
push ebp
push esi
push ebx
push edi
push 0
call dword [0x44d264]
jmp dword [0x447040]
not eax
shr eax, 0x1f
jmp dword [eax*4 + 0x447044]
xor ebx, ebx
jmp dword [0x44704c]
push esi
call fcn.00408260
add esp, 4
xor ebx, ebx
jmp case.0x41fe5c.6
jmp dword [0x447094]
push esi
call fcn.00408260
add esp, 4
jmp case.0x41fe5c.6
jmp case.0x41fe5c.6
xor eax, eax
lea ecx, [eax + 0x22]
mov edx, 0x9820efdd
sub edx, eax
mov ebx, edx
xor ebx, 0x98
or edx, 0x47
and edx, ebx
and ecx, 0x28
or ecx, edx
xor cl, byte [esp + eax + 4]
xor cl, 0x47
add cl, 0x56
mov byte [esp + eax + 4], cl
inc eax
cmp eax, 7
jne 0x41ffba
lea eax, [esp + 4]
push edi
push 0x421a80
push eax
push esi
call fcn.00421e90
add esp, 0x10
mov ebx, eax
xor eax, eax
jmp dword [0x447090]
lea ecx, [eax + 0x22]
mov edx, 0x9820efdd
sub edx, eax
mov ebx, edx
xor ebx, 0x98
or edx, 0x47
and edx, ebx
and ecx, 0x28
or ecx, edx
xor cl, byte [esp + eax + 4]
xor cl, 0x47
add cl, 0x56
mov byte [esp + eax + 4], cl
inc eax
cmp eax, 7
jne case.0x41fe5c.28
lea eax, [esp + 4]
push edi
push 0x421a80
push eax
push esi
call fcn.00421e90
add esp, 0x10
jmp case.0x41fe5c.27
mov dword [esi + 0x218], eax
lea ecx, [esi + 0x298]
sub esp, 4
mov dword [esp], 1
call fcn.00408df0
mov eax, edi
add eax, 4
mov dword [esi + 0x170], eax
mov eax, dword [edi + 4]
sub esp, 4
mov dword [esp], eax
call fcn.00417c60
add esp, 4
add eax, 0xa
mov ecx, 2
mul ecx
seto dl
mov ecx, 0xffffffff
test dl, 1
jne 0x420bc6
mov ecx, eax
sub esp, 4
mov dword [esp], ecx
call fcn.00408250
add esp, 4
mov dword [esi + 0x14c], eax
mov al, byte [esi + 0x50]
mov byte [esi + 0xec], al
mov byte [esi + 0x54], 0x30
mov byte [esi + 0x55], 0x9f
mov byte [esi + 0x56], 0xe
mov byte [esi + 0x57], 0x91
mov byte [esi + 0x58], 2
mov byte [esi + 0x59], 0x93
mov byte [esi + 0x5a], 0x35
mov byte [esi + 0x5b], 0x95
mov byte [esi + 0x5c], 0x32
mov byte [esi + 0x5d], 0x97
mov byte [esi + 0x5e], 3
mov byte [esi + 0x5f], 0x89
mov byte [esi + 0x60], 0xd6
mov byte [esi + 0x61], 0x8b
mov byte [esi + 0x62], 0x10
mov byte [esi + 0x63], 0x8d
mov byte [esi + 0x64], 0x19
mov byte [esi + 0x65], 0x8f
mov byte [esi + 0x66], 0x8e
mov byte [esi + 0x67], 0x81
mov eax, 0x14
mov byte [esi + eax + 0x54], 0
add eax, 1
cmp eax, 0x18
jne 0x420c38
mov dword [esi + 0x280], ebx
xor eax, eax
cmp eax, 0x18
jae 0x420c94
mov cl, byte [esi + eax + 0x54]
movzx ebx, cl
mov edi, eax
add edi, 0xc4047c25
mov edx, edi
and edx, ebx
shl edx, 1
mov ebx, edx
xor ebx, edi
mov edi, 0x3bfb83da
sub edi, eax
and edx, edi
shl edx, 1
sub ebx, edx
add bl, cl
add bl, 0x47
mov byte [esi + eax + 0x54], bl
mov ecx, eax
xor ecx, 0xfffffffe
mov edx, eax
or edx, 1
and edx, ecx
or eax, 1
add eax, edx
jmp 0x420c4d
mov eax, dword [esi + 0x170]
mov eax, dword [eax]
sub esp, 8
mov dword [esp + 4], eax
mov edi, dword [esi + 0x14c]
mov dword [esp], edi
call fcn.00409db0
lea ecx, [esi + 0x54]
mov dword [esp + 4], ecx
mov dword [esp], eax
call fcn.00409db0
sub esp, 0xc
lea eax, [esi + 0x4c]
mov dword [esp + 4], eax
mov dword [esp], edi
mov dword [esp + 0x10], 0x60
mov dword [esp + 0xc], 3
mov dword [esp + 8], 0x120089
call fcn.00440510
add esp, 0x14
not eax
shr eax, 0x1f
mov ecx, dword [esi + 0x180]
mov dword [ecx], eax
mov eax, dword [esi + 0x184]
mov eax, dword [eax]
mov ecx, dword [ecx]
mov eax, dword [eax + ecx*4]
mov bh, byte [esi + 1]
jmp eax
mov eax, dword [esi + 0x48]
mov byte [edi + eax], 0
mov al, byte [esi + 0x44]
mov byte [esi + 0xf0], al
mov byte [esi + 0x104], 0x6b
mov byte [esi + 0x105], 0x5f
mov byte [esi + 0x106], 0x5a
mov byte [esi + 0x107], 0x6e
mov byte [esi + 0x108], 0x56
mov byte [esi + 0x109], 0x5e
mov byte [esi + 0x10a], 0x69
mov byte [esi + 0x10b], 0x5c
mov byte [esi + 0x10c], 0x5a
mov byte [esi + 0x10d], 0x52
mov byte [esi + 0x10e], 0x18
mov byte [esi + 0x10f], 0x50
mov byte [esi + 0x110], 0x67
mov byte [esi + 0x111], 0x69
mov byte [esi + 0x112], 0x65
mov byte [esi + 0x113], 0x2d
mov byte [esi + 0x114], 0x28
mov byte [esi + 0x115], 0x18
mov byte [esi + 0x116], 0x20
mov byte [esi + 0x117], 0x2c
mov byte [esi + 0x118], 0x1b
mov byte [esi + 0x119], 0x22
mov byte [esi + 0x11a], 0x24
mov byte [esi + 0x11b], 0x20
mov byte [esi + 0x11c], 0x6a
mov byte [esi + 0x11d], 0x20
mov byte [esi + 0x11e], 0x21
mov byte [esi + 0x11f], 0x12
mov byte [esi + 0x120], 0x14
mov byte [esi + 0x121], 0x26
mov byte [esi + 0x122], 0xba
mov eax, 0x1f
mov byte [esi + eax + 0x104], 0
add eax, 1
cmp eax, 0x22
jne 0x420dfa
xor eax, eax
cmp eax, 0x22
jae 0x420e9a
movzx edx, byte [esi + eax + 0x104]
mov dword [esi + 0x40], edi
mov edi, eax
add edi, 1
mov ecx, eax
xor ecx, 0xffffffff
or ecx, 0xffa36931
add ecx, edi
mov edi, eax
or edi, 0xffa36931
add ecx, edi
xor ecx, edx
mov edx, ecx
and edx, 0x1cef208
mov ebx, ecx
and ebx, 0x1cef208
mov edi, ecx
and edi, 2
xor edi, 2
imul edi, ebx
mov ebx, ecx
and ebx, 2
or edx, 2
imul edx, ebx
mov bh, byte [esi + 1]
add edx, edi
mov edi, ecx
shl edi, 1
and edi, 0x39de414
add ecx, 0x1cef20a
sub ecx, edi
mov edi, ecx
and edi, edx
shl edi, 1
xor ecx, edx
add ecx, edi
mov edi, dword [esi + 0x40]
add cl, 1
mov byte [esi + eax + 0x104], cl
add eax, 1
jmp 0x420e0c
sub esp, 8
lea eax, [esi + 0x104]
mov dword [esp + 4], eax
mov dword [esp], edi
call fcn.004214d0
add esp, 8
mov edx, eax
xor eax, eax
test edx, edx
setne al
mov ecx, dword [esi + 0x1b4]
mov dword [ecx], eax
mov eax, dword [esi + 0x1bc]
mov eax, dword [eax]
mov ecx, dword [ecx]
mov eax, dword [eax + ecx*4]
jmp eax
mov eax, dword [esi + 0x4c]
mov dword [esi + 0x16c], eax
mov al, byte [esi + 0xf4]
mov byte [esi + 0x100], al
mov byte [esi + 0xf8], 0x85
mov byte [esi + 0xf9], 0xba
mov byte [esi + 0xfa], 0xbb
mov byte [esi + 0xfb], 0xb8
mov eax, 4
mov byte [esi + eax + 0xf8], 0
add eax, 1
cmp eax, 7
jne 0x420f3e
xor eax, eax
cmp eax, 7
jae 0x420f91
movzx edx, byte [esi + eax + 0xf8]
mov edi, eax
shl edi, 1
and edi, 0x9f729026
mov ecx, eax
xor ecx, 0xcfb94813
add ecx, edi
add ecx, 0xb98539cc
xor ecx, edx
mov edx, ecx
shl edx, 1
and edx, 0x48
xor ecx, 0x5b
sub edx, ecx
mov byte [esi + eax + 0xf8], dl
add eax, 1
jmp 0x420f50
mov ecx, dword [esi + 0xf8]
xor edi, edi
cmp edi, dword [0x44d268]
jb 0x420fa3
jmp 0x421003
mov eax, dword [0x44d26c]
cmp dword [eax + edi*8], 0x1b6183f2
sete bl
test bl, 1
jne 0x420fb9
jmp 0x420ff7
mov eax, dword [eax + edi*8 + 4]
cmp eax, ecx
je 0x420ff7
mov dword [esi + 0x164], ecx
mov ecx, dword [0x44d270]
sub esp, 0x10
mov dword [esp], ecx
mov dword [esp + 4], eax
mov dword [esp + 8], 4
mov eax, dword [esi + 0x16c]
mov dword [esp + 0xc], eax
call fcn.0043de40
mov ecx, dword [esi + 0x164]
add esp, 0x10
test bl, 1
je 0x420ffe
jmp 0x421003
add edi, 1
jmp 0x420f99
call fcn.00417c80
call fcn.00417c80
mov eax, dword [esi + 0x25c]
mov eax, dword [eax]
mov ecx, dword [esi + 0x278]
mov ecx, dword [ecx]
mov eax, dword [ecx + eax*4]
jmp eax
call fcn.00417c80
mov ecx, dword [esi + 0x1fc]
mov dword [ecx], 0
mov eax, dword [esi + 0x208]
mov eax, dword [eax]
mov ecx, dword [ecx]
mov eax, dword [eax + ecx*4]
jmp eax
call fcn.00417c80
mov ecx, dword [esi + 0x240]
mov dword [ecx], 0
mov eax, dword [esi + 0x244]
mov eax, dword [eax]
mov ecx, dword [ecx]
mov eax, dword [eax + ecx*4]
jmp eax
call fcn.00417c80
mov ecx, dword [esi + 0x1d0]
mov dword [ecx], 1
mov eax, dword [esi + 0x1e8]
mov eax, dword [eax]
mov ecx, dword [ecx]
mov eax, dword [eax + ecx*4]
jmp eax
mov eax, dword [esi + 0x48]
inc eax
sub esp, 4
mov dword [esp], eax
call fcn.00408250
add esp, 4
mov edi, eax
mov eax, dword [esi + 0x48]
mov ecx, dword [esi + 0x4c]
sub esp, 0x10
mov dword [esp + 8], eax
mov dword [esp + 4], edi
mov dword [esp], ecx
mov dword [esp + 0xc], 0
call fcn.004408f0
add esp, 0x10
not eax
shr eax, 0x1f
mov ecx, dword [esi + 0x198]
mov dword [ecx], eax
mov eax, dword [esi + 0x1a0]
mov eax, dword [eax]
mov ecx, dword [ecx]
mov eax, dword [eax + ecx*4]
jmp eax
mov dword [esi + 0x40], edi
mov eax, dword [esi + 0x1b0]
mov eax, dword [eax]
mov ecx, dword [esi + 0x1b8]
mov ecx, dword [ecx]
mov eax, dword [ecx + eax*4]
xor edi, edi
jmp eax
mov eax, dword [esi + 0x204]
mov eax, dword [eax]
mov ecx, dword [esi + 0x210]
mov ecx, dword [ecx]
mov eax, dword [ecx + eax*4]
jmp eax
mov eax, dword [esi + 0x4c]
sub esp, 0xc
lea ecx, [esi + 0x48]
mov dword [esp + 4], ecx
mov dword [esp], eax
mov dword [esp + 8], 0
call fcn.00440830
add esp, 0xc
not eax
shr eax, 0x1f
mov ecx, dword [esi + 0x188]
mov dword [ecx], eax
mov eax, dword [esi + 0x18c]
mov eax, dword [eax]
mov ecx, dword [ecx]
mov eax, dword [eax + ecx*4]
jmp eax
call fcn.00417c80
mov ecx, dword [esi + 0x1dc]
mov dword [ecx], 0
mov eax, dword [esi + 0x1f8]
mov eax, dword [eax]
mov ecx, dword [ecx]
mov eax, dword [eax + ecx*4]
jmp eax
mov ecx, dword [ecx]
mov eax, dword [esi + 0x17c]
mov eax, dword [eax]
mov eax, dword [eax + ecx*4]
mov bh, byte [esi + 1]
jmp eax
mov eax, dword [esi + 0x260]
mov eax, dword [eax]
mov ecx, dword [esi + 0x27c]
mov ecx, dword [ecx]
mov eax, dword [ecx + eax*4]
mov edi, dword [esi + 0x40]
jmp eax
call fcn.00417c80
mov ecx, dword [esi + 0x238]
mov dword [ecx], 0
mov eax, dword [esi + 0x23c]
mov eax, dword [eax]
mov ecx, dword [ecx]
mov eax, dword [eax + ecx*4]
jmp eax
sub esp, 4
mov eax, dword [esi + 0x15c]
mov dword [esp], eax
call fcn.00408260
add esp, 4
mov eax, dword [esi + 0x214]
mov eax, dword [eax]
mov ecx, dword [esi + 0x21c]
mov ecx, dword [ecx]
mov eax, dword [ecx + eax*4]
jmp eax
call fcn.00417c80
mov ecx, dword [esi + 0x258]
mov dword [ecx], 1
mov eax, dword [esi + 0x270]
mov eax, dword [eax]
mov ecx, dword [ecx]
mov eax, dword [eax + ecx*4]
jmp eax
mov eax, dword [esi + 0x230]
mov eax, dword [eax]
mov ecx, dword [esi + 0x234]
mov ecx, dword [ecx]
mov eax, dword [ecx + eax*4]
mov bh, byte [esi + 1]
jmp eax
in eax, dx
wait
add eax, 0x7bc56b08
push 0x43
stosb byte es:[edi], al
cmp dword [edi - 0x7d2895f], 0x190868b
add byte [eax], al
mov eax, dword [eax]
mov ecx, dword [esi + 0x194]
mov ecx, dword [ecx]
mov eax, dword [ecx + eax*4]
jmp eax
mov byte [esi + 1], bh
mov eax, dword [ebp + 0x10]
lea ecx, [eax + edi*8]
mov dword [esi + 0x168], ecx
lea ebx, [eax + edi*8 + 4]
mov eax, dword [eax + edi*8 + 4]
sub esp, 8
mov dword [esp + 4], eax
mov dword [esi + 0x174], edx
mov dword [esp], edx
call fcn.004214d0
add esp, 8
mov edx, eax
xor eax, eax
test edx, edx
sete al
mov ecx, dword [esi + 0x248]
mov dword [ecx], eax
mov eax, dword [esi + 0x24c]
mov eax, dword [eax]
mov ecx, dword [ecx]
mov eax, dword [eax + ecx*4]
jmp eax
mov eax, dword [ebx]
sub esp, 4
mov dword [esp], eax
mov ebx, edx
call fcn.00417800
add esp, 4
lea ebx, [eax + ebx + 5]
sub esp, 8
mov dword [esp], ebx
mov dword [esp + 4], 0x5c
call fcn.00408510
add esp, 8
mov dword [esi + 0x158], ebx
mov ecx, ebx
not ecx
lea eax, [eax + ecx + 2]
mov dword [esi + 0x150], eax
add eax, eax
setb bl
mov ecx, dword [esi + 0x228]
mov edx, dword [ecx]
mov ecx, dword [esi + 0x22c]
mov ecx, dword [ecx]
mov ecx, dword [ecx + edx*4]
jmp ecx