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

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
sub esp, 0x30
mov eax, dword [0x4df19c]
mov esi, dword [ebp + 8]
mov ebx, 0xffffff9a
xor eax, ebp
test esi, esi
mov dword [ebp - 0x10], eax
je 0x465919
mov eax, dword [esi + 0x60]
or eax, dword [esi + 0x64]
je 0x465919
cmp dword [esi + 0xe0], 0
je 0x465402
push esi
call fcn.00464bf3
add esp, 4
mov ecx, dword [esi + 0x48]
mov eax, dword [esi + 0x4c]
add ecx, dword [esi + 0xd8]
adc eax, dword [esi + 0xdc]
push 0
push eax
push ecx
push dword [esi + 0x30]
push esi
call fcn.00488406
add esp, 0x14
test eax, eax
je 0x46544b
xor edx, edx
mov edi, 0x1e
mov dword [ebp - 0x30], 0
mov dword [ebp - 0x3c], 0
mov dword [ebp - 0x38], 0
xor eax, eax
jmp 0x465608
mov edx, dword [esi + 0x30]
lea eax, [ebp - 0x1c]
mov ecx, esi
push eax
call fcn.00465d2f
add esp, 4
xor edi, edi
dec edi
test eax, eax
jne 0x465474
xor eax, eax
cmp dword [ebp - 0x1c], 0x4034b50
mov edi, 0xffffff99
cmove edi, eax
mov edx, dword [esi + 0x30]
lea eax, [ebp - 0x20]
mov ecx, esi
push eax
call fcn.004660df
add esp, 4
mov edx, dword [esi + 0x30]
mov ebx, eax
lea eax, [ebp - 0x24]
mov ecx, esi
push eax
call fcn.004660df
add esp, 4
mov edx, dword [esi + 0x30]
or eax, ebx
mov ebx, 0xffffffff
lea eax, [ebp - 0x20]
mov ecx, esi
cmovne edi, ebx
push eax
call fcn.004660df
add esp, 4
test eax, eax
mov edx, ebx
mov dword [ebp - 0x34], ebx
jne 0x4654f0
test edi, edi
mov edx, edi
jne 0x4654f0
mov eax, dword [ebp - 0x20]
mov edx, 0xffffff99
mov ecx, esi
cmp eax, dword [esi + 0x8c]
jne 0x4654ee
cmp eax, 0xc
mov esi, ecx
ja 0x4654e7
mov ecx, 0x1101
xor edx, edx
bt ecx, eax
jb 0x4654f0
mov edx, 0xffffff99
jmp 0x4654f0
mov esi, ecx
mov dword [ebp - 0x30], edx
mov edx, dword [esi + 0x30]
lea eax, [ebp - 0x20]
mov ecx, esi
mov ebx, eax
push eax
call fcn.00465d2f
add esp, 4
mov edx, dword [esi + 0x30]
xor edi, edi
cmp eax, 1
mov ecx, esi
sbb edi, edi
push ebx
call fcn.00465d2f
add esp, 4
test eax, eax
mov ebx, 0xffffffff
jne 0x465548
not edi
or edi, dword [ebp - 0x30]
mov ebx, edi
jne 0x465548
mov eax, dword [ebp - 0x20]
xor ebx, ebx
cmp eax, dword [esi + 0x94]
je 0x465548
xor eax, eax
test byte [ebp - 0x24], 8
mov ebx, 0xffffff99
cmovne ebx, eax
mov edx, dword [esi + 0x30]
mov ecx, esi
lea eax, [ebp - 0x20]
push eax
call fcn.00465d2f
add esp, 4
mov edi, 0xffffffff
test eax, eax
mov ecx, edi
je 0x4656bb
mov edx, dword [esi + 0x30]
lea eax, [ebp - 0x20]
mov dword [ebp - 0x30], ecx
mov ecx, esi
push eax
call fcn.00465d2f
add esp, 4
test eax, eax
mov ebx, esi
je 0x4656f8
mov edx, dword [ebx + 0x30]
lea eax, [ebp - 0x28]
mov ecx, ebx
push eax
call fcn.004660df
add esp, 4
test eax, eax
jne 0x4655b8
test edi, edi
mov dword [ebp - 0x34], edi
jne 0x4655b8
mov eax, dword [ebp - 0x28]
xor ecx, ecx
cmp eax, dword [ebx + 0xa8]
mov eax, 0xffffff99
cmove eax, ecx
mov dword [ebp - 0x34], eax
mov esi, dword [ebp - 0x28]
mov edx, dword [ebx + 0x30]
lea eax, [ebp - 0x2c]
mov ecx, ebx
push eax
call fcn.004660df
add esp, 4
mov edx, dword [ebx + 0xd8]
mov edi, dword [ebx + 0xdc]
mov ecx, 0x1e
add edx, esi
adc edi, 0
add edx, ecx
mov dword [ebp - 0x30], edx
lea edx, [ebp - 0x2c]
adc edi, 0
mov edx, dword [edx]
mov dword [ebp - 0x3c], edi
mov edi, esi
mov esi, ebx
add edi, edx
or eax, dword [ebp - 0x34]
mov dword [ebp - 0x38], edx
sete al
xor edx, edx
add edi, ecx
setb dl
mov ebx, 0xffffff99
test al, al
je 0x465919
mov dword [ebp - 0x34], edx
push 0xd0
call fcn.00429ae0
add esp, 4
test eax, eax
je 0x465914
mov ebx, eax
push 0x4000
call fcn.00429ae0
add esp, 4
mov ecx, dword [ebp - 0x3c]
mov dword [ebx], eax
mov edx, dword [ebp + 0x14]
mov dword [ebx + 0x54], ecx
mov ecx, dword [ebp - 0x30]
mov dword [ebx + 0x50], ecx
mov ecx, dword [ebp - 0x38]
mov dword [ebx + 0x58], ecx
xor ecx, ecx
test eax, eax
mov dword [ebx + 0x64], ecx
mov dword [ebx + 0x60], ecx
mov dword [ebx + 0xc8], edx
je 0x465736
mov edx, dword [ebp + 0xc]
mov eax, dword [ebp + 0x10]
mov dword [ebx + 0x48], ecx
test edx, edx
je 0x46567e
mov ecx, dword [esi + 0x8c]
mov dword [edx], ecx
test eax, eax
je 0x465759
mov dword [eax], 6
mov ecx, dword [esi + 0x88]
and ecx, 6
cmp ecx, 2
je 0x46574b
cmp ecx, 4
je 0x465753
cmp ecx, 6
jne 0x465759
mov dword [eax], 1
jmp 0x465759
test ebx, ebx
jne 0x465744
mov eax, dword [ebp - 0x20]
mov ecx, ebx
cmp eax, 0xffffffff
je 0x465568
xor eax, dword [esi + 0x98]
xor ecx, ecx
or eax, dword [esi + 0x9c]
je 0x465568
xor eax, eax
test byte [ebp - 0x24], 8
mov ecx, 0xffffff99
cmovne ecx, eax
jmp 0x465568
mov edi, dword [ebp - 0x30]
test edi, edi
jne 0x465586
mov eax, dword [ebp - 0x20]
cmp eax, 0xffffffff
je 0x465586
xor eax, dword [ebx + 0xa0]
xor edi, edi
or eax, dword [ebx + 0xa4]
je 0x465586
xor eax, eax
test byte [ebp - 0x24], 8
mov edi, 0xffffff99
cmovne edi, eax
jmp 0x465586
push ebx
call fcn.00429b20
add esp, 4
jmp 0x465914
mov ecx, ebx
jmp 0x465568
mov dword [eax], 9
jmp 0x465759
mov dword [eax], 2
mov eax, dword [esi + 0x94]
mov dword [ebp - 0x30], edi
lea edi, [ebx + 0x88]
mov dword [ebx + 0x74], eax
xor eax, eax
mov dword [ebx + 0x70], eax
mov dword [ebx + 0x6c], eax
mov dword [ebx + 0x68], eax
mov eax, esi
mov edx, dword [esi + 0x8c]
mov dword [ebx + 0xb8], edx
mov ecx, dword [esi + 0x30]
mov dword [ebx + 0xb4], ecx
mov ecx, 0xb
rep movsd dword es:[edi], dword [esi]
mov edi, eax
mov ecx, dword [eax + 0x48]
mov esi, dword [eax + 0x4c]
xor eax, eax
mov dword [ebx + 0xc4], esi
mov dword [ebx + 0xc0], ecx
mov dword [ebx + 0x18], eax
mov eax, dword [ebp + 0x14]
test eax, eax
jne 0x4657c5
cmp edx, 0xc
jne 0x4657c5
mov dword [ebx + 0xc8], 1
jmp 0x465813
test eax, eax
jne 0x465813
cmp edx, 8
jne 0x465813
mov eax, ebx
xor ecx, ecx
add eax, 4
mov dword [ebx + 0x24], ecx
mov dword [ebx + 0x28], ecx
mov dword [ebx + 0x2c], ecx
mov dword [ebx + 4], ecx
mov dword [ebx + 8], ecx
push 0x38
push str.1.2.11
push 0xfffffffffffffff1
push eax
call fcn.00405d4d
add esp, 0x10
test eax, eax
je 0x46580c
mov esi, eax
push ebx
call fcn.00429b20
add esp, 4
mov ebx, esi
jmp 0x465919
mov dword [ebx + 0x48], 8
movups xmm0, xmmword [edi + 0x98]
mov eax, dword [ebp - 0x30]
mov ecx, dword [ebp - 0x34]
mov edx, dword [ebp + 0x18]
movups xmmword [ebx + 0x78], xmm0
mov dword [ebp - 0x30], edx
add eax, dword [edi + 0xd8]
adc ecx, dword [edi + 0xdc]
mov dword [ebx + 0x40], eax
xor eax, eax
test edx, edx
mov dword [ebx + 0x44], ecx
mov dword [ebx + 8], eax
mov dword [edi + 0xe0], ebx
mov dword [edi + 0xe4], eax
je 0x4659fa
call fcn.0042ce50
mov ecx, dword [ebp + 0x18]
mov dword [edi + 0xf8], eax
mov dword [edi + 0xec], 0x12345678
mov dword [edi + 0xf0], 0x23456789
mov dword [edi + 0xf4], 0x34567890
mov bl, byte [ecx]
test bl, bl
je 0x4658e5
inc dword [ebp - 0x30]
mov ecx, 0x12345678
mov edi, 0x23456789
mov edx, 0x34567890
movzx esi, cl
movzx ebx, bl
shr ecx, 8
xor esi, ebx
movzx ebx, dl
shr edx, 8
xor ecx, dword [eax + esi*4]
movzx esi, cl
add esi, edi
imul edi, esi, 0x8088405
inc edi
mov esi, edi
shr esi, 0x18
xor ebx, esi
mov esi, dword [ebp + 8]
mov dword [esi + 0xec], ecx
mov dword [esi + 0xf0], edi
xor edx, dword [eax + ebx*4]
mov dword [esi + 0xf4], edx
mov esi, dword [ebp - 0x30]
mov bl, byte [esi]
inc esi
mov dword [ebp - 0x30], esi
test bl, bl
jne 0x465899
mov edi, dword [ebp + 8]
mov eax, dword [edi + 0xe0]
mov ecx, dword [eax + 0xc0]
mov edx, dword [eax + 0xc4]
add ecx, dword [eax + 0x40]
adc edx, dword [eax + 0x44]
push 0
push edx
push ecx
push dword [edi + 0x30]
push edi
call fcn.00488406
add esp, 0x14
test eax, eax
je 0x46592d
mov ebx, 0xffffff98
mov ecx, dword [ebp - 0x10]
xor ecx, ebp
call fcn.004956a1
mov eax, ebx
add esp, 0x30
pop esi
pop edi
pop ebx
pop ebp
ret
mov esi, 0xc
lea eax, [ebp - 0x1c]
push esi
push eax
push dword [edi + 0x30]
push dword [edi + 0x1c]
call dword [edi + 4]
add esp, 0x10
cmp eax, esi
mov ebx, 0xffffff98
jb 0x465919
mov eax, dword [edi + 0xf8]
mov ecx, dword [edi + 0xf4]
mov edx, dword [edi + 0xec]
mov edi, dword [edi + 0xf0]
mov esi, 0xfffffff4
mov dword [ebp - 0x30], eax
mov eax, ecx
and eax, 0xfffd
lea ebx, [eax + 2]
xor eax, 3
imul ebx, eax
xor bh, byte [ebp + esi - 0x10]
mov byte [ebp + esi - 0x10], bh
movzx eax, bh
movzx ebx, dl
shr edx, 8
xor ebx, eax
mov eax, dword [ebp - 0x30]
xor edx, dword [eax + ebx*4]
movzx ebx, cl
shr ecx, 8
movzx eax, dl
add eax, edi
imul edi, eax, 0x8088405
inc edi
mov eax, edi
shr eax, 0x18
xor ebx, eax
mov eax, dword [ebp + 8]
mov dword [eax + 0xec], edx
mov dword [eax + 0xf0], edi
mov eax, dword [ebp - 0x30]
xor ecx, dword [eax + ebx*4]
mov ebx, dword [ebp + 8]
inc esi
mov dword [ebx + 0xf4], ecx
jne 0x46596c
mov eax, dword [ebp + 8]
mov ecx, eax
mov eax, dword [eax + 0xe0]
add dword [eax + 0x40], 0xc
adc dword [eax + 0x44], 0
mov eax, dword [ecx + 0xe0]
add dword [eax + 0x78], 0xfffffff4
adc dword [eax + 0x7c], 0xffffffff
mov dword [ecx + 0xe4], 1
xor ebx, ebx
jmp 0x465919