Function at 0x476100
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
and esp, 0xfffffff8
sub esp, 0x268
mov esi, esp
mov dword [esi + 0x250], ebp
mov dword [esi + 0x254], esp
mov dword [esi + 0x260], 0xffffffff
mov dword [esi + 0x25c], 0x47e980
mov edi, dword [ebp + 0x18]
lea eax, [esi + 0x258]
mov ebx, dword [ebp + 0xc]
mov ecx, dword fs:[0]
mov dword [esi + 0x258], ecx
mov dword fs:[0], eax
mov eax, 0x1445247
mov ecx, 0x4e574f44
movsd xmm1, qword [edi + 0x24]
movq xmm0, qword [edi + 0x2c]
movq xmm2, qword [edi + 0x14]
movsd qword [ebx + 0x90], xmm1
movq xmm1, qword [edi + 0x1c]
movq qword [ebx + 0x98], xmm0
movq qword [ebx + 0x80], xmm2
movq qword [ebx + 0x88], xmm1
xor eax, dword [ebx + 0x9c]
xor ecx, dword [ebx + 0x98]
or ecx, eax
movzx eax, byte [ebp + 0x1c]
sete cl
and cl, al
mov eax, dword [ebp + 0x10]
mov byte [esi + 0x1c], cl
je 0x4762ab
mov edx, dword [eax]
mov word [esi + 0xb4], 4
mov dword [esi + 0x38], connect
mov dword [esi + 0x3c], 0xd0001
xor eax, eax
lea ecx, [esi + 0x38]
cmp byte [edx + 0x29], 2
mov byte [esi + 7], 1
mov byte [esi + 8], 0
mov dword [esi + 0x260], 0
sete al
push eax
push ecx
mov dword [esi + 0x18], edx
push edx
call fcn.00449a50
add esp, 0xc
mov eax, dword [esi + 0x18]
mov ecx, dword [ebp + 8]
mov byte [eax + 0x249], 1
mov word [ecx], 8
mov eax, dword [ebp + 0xc]
mov eax, dword [eax + 0xd0]
lock dec dword [eax]
jne 0x476231
mov eax, dword [ebp + 0xc]
mov dword [esi + 0x260], 9
add eax, 0xd0
push eax
call fcn.004573f0
add esp, 4
mov eax, dword [ebp + 0xc]
cmp dword [eax + 8], 0x80000000
setne al
test byte [esi + 0x1c], al
je 0x476255
mov ecx, dword [ebp + 0xc]
mov dword [esi + 0x260], 8
call fcn.00458820
mov ecx, dword [ebp + 0xc]
cmp byte [ecx + 0xbc], 0
jne 0x476291
mov eax, dword [ecx + 0xc0]
cmp eax, 0x80000000
je 0x476291
test eax, eax
je 0x476291
push 1
push eax
push dword [ecx + 0xc4]
mov edi, ecx
call fcn.00402cf0
mov ecx, edi
add esp, 0xc
mov dword [esi + 0x260], 0xffffffff
add ecx, 0xa0
mov dword [esi + 0x260], 0xffffffff
call fcn.00439d60
jmp 0x4767ec
mov ecx, dword [edi + 8]
test ecx, ecx
je 0x47649e
mov eax, dword [edi + 4]
shl ecx, 2
mov edx, ecx
mov dword [esi + 0x10], ecx
lea ecx, [ecx + ecx*4]
mov edx, 0x1f7f
mov dword [esi + 0xc], eax
add eax, 0x10
jmp 0x4762e8
add eax, 0x14
add ecx, 0xffffffec
je 0x476300
movzx edi, word [eax - 0x10]
mov bl, 1
bt edx, edi
jb 0x4762e0
cmp edi, 0xd
jne 0x476302
cmp word [eax], 0x13
jne 0x4762e0
jmp 0x476302
xor ebx, ebx
mov eax, dword [ebp + 0xc]
lea ecx, [eax + 0xd4]
mov byte [eax + 0xd4], bl
mov ebx, eax
mov eax, dword [esi + 0xc]
mov dword [esi + 0x24], ecx
mov ecx, dword [esi + 0x10]
add eax, 0x10
lea ecx, [ecx + ecx*4]
jmp 0x47633c
add eax, 0x14
add ecx, 0xffffffec
je 0x4763d3
movzx edx, word [eax - 0x10]
lea edi, [edx - 3]
cmp edi, 0xa
jb 0x476330
cmp edx, 2
jb 0x476330
cmp edx, 0xd
jne 0x476358
cmp word [eax], 0x14
jne 0x476330
mov eax, dword [0x578064]
xor ecx, ecx
mov eax, dword [eax]
cmp eax, 4
mov eax, 0xff
setne cl
cmovbe eax, ecx
mov cl, 1
cmp al, 0xff
mov dword [esi + 0x18], ecx
je 0x47637f
movzx eax, al
test eax, eax
jne 0x4763da
mov dword [esi + 0x38], 0x524f2c
mov dword [esi + 0x3c], 1
mov dword [esi + 0x48], 0
mov dword [esi + 0x40], 0x524d04
mov dword [esi + 0x44], 0
mov byte [esi + 7], 1
mov byte [esi + 8], 0
mov dword [esi + 0x260], 0
sub esp, 4
lea eax, [esi + 0x38]
push 0
push 0x5a
push 0x524f58
push 4
push eax
call fcn.004adac0
add esp, 0x18
mov ebx, dword [ebp + 0xc]
jmp 0x4763da
mov dword [esi + 0x18], 0
mov edx, dword [esi + 0xc]
mov eax, dword [esi + 0x10]
mov ecx, 0x1eff
add edx, 0x10
lea eax, [eax + eax*4]
jmp 0x4763fe
mov edx, edi
add edx, 0x14
add eax, 0xffffffec
je 0x476492
mov edi, edx
movzx edx, word [edx - 0x10]
bt ecx, edx
jb 0x4763f0
cmp edx, 0xd
jne 0x476414
cmp word [edi], 5
jne 0x4763f0
mov eax, dword [0x578064]
xor ecx, ecx
mov edi, dword [ebp + 0x18]
mov eax, dword [eax]
cmp eax, 4
mov eax, 0xff
setne cl
cmovbe eax, ecx
mov cl, 1
cmp al, 0xff
mov dword [esi + 0xc], ecx
je 0x47643e
movzx eax, al
test eax, eax
jne 0x4764bc
mov dword [esi + 0x38], str.Server_may_staple_OCSP_response
mov dword [esi + 0x3c], 1
mov dword [esi + 0x48], 0
mov dword [esi + 0x40], 0x524d04
mov dword [esi + 0x44], 0
mov byte [esi + 7], 1
mov byte [esi + 8], 0
mov dword [esi + 0x260], 0
sub esp, 4
lea eax, [esi + 0x38]
push 0
push 0x66
push 0x524f58
push 4
push eax
call fcn.004adac0
add esp, 0x18
mov ebx, dword [ebp + 0xc]
jmp 0x476499
mov dword [esi + 0xc], 0
mov edi, dword [ebp + 0x18]
jmp 0x4764bc
lea eax, [ebx + 0xd4]
mov byte [ebx + 0xd4], 0
mov dword [esi + 0x18], 0
mov dword [esi + 0xc], 0
mov dword [esi + 0x24], eax
mov eax, dword [ebx + 8]
mov ecx, dword [ebp + 0x14]
lea edx, [ebx + 0x60]
cmp eax, 0x80000000
mov dword [esi + 0x10], eax
sete byte [esi + 0x17]
je 0x476643
lea eax, [esi + 0x178]
mov dword [esi + 0x20], edx
push 0x60
push ebx
push eax
call sub.VCRUNTIME140.dll_memcpy
add esp, 0xc
mov eax, dword [esi + 0x1cc]
cmp eax, dword [edi + 0x54]
jne 0x47661a
add edi, 0x34
test eax, eax
je 0x476803
lea ecx, [eax - 0x21]
cmp ecx, 0xffffffe0
jb 0x476d4d
xor edx, edx
cmp eax, 8
mov ecx, 0
jb 0x476600
xor edx, edx
cmp eax, 0x10
jae 0x47658f
mov ebx, edi
mov edi, ecx
mov ecx, eax
movzx edx, dl
and ecx, 0x38
movd xmm0, edx
nop dword [eax]
movq xmm1, qword [esi + edi + 0x1ac]
movq xmm2, qword [ebx + edi]
add edi, 8
cmp ecx, edi
pxor xmm2, xmm1
por xmm0, xmm2
jne 0x476540
pshufd xmm1, xmm0, 0x55
cmp eax, ecx
mov edi, ebx
por xmm1, xmm0
movdqa xmm0, xmm1
psrld xmm0, 0x10
por xmm0, xmm1
movdqa xmm1, xmm0
psrlw xmm1, 8
por xmm1, xmm0
movd edx, xmm1
jne 0x476600
jmp 0x476612
mov ecx, eax
pxor xmm0, xmm0
xor edx, edx
and ecx, 0x30
nop word [eax + eax]
movdqu xmm1, xmmword [esi + edx + 0x1ac]
movdqu xmm2, xmmword [edi + edx]
add edx, 0x10
cmp ecx, edx
pxor xmm2, xmm1
por xmm0, xmm2
jne 0x4765a0
pshufd xmm1, xmm0, 0xee
cmp eax, ecx
por xmm1, xmm0
pshufd xmm0, xmm1, 0x55
por xmm0, xmm1
movdqa xmm1, xmm0
psrld xmm1, 0x10
por xmm1, xmm0
movdqa xmm0, xmm1
psrlw xmm0, 8
por xmm0, xmm1
movd edx, xmm0
je 0x476612
test al, 8
jne 0x476529
nop dword [eax]
movzx ebx, byte [edi + ecx]
xor bl, byte [esi + ecx + 0x1ac]
inc ecx
or dl, bl
cmp eax, ecx
jne 0x476600
test dl, dl
je 0x476803
lea ecx, [esi + 0x178]
mov byte [esi + 7], 0
mov byte [esi + 8], 0
mov dword [esi + 0x260], 0
call fcn.00458820
mov ebx, dword [ebp + 0xc]
mov edi, dword [ebp + 0x18]
mov ecx, dword [ebp + 0x14]
mov edx, dword [esi + 0x20]
movsd xmm1, qword [edi + 0x44]
mov eax, dword [edi + 0x54]
movq xmm0, qword [edi + 0x4c]
movsd xmm2, qword [edi + 0x34]
movsd xmm3, qword [edi + 0x3c]
movsd qword [esi + 0x120], xmm1
movsd xmm1, qword [ebx + 0xc4]
mov dword [esi + 0x130], eax
movsd qword [esi + 0x118], xmm3
movsd qword [esi + 0x110], xmm2
movq qword [esi + 0x128], xmm0
mov eax, dword [ebx + 0xcc]
movsd xmm2, qword [ebx + 0xbc]
movsd xmm3, qword [edx]
movsd qword [esi + 0xfc], xmm1
movsd xmm1, qword [edx + 8]
mov dword [esi + 0x104], eax
movsd qword [esi + 0xf4], xmm2
movsd xmm2, qword [edx + 0x10]
mov eax, dword [ebx + 0xb8]
movsd qword [esi + 0x98], xmm3
movsd qword [esi + 0xa0], xmm1
movsd xmm1, qword [edx + 0x18]
movsd qword [esi + 0xa8], xmm2
movsd xmm2, qword [edx + 0x20]
movsd qword [esi + 0xb0], xmm1
movsd xmm1, qword [edx + 0x28]
movsd qword [esi + 0xb8], xmm2
movsd xmm2, qword [edx + 0x30]
movsd qword [esi + 0xc0], xmm1
movsd xmm1, qword [edx + 0x38]
movsd qword [esi + 0xc8], xmm2
movq xmm2, qword [ebx + 0xa0]
movsd qword [esi + 0xd0], xmm1
movsd xmm1, qword [ebx + 0xa8]
mov dword [esi + 0xf0], eax
mov eax, dword [ebx + 0xd0]
movq qword [esi + 0xd8], xmm2
movsd qword [esi + 0xe0], xmm1
movq xmm1, qword [ebx + 0xb0]
movq qword [esi + 0xe8], xmm1
mov dword [esi + 0x108], eax
movzx eax, byte [ebx + 0xd4]
mov dword [esi + 0x40], connect
mov byte [esi + 0x134], al
mov eax, dword [esi + 0xc]
mov dword [esi + 0x10c], ecx
mov byte [esi + 0x135], al
mov eax, dword [esi + 0x18]
mov byte [esi + 0x136], al
movzx eax, byte [0x5781b1]
push 8
push pe_nt_image_headers32
call fcn.00402ce0
add esp, 8
test eax, eax
je 0x476d6e
mov edi, eax
lea eax, [esi + 0x38]
push pe_nt_image_headers32
push eax
push edi
call sub.VCRUNTIME140.dll_memcpy
add esp, 0xc
cmp dword [esi + 0x10], 0x80000000
mov eax, dword [ebp + 8]
mov dword [eax + 4], edi
mov dword [eax + 8], 0x525000
mov byte [eax], 0x14
jne 0x4767ec
cmp dword [ebx + 8], 0x80000000
je 0x4767ec
mov ecx, ebx
mov dword [esi + 0x260], 0xffffffff
call fcn.00458820
mov eax, dword [esi + 0x258]
mov dword fs:[0], eax
mov eax, dword [ebp + 8]
lea esp, [ebp - 0xc]
pop esi
pop edi
pop ebx
pop ebp
ret
mov eax, dword [0x578064]
xor ecx, ecx
mov eax, dword [eax]
cmp eax, 4
mov eax, 0xff
setne cl
cmovbe eax, ecx
cmp al, 0xff
je 0x476825
movzx eax, al
test eax, eax
jne 0x476876
mov dword [esi + 0x38], str.Server_agreed_to_resume
mov dword [esi + 0x3c], 1
mov dword [esi + 0x48], 0
mov dword [esi + 0x40], 0x524d04
mov dword [esi + 0xc], edi
mov dword [esi + 0x44], 0
mov byte [esi + 0xb], 1
mov dword [esi + 0x260], 1
sub esp, 4
lea eax, [esi + 0x38]
push 0
push 0x6c
push 0x524f58
push 4
push eax
call fcn.004adac0
add esp, 0x18
mov edi, dword [esi + 0xc]
mov ecx, dword [esi + 0x1a8]
mov ebx, dword [ebp + 0x14]
mov al, 0x29
movzx edx, word [ecx + 0x30]
cmp dx, word [ebx + 0x30]
jne 0x4768bc
movzx edx, dx
cmp edx, 0x178
mov edx, dword [ebp + 0x14]
jne 0x4768a3
movzx ecx, word [ecx + 0x32]
cmp cx, word [edx + 0x32]
jne 0x4768bc
cmp byte [esi + 0x1d0], 0
mov ecx, dword [esi + 0x24]
setne al
cmp byte [ecx], 0
setne cl
xor cl, al
mov al, 0x2a
je 0x4768e7
mov ecx, dword [ebp + 8]
mov byte [esi + 7], 0
mov byte [esi + 8], 0
mov dword [esi + 0x260], 0
mov byte [ecx], 8
mov byte [ecx + 1], al
lea ecx, [esi + 0x178]
call fcn.00458820
jmp 0x476208
mov eax, dword [esi + 0x20]
mov ecx, dword [esi + 0x194]
mov dword [esi + 0xc], edi
lea edi, [esi + 0x7c]
movsd xmm0, qword [eax + 0x38]
movq xmm1, qword [eax + 8]
cmp ecx, 0x30
movsd qword [esi + 0x74], xmm0
movsd xmm0, qword [eax + 0x30]
movq qword [esi + 0x44], xmm1
movsd qword [esi + 0x6c], xmm0
movsd xmm0, qword [eax + 0x28]
movsd qword [esi + 0x64], xmm0
movsd xmm0, qword [eax + 0x20]
movsd qword [esi + 0x5c], xmm0
movsd xmm0, qword [eax + 0x18]
movsd qword [esi + 0x54], xmm0
movsd xmm0, qword [eax + 0x10]
movsd qword [esi + 0x4c], xmm0
movq xmm0, qword [eax]
mov eax, dword [esi + 0x190]
movq qword [esi + 0x3c], xmm0
pxor xmm0, xmm0
movq qword [esi + 0x7c], xmm0
movq qword [esi + 0x84], xmm0
movq qword [esi + 0x8c], xmm0
movq qword [esi + 0x94], xmm0
movq qword [esi + 0x9c], xmm0
movq qword [esi + 0xa4], xmm0
mov dword [esi + 0x38], edx
jne 0x476d89
movsd xmm0, qword [eax + 0x28]
lea ecx, [esi + 0x1dc]
movsd qword [edi + 0x28], xmm0
movsd xmm0, qword [eax + 0x20]
movsd qword [edi + 0x20], xmm0
movsd xmm0, qword [eax + 0x18]
movsd qword [edi + 0x18], xmm0
movsd xmm0, qword [eax + 0x10]
movsd qword [edi + 0x10], xmm0
movq xmm0, qword [eax]
movq xmm1, qword [eax + 8]
lea eax, [esi + 0x38]
movq qword [edi + 8], xmm1
movq qword [edi], xmm0
push 0x74
push eax
push ecx
call sub.VCRUNTIME140.dll_memcpy
add esp, 0xc
mov eax, dword [ebp + 0xc]
lea edi, [esi + 0x220]
mov eax, dword [eax + 0xd0]
mov ecx, dword [eax + 0x3c]
mov eax, dword [eax + 0x40]
mov edx, dword [eax + 8]
mov byte [esi + 9], 0
mov byte [esi + 0xa], 1
mov dword [esi + 0x260], 3
dec edx
and edx, 0xfffffff8
lea ecx, [ecx + edx + 8]
lea edx, [esi + 0x1e0]
push 0x30
push edi
push 0x20
push edx
push 0xd
push str.CLIENT_RANDOM
push ecx
call dword [eax + 0x18]
add esp, 0x1c
mov eax, dword [ebp + 0x10]
mov byte [esi + 9], 0
mov byte [esi + 0xa], 1
mov ecx, dword [eax]
push 0
lea eax, [esi + 0x1dc]
push eax
mov dword [esi + 0x1c], ecx
push ecx
call fcn.0044a300
add esp, 0xc
lea eax, [esi + 0x198]
mov byte [esi + 9], 0
mov byte [esi + 0xa], 1
push eax
lea eax, [esi + 0x38]
push eax
call fcn.0045dd30
add esp, 8
mov eax, dword [esi + 0x40]
movsd xmm0, qword [esi + 0x38]
mov ecx, dword [esi + 0x1c]
mov dword [esi + 0x30], eax
movsd qword [esi + 0x28], xmm0
lea edi, [ecx + 0x224]
cmp dword [ecx + 0x224], 0x80000000
je 0x476abe
mov dword [esi + 0x260], 6
push edi
mov dword [esi + 0x10], edi
call fcn.00422fc0
add esp, 4
mov edi, dword [esi + 0x10]
mov eax, dword [edi]
test eax, eax
je 0x476abe
shl eax, 2
lea eax, [eax + eax*2]
push 4
push eax
mov eax, dword [esi + 0x1c]
push dword [eax + 0x228]
call fcn.00402cf0
add esp, 0xc
mov eax, dword [esi + 0x30]
cmp byte [esi + 0x18], 0
mov dword [edi + 8], eax
movsd xmm0, qword [esi + 0x28]
movsd qword [edi], xmm0
je 0x476c12
mov ebx, dword [ebp + 0xc]
lea eax, [esi + 0xcc]
mov edi, dword [ebx + 0xd0]
push 0x74
lea ecx, [esi + 0x1dc]
push ecx
push eax
call sub.VCRUNTIME140.dll_memcpy
add esp, 0xc
push 0x60
lea eax, [esi + 0x178]
push eax
lea eax, [esi + 0x38]
push eax
call sub.VCRUNTIME140.dll_memcpy
add esp, 0xc
mov ecx, dword [esi + 0xc]
movsd xmm3, qword [ebx + 0xbc]
movsd xmm1, qword [ecx + 0x10]
mov eax, dword [ecx + 0x20]
movq xmm0, qword [ecx + 0x18]
movsd xmm2, qword [ecx]
movsd qword [esi + 0x150], xmm1
movsd xmm1, qword [ecx + 8]
mov dword [esi + 0x160], eax
movsd qword [esi + 0x140], xmm2
movq qword [esi + 0x158], xmm0
mov eax, dword [ebx + 0xcc]
movq xmm2, qword [ebx + 0xa0]
mov ecx, dword [ebx + 0xb8]
movsd qword [esi + 0x148], xmm1
movsd xmm1, qword [ebx + 0xc4]
mov dword [esi + 0xc4], eax
movsd qword [esi + 0xb4], xmm3
movzx eax, byte [ebx + 0xd4]
movsd qword [esi + 0xbc], xmm1
movsd xmm1, qword [ebx + 0xa8]
movq qword [esi + 0x98], xmm2
mov dword [esi + 0xb0], ecx
movsd qword [esi + 0xa0], xmm1
movq xmm1, qword [ebx + 0xb0]
movq qword [esi + 0xa8], xmm1
mov dword [esi + 0xc8], edi
mov byte [esi + 0x164], al
mov byte [esi + 0x165], 1
movzx eax, byte [0x5781b1]
push 8
push 0x130
call fcn.00402ce0
add esp, 8
test eax, eax
je 0x476da5
mov edi, eax
push 0x130
lea eax, [esi + 0x38]
push eax
push edi
call sub.VCRUNTIME140.dll_memcpy
add esp, 0xc
mov eax, dword [ebp + 8]
mov dword [eax + 4], edi
mov dword [eax + 8], 0x524fe4
jmp 0x476d45
mov ebx, dword [ebp + 0xc]
lea eax, [esi + 0xdc]
mov edi, dword [ebx + 0xd0]
push 0x74
lea ecx, [esi + 0x1dc]
push ecx
push eax
call sub.VCRUNTIME140.dll_memcpy
add esp, 0xc
lea eax, [esi + 0x48]
push 0x60
lea ecx, [esi + 0x178]
push ecx
push eax
call sub.VCRUNTIME140.dll_memcpy
add esp, 0xc
mov ecx, dword [esi + 0xc]
movsd xmm3, qword [ebx + 0xbc]
mov dword [esi + 0x260], 5
movsd xmm1, qword [ecx + 0x10]
mov eax, dword [ecx + 0x20]
movq xmm0, qword [ecx + 0x18]
movsd xmm2, qword [ecx]
movsd qword [esi + 0x160], xmm1
movsd xmm1, qword [ecx + 8]
mov dword [esi + 0x170], eax
movsd qword [esi + 0x150], xmm2
movq qword [esi + 0x168], xmm0
mov eax, dword [ebx + 0xcc]
mov ecx, dword [ebx + 0xb8]
movq xmm2, qword [ebx + 0xa0]
movsd qword [esi + 0x158], xmm1
movsd xmm1, qword [ebx + 0xc4]
mov dword [esi + 0xd4], eax
movsd qword [esi + 0xc4], xmm3
movzx eax, byte [ebx + 0xd4]
movsd qword [esi + 0xcc], xmm1
movsd xmm1, qword [ebx + 0xa8]
mov dword [esi + 0xc0], ecx
mov ecx, 0x140
movq qword [esi + 0xa8], xmm2
movsd qword [esi + 0xb0], xmm1
movq xmm1, qword [ebx + 0xb0]
movq qword [esi + 0xb8], xmm1
mov dword [esi + 0xd8], edi
mov byte [esi + 0x174], al
mov dword [esi + 0x38], connect
mov byte [esi + 0x175], 1
call fcn.00475010
mov edi, eax
push 0x140
lea eax, [esi + 0x38]
push eax
push edi
call sub.VCRUNTIME140.dll_memcpy
add esp, 0xc
mov eax, dword [ebp + 8]
mov dword [eax + 4], edi
mov dword [eax + 8], 0x524fc8
mov byte [eax], 0x14
jmp 0x4767ec
mov byte [esi + 0xb], 1
mov dword [esi + 0x260], 1
push 0x520c6c
push 0x20
push 0x20
call fcn.00500690
add esp, 0xc
jmp 0x476dbe
mov dword [esi + 0x260], 7
push pe_nt_image_headers32
push 8
call fcn.00500210
add esp, 8
jmp 0x476dbe
mov dword [esi + 0x260], 2
push 0x51a410
push ecx
push 0x30
call fcn.005008b0
add esp, 0xc
jmp 0x476dbe
mov dword [esi + 0x260], 4
push 0x130
push 8
call fcn.00500210
add esp, 8
ud2