Function at 0x435b90
Capabilities:
Encode data using xor
Generate random numbers using the delphi lcg

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
sub esp, 0x1c
push ebx
mov ebx, ecx
mov dword [esp + 8], 0
mov dword [esp + 0xc], ebx
push esi
push edi
test ebx, ebx
je 0x435f18
mov esi, dword [ebx + 0xe0]
test esi, esi
je 0x435f18
cmp dword [esi], 0
jne 0x435bd1
mov eax, 0xffffff9c
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
cmp dword [esi + 0x84], 0
mov ecx, 0x100
mov eax, dword [esi + 0x80]
mov dword [esi + 0x10], edx
mov dword [esi + 0x14], 0x100
ja 0x435c03
jb 0x435bf5
cmp eax, ecx
jae 0x435c03
cmp dword [esi + 0xc8], 0
jne 0x435c03
mov dword [esi + 0x14], eax
mov ecx, eax
mov edi, dword [esi + 8]
xor eax, eax
mov edx, edi
add edx, dword [esi + 0x78]
adc eax, dword [esi + 0x7c]
test eax, eax
ja 0x435c2f
jb 0x435c1e
cmp edx, 0x100
jae 0x435c2f
cmp dword [esi + 0xc8], 0
je 0x435c2f
mov ecx, dword [esi + 0x78]
add ecx, edi
mov dword [esi + 0x14], ecx
test ecx, ecx
je 0x435f0d
nop word [eax + eax]
mov edi, dword [esi + 8]
test edi, edi
jne 0x435da0
mov ecx, dword [esi + 0x7c]
mov eax, dword [esi + 0x78]
test ecx, ecx
jne 0x435c5d
test eax, eax
je 0x435da0
mov edi, 0x4000
test ecx, ecx
ja 0x435c76
jb 0x435c6c
cmp eax, edi
jae 0x435c76
mov edi, eax
test edi, edi
je 0x435ef1
mov ecx, dword [esi + 0xc0]
add ecx, dword [esi + 0x40]
mov eax, dword [esi + 0xc4]
adc eax, dword [esi + 0x44]
mov edx, dword [esi + 0xb4]
push 0
push eax
push ecx
lea ecx, [esi + 0x88]
call fcn.004328d0
add esp, 0xc
test eax, eax
jne 0x435efa
mov eax, dword [esi + 0x8c]
push edi
push dword [esi]
push dword [esi + 0xb4]
push dword [esi + 0xa4]
call eax
add esp, 0x10
cmp eax, edi
jne 0x435efa
cmp dword [ebx + 0xe4], 0
je 0x435d8a
xor edx, edx
mov dword [esp + 0x18], edx
test edi, edi
je 0x435d8a
nop word [eax + eax]
mov ecx, dword [ebx + 0xf4]
mov eax, dword [esi]
and ecx, 0xfffd
or ecx, 2
mov ebx, ecx
xor ebx, 1
imul ebx, ecx
shr ebx, 8
xor bl, byte [eax + edx]
mov byte [eax + edx], bl
mov eax, dword [esp + 0x14]
mov edx, dword [eax + 0xf8]
mov ecx, dword [eax + 0xec]
movsx eax, bl
xor eax, ecx
shr ecx, 8
movzx eax, al
mov eax, dword [edx + eax*4]
xor eax, ecx
mov ecx, dword [esp + 0x14]
mov dword [ecx + 0xec], eax
movzx eax, al
add eax, dword [ecx + 0xf0]
imul eax, eax, 0x8088405
inc eax
mov dword [ecx + 0xf0], eax
mov ecx, dword [ecx + 0xf4]
shr eax, 0x18
xor eax, ecx
shr ecx, 8
movzx eax, al
xor ecx, dword [edx + eax*4]
mov eax, dword [esp + 0x14]
mov edx, dword [esp + 0x18]
mov dword [eax + 0xf4], ecx
mov eax, dword [esi]
mov byte [edx + eax], bl
inc edx
mov ebx, dword [esp + 0x14]
mov dword [esp + 0x18], edx
cmp edx, edi
jb 0x435cf0
add dword [esi + 0x40], edi
mov eax, dword [esi]
adc dword [esi + 0x44], 0
sub dword [esi + 0x78], edi
mov dword [esi + 4], eax
sbb dword [esi + 0x7c], 0
mov dword [esi + 8], edi
mov eax, dword [esi + 0xb8]
test eax, eax
je 0x435e57
cmp dword [esi + 0xc8], 0
jne 0x435e57
cmp eax, 0xc
je 0x435ee2
mov eax, dword [esi + 0x18]
lea ecx, [esi + 4]
mov dword [esp + 0x18], eax
mov eax, dword [esi + 0x10]
mov dword [esp + 0x1c], eax
call fcn.00430c80
mov edi, eax
test edi, edi
js 0x435dec
cmp dword [esi + 0x1c], 0
mov eax, 0xfffffffd
cmovne edi, eax
mov eax, dword [esi + 0x18]
xor ecx, ecx
mov edx, dword [esp + 0x1c]
mov ebx, eax
sub ebx, dword [esp + 0x18]
sbb ecx, ecx
add dword [esi + 0x68], ebx
mov dword [esp + 0x24], ecx
adc dword [esi + 0x6c], ecx
test edx, edx
je 0x435e20
mov ecx, dword [esi + 0x70]
push ebx
call fcn.0042ecc0
mov ecx, dword [esp + 0x28]
mov edx, eax
mov eax, dword [esi + 0x18]
add esp, 4
sub dword [esi + 0x80], ebx
mov dword [esi + 0x70], edx
sbb dword [esi + 0x84], ecx
sub eax, dword [esp + 0x18]
mov ecx, dword [esp + 0x10]
add ecx, eax
mov dword [esp + 0x10], ecx
cmp edi, 1
je 0x435f04
test edi, edi
je 0x435ee2
mov eax, edi
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
test edi, edi
jne 0x435e67
mov eax, dword [esi + 0x78]
or eax, dword [esi + 0x7c]
je 0x435f0d
mov eax, dword [esi + 0x14]
cmp eax, edi
mov ebx, eax
mov dword [esp + 0x18], eax
cmovae ebx, edi
xor edx, edx
test ebx, ebx
je 0x435e9b
nop dword [eax + eax]
mov eax, dword [esi + 4]
mov ecx, dword [esi + 0x10]
mov al, byte [edx + eax]
mov byte [edx + ecx], al
inc edx
cmp edx, ebx
jb 0x435e80
mov eax, dword [esi + 0x14]
mov edi, dword [esi + 8]
mov dword [esp + 0x18], eax
add dword [esi + 0x68], ebx
mov eax, dword [esi + 0x10]
adc dword [esi + 0x6c], 0
test eax, eax
je 0x435eb7
mov ecx, dword [esi + 0x70]
mov edx, eax
push ebx
call fcn.0042ecc0
add esp, 4
sub dword [esi + 0x80], ebx
mov dword [esi + 0x70], eax
sbb dword [esi + 0x84], 0
sub edi, ebx
mov eax, dword [esp + 0x18]
add dword [esi + 0x10], ebx
sub eax, ebx
add dword [esi + 4], ebx
add dword [esi + 0x18], ebx
add dword [esp + 0x10], ebx
mov dword [esi + 8], edi
mov dword [esi + 0x14], eax
cmp dword [esi + 0x14], 0
jbe 0x435f0d
mov ebx, dword [esp + 0x14]
jmp 0x435c40
xor eax, eax
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
or eax, 0xffffffff
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
mov eax, ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
mov eax, dword [esp + 0x10]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
pop edi
pop esi
mov eax, 0xffffff9a
pop ebx
mov esp, ebp
pop ebp
ret