Function at 0x40296c
Capabilities:
Encode data using xor
Hash data via bcrypt
Resolve function by parsing pe exports

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
and esp, 0xfffffff0
sub esp, 0x2c0
cmp byte [ecx + 0x3f], 0x1f
ja 0x403135
mov dword [esp + 0x18], ecx
movzx ecx, byte [edx]
movzx eax, byte [edx + 2]
movzx ebx, byte [edx + 3]
movzx edi, byte [edx + 0x1e]
mov esi, edx
movzx edx, byte [edx + 0x1f]
and edx, 0x7f
shl edx, 0x12
shl edi, 0xa
or edi, edx
shl eax, 0x10
mov edx, ebx
and edx, 3
shl edx, 0x18
or edx, eax
movzx eax, byte [esi + 1]
shl eax, 8
or edx, eax
movzx eax, byte [esi + 5]
or edx, ecx
mov dword [esp + 0x50], edx
movzx ecx, byte [esi + 0x1d]
lea ecx, [edi + ecx*4]
mov dword [esp + 0xc], ecx
movzx edx, byte [esi + 6]
shl eax, 0xe
mov ecx, edx
and edx, 7
shl edx, 0x16
or edx, eax
movzx eax, byte [esi + 4]
shl eax, 6
or edx, eax
shr ebx, 2
or edx, ebx
mov dword [esp + 0x40], edx
movzx eax, byte [esi + 8]
shl eax, 0xd
movzx edx, byte [esi + 9]
mov ebx, edx
and edx, 0x1f
shl edx, 0x15
or edx, eax
movzx eax, byte [esi + 7]
shl eax, 5
or edx, eax
shr ecx, 3
or edx, ecx
mov dword [esp + 0x30], edx
movzx eax, byte [esi + 0xb]
shl eax, 0xb
movzx ecx, byte [esi + 0xc]
mov edx, ecx
and ecx, 0x3f
shl ecx, 0x13
or ecx, eax
movzx eax, byte [esi + 0xa]
lea eax, [ecx + eax*8]
shr ebx, 5
or eax, ebx
mov dword [esp + 0x20], eax
shr edx, 6
movzx eax, byte [esi + 0xd]
lea ecx, [edx + eax*4]
movzx eax, byte [esi + 0xe]
shl eax, 0xa
or ecx, eax
movzx eax, byte [esi + 0xf]
shl eax, 0x12
or ecx, eax
mov dword [esp + 0x10], ecx
movzx eax, byte [esi + 0x12]
shl eax, 0x10
movzx edi, byte [esi + 0x13]
mov ebx, edi
and edi, 1
shl edi, 0x18
or edi, eax
movzx eax, byte [esi + 0x11]
shl eax, 8
or edi, eax
movzx eax, byte [esi + 0x10]
or edi, eax
movzx edx, byte [esi + 0x15]
shl edx, 0xf
movzx ecx, byte [esi + 0x16]
mov eax, ecx
and ecx, 7
shl ecx, 0x17
or ecx, edx
movzx edx, byte [esi + 0x14]
shl edx, 7
or ecx, edx
shr ebx, 1
or ecx, ebx
movzx edx, byte [esi + 0x18]
shl edx, 0xd
movzx ebx, byte [esi + 0x19]
mov dword [esp + 0x1c], ebx
and ebx, 0xf
shl ebx, 0x15
or ebx, edx
movzx edx, byte [esi + 0x17]
shl edx, 5
or ebx, edx
shr eax, 3
or ebx, eax
movzx eax, byte [esi + 0x1c]
mov edx, eax
shr edx, 6
add edx, dword [esp + 0xc]
mov dword [esp + 0xc], edx
movzx edx, byte [esi + 0x1b]
shl edx, 0xc
and eax, 0x3f
shl eax, 0x14
or eax, edx
mov dword [esp + 0x14], esi
movzx esi, byte [esi + 0x1a]
shl esi, 4
or eax, esi
mov esi, dword [esp + 0x1c]
shr esi, 4
or eax, esi
lea edx, [esp + 0x1cc]
mov esi, dword [esp + 0x50]
mov dword [edx], esi
mov esi, dword [esp + 0x40]
mov dword [edx + 4], esi
mov esi, dword [esp + 0x30]
mov dword [edx + 8], esi
mov esi, dword [esp + 0x20]
mov dword [edx + 0xc], esi
mov esi, dword [esp + 0x10]
mov dword [edx + 0x10], esi
mov dword [edx + 0x14], edi
mov dword [edx + 0x18], ecx
mov dword [edx + 0x1c], ebx
mov dword [edx + 0x20], eax
mov eax, dword [esp + 0xc]
mov dword [edx + 0x24], eax
xorps xmm0, xmm0
movups xmmword [edx + 0x2c], xmm0
movups xmmword [edx + 0x3c], xmm0
mov dword [edx + 0x4c], 0
mov dword [edx + 0x28], 1
mov edi, edx
lea ebx, [esp + 0x17c]
mov ecx, ebx
call fcn.0040328a
lea ecx, [esp + 0xec]
mov edx, ebx
push 0x40b6d0
call fcn.00403ce1
add esp, 4
movdqu xmm0, xmmword [ebx]
movdqu xmm1, xmmword [ebx + 0x10]
movdqu xmm2, xmmword [edi + 0x28]
psubd xmm0, xmm2
movdqu xmm2, xmmword [edi + 0x38]
paddd xmm0, xmmword [0x40b2f0]
psubd xmm1, xmm2
paddd xmm1, xmmword [0x40b300]
mov eax, dword [ebx + 0x20]
sub eax, dword [edi + 0x48]
add eax, 0x7fffffe
mov ecx, dword [ebx + 0x24]
sub ecx, dword [edi + 0x4c]
add ecx, 0x3fffffe
lea esi, [esp + 0x90]
movdqu xmmword [esi], xmm0
movdqu xmmword [esi + 0x10], xmm1
mov dword [esi + 0x20], eax
mov dword [esi + 0x24], ecx
lea ecx, [esp + 0x60]
mov edx, esi
call fcn.00404c74
lea eax, [esp + 0xec]
movdqu xmm0, xmmword [eax]
movdqu xmm1, xmmword [eax + 0x10]
mov edx, eax
movdqu xmm2, xmmword [edi + 0x28]
paddd xmm2, xmm0
movdqu xmm0, xmmword [edi + 0x38]
mov eax, dword [edi + 0x48]
add eax, dword [edx + 0x20]
paddd xmm0, xmm1
mov ecx, dword [edi + 0x4c]
add ecx, dword [edx + 0x24]
movdqu xmmword [esi], xmm2
movdqu xmmword [esi + 0x10], xmm0
mov dword [esi + 0x20], eax
mov dword [esi + 0x24], ecx
mov ecx, ebx
mov edx, esi
call fcn.0040328a
mov ecx, ebx
mov edx, ebx
push esi
call fcn.00403ce1
add esp, 4
lea edi, [esp + 0x1a4]
mov ecx, edi
mov edx, ebx
call fcn.0040328a
mov ecx, edi
mov edx, edi
push esi
call fcn.00403ce1
add esp, 4
mov ecx, edi
mov edx, edi
lea eax, [esp + 0x60]
push eax
call fcn.00403ce1
add esp, 4
lea esi, [esp + 0x244]
mov ecx, esi
mov edx, edi
call fcn.0040328a
lea ebx, [esp + 0x114]
mov ecx, ebx
mov edx, esi
call fcn.0040328a
mov ecx, ebx
mov edx, ebx
call fcn.0040328a
mov ecx, ebx
mov edx, edi
mov edi, esi
push ebx
call fcn.00403ce1
add esp, 4
mov ecx, esi
mov edx, esi
push ebx
call fcn.00403ce1
add esp, 4
mov ecx, esi
mov edx, esi
call fcn.0040328a
mov ecx, esi
mov edx, ebx
push esi
call fcn.00403ce1
add esp, 4
mov ecx, ebx
mov edx, esi
call fcn.0040328a
mov esi, 4
mov ecx, ebx
mov edx, ebx
call fcn.0040328a
dec esi
jne 0x402cce
lea ebx, [esp + 0x114]
mov ecx, edi
mov edx, ebx
push edi
call fcn.00403ce1
add esp, 4
mov ecx, ebx
mov edx, edi
call fcn.0040328a
mov esi, 9
mov ecx, ebx
mov edx, ebx
call fcn.0040328a
dec esi
jne 0x402cfc
lea ebx, [esp + 0x114]
mov ecx, ebx
mov edx, ebx
push edi
call fcn.00403ce1
add esp, 4
lea esi, [esp + 0x154]
mov ecx, esi
mov edx, ebx
call fcn.0040328a
mov edi, 0x13
mov ecx, esi
mov edx, esi
call fcn.0040328a
dec edi
jne 0x402d31
lea edx, [esp + 0x154]
mov ecx, ebx
push ebx
call fcn.00403ce1
add esp, 4
mov ecx, ebx
mov edx, ebx
call fcn.0040328a
mov esi, 9
mov ecx, ebx
mov edx, ebx
call fcn.0040328a
dec esi
jne 0x402d5d
lea ebx, [esp + 0x114]
lea edi, [esp + 0x244]
mov ecx, edi
mov edx, ebx
push edi
call fcn.00403ce1
add esp, 4
mov ecx, ebx
mov edx, edi
call fcn.0040328a
mov esi, 0x31
mov ecx, ebx
mov edx, ebx
call fcn.0040328a
dec esi
jne 0x402d92
lea ebx, [esp + 0x114]
mov ecx, ebx
mov edx, ebx
push edi
call fcn.00403ce1
add esp, 4
lea esi, [esp + 0x154]
mov ecx, esi
mov edx, ebx
call fcn.0040328a
mov edi, 0x63
mov ecx, esi
mov edx, esi
call fcn.0040328a
dec edi
jne 0x402dc7
lea edx, [esp + 0x154]
mov ecx, ebx
push ebx
call fcn.00403ce1
add esp, 4
mov ecx, ebx
mov edx, ebx
call fcn.0040328a
mov esi, 0x31
mov ecx, ebx
mov edx, ebx
call fcn.0040328a
dec esi
jne 0x402df3
lea edx, [esp + 0x114]
lea edi, [esp + 0x244]
mov ecx, edi
push edi
call fcn.00403ce1
add esp, 4
mov ecx, edi
mov edx, edi
call fcn.0040328a
mov ecx, edi
mov edx, edi
call fcn.0040328a
lea esi, [esp + 0x1a4]
mov ecx, esi
mov edx, edi
push esi
call fcn.00403ce1
add esp, 4
mov ecx, esi
mov edx, esi
lea eax, [esp + 0x17c]
push eax
call fcn.00403ce1
add esp, 4
mov ecx, esi
mov edx, esi
lea eax, [esp + 0x60]
push eax
call fcn.00403ce1
add esp, 4
lea edi, [esp + 0xec]
mov ecx, edi
mov edx, esi
call fcn.0040328a
mov ecx, edi
mov edx, edi
lea eax, [esp + 0x90]
push eax
call fcn.00403ce1
add esp, 4
movdqu xmm0, xmmword [edi]
movdqu xmm3, xmmword [edi + 0x10]
movdqu xmm1, xmmword [esp + 0x60]
movdqu xmm2, xmmword [esp + 0x70]
movdqa xmmword [esp + 0x20], xmm0
movdqa xmmword [esp + 0x50], xmm1
psubd xmm0, xmm1
paddd xmm0, xmmword [0x40b2f0]
movdqa xmmword [esp + 0x30], xmm3
movdqa xmm1, xmm3
movdqa xmmword [esp + 0x40], xmm2
psubd xmm1, xmm2
paddd xmm1, xmmword [0x40b300]
mov eax, dword [edi + 0x20]
mov esi, dword [esp + 0x80]
mov dword [esp + 0x10], eax
sub eax, esi
add eax, 0x7fffffe
mov ebx, dword [edi + 0x24]
lea ecx, [esp + 0xc4]
movdqu xmmword [ecx], xmm0
movdqu xmmword [ecx + 0x10], xmm1
mov dword [ecx + 0x20], eax
mov edi, dword [esp + 0x84]
mov eax, ebx
sub eax, edi
add eax, 0x3fffffe
mov dword [ecx + 0x24], eax
call fcn.00404d80
test eax, eax
je 0x402f6e
movdqa xmm0, xmmword [esp + 0x50]
paddd xmm0, xmmword [esp + 0x20]
movdqa xmm1, xmmword [esp + 0x40]
paddd xmm1, xmmword [esp + 0x30]
add esi, dword [esp + 0x10]
add edi, ebx
lea ecx, [esp + 0xc4]
movdqu xmmword [ecx], xmm0
movdqu xmmword [ecx + 0x10], xmm1
mov dword [ecx + 0x20], esi
mov dword [ecx + 0x24], edi
call fcn.00404d80
test eax, eax
jne 0x403135
lea ecx, [esp + 0x1a4]
mov edx, ecx
push 0x40b6f8
call fcn.00403ce1
add esp, 4
lea esi, [esp + 0x244]
lea edx, [esp + 0x1a4]
mov ecx, esi
call fcn.00404dbd
mov al, byte [esi]
and al, 1
mov ecx, dword [esp + 0x14]
mov cl, byte [ecx + 0x1f]
shr cl, 7
cmp al, cl
je 0x402fe8
movdqa xmm0, xmmword [0x40b2f0]
lea ecx, [esp + 0x1a4]
movdqu xmm1, xmmword [ecx]
psubd xmm0, xmm1
movdqu xmm1, xmmword [ecx + 0x10]
movdqa xmm2, xmmword [0x40b300]
psubd xmm2, xmm1
mov eax, 0x7fffffe
sub eax, dword [ecx + 0x20]
mov esi, 0x3fffffe
sub esi, dword [ecx + 0x24]
lea edx, [esp + 0x244]
movdqu xmmword [edx], xmm0
movdqu xmmword [edx + 0x10], xmm2
mov dword [edx + 0x20], eax
mov dword [edx + 0x24], esi
call fcn.00404c74
mov edi, 0x10000000
xor ebx, ebx
lea ecx, [esp + 0x21c]
lea esi, [esp + 0x1a4]
mov edx, esi
lea eax, [esp + 0x1cc]
push eax
call fcn.00403ce1
add esp, 4
movdqa xmm2, xmmword [0x40b2f0]
mov ecx, esi
movdqu xmm0, xmmword [esi]
movdqu xmm1, xmmword [esi + 0x10]
psubd xmm2, xmm0
movdqa xmm0, xmmword [0x40b300]
psubd xmm0, xmm1
mov eax, 0x7fffffe
sub eax, dword [esi + 0x20]
lea esi, [esp + 0x154]
movdqu xmmword [esi], xmm2
movdqu xmmword [esi + 0x10], xmm0
mov dword [esi + 0x20], eax
mov eax, 0x3fffffe
sub eax, dword [ecx + 0x24]
mov dword [esi + 0x24], eax
mov edx, esi
call fcn.00404c74
lea eax, [esp + 0x1a4]
movdqu xmm0, xmmword [eax + 0x78]
lea ecx, [esp + 0x21c]
movdqu xmm1, xmmword [ecx + 0x10]
movdqa xmm2, xmmword [0x40b2f0]
psubd xmm2, xmm0
movdqa xmm0, xmmword [0x40b300]
psubd xmm0, xmm1
mov eax, 0x7fffffe
sub eax, dword [ecx + 0x20]
mov edx, 0x3fffffe
sub edx, dword [ecx + 0x24]
movdqu xmmword [esi], xmm2
movdqu xmmword [esi + 0x10], xmm0
mov dword [esi + 0x20], eax
mov dword [esi + 0x24], edx
mov edx, esi
call fcn.00404c74
mov eax, dword [esp + 0x18]
movups xmm0, xmmword [eax]
movups xmm1, xmmword [eax + 0x10]
movaps xmmword [esp + 0x70], xmm1
movaps xmmword [esp + 0x60], xmm0
movdqu xmm0, xmmword [eax + 0x20]
movdqu xmm1, xmmword [eax + 0x30]
movdqa xmmword [esp + 0xa0], xmm1
movdqa xmmword [esp + 0x90], xmm0
mov ecx, dword [esp + 0xa8]
mov eax, dword [esp + 0xac]
mov edx, ecx
neg edx
mov edx, 0x10000000
sbb edx, eax
jb 0x403137
mov edx, 0x18
cmp ecx, ebx
sbb eax, edi
jb 0x403141
test edx, edx
je 0x403135
mov ecx, dword [esp + edx + 0x88]
mov eax, dword [esp + edx + 0x8c]
mov edi, dword [edx + 0x40b65c]
mov ebx, dword [edx + 0x40b658]
add edx, 0xfffffff8
cmp ebx, ecx
mov esi, edi
sbb esi, eax
jae 0x403106
xor ebx, ebx
mov eax, ebx
lea esp, [ebp - 0xc]
pop esi
pop edi
pop ebx
pop ebp
ret
xor ebx, ebx
push ebx
push ebx
push str.SHA512
lea eax, [esp + 0xf8]
push eax
call sub.bcrypt.dll_BCryptOpenAlgorithmProvider
test eax, eax
js 0x403137
mov eax, dword [esp + 0xec]
sub esp, 0x1c
pxor xmm0, xmm0
movdqu xmmword [esp + 8], xmm0
lea ecx, [esp + 0xe0]
mov dword [esp + 4], ecx
mov dword [esp], eax
mov dword [esp + 0x18], 0
call sub.bcrypt.dll_BCryptCreateHash
test eax, eax
js 0x403135
push 0
push 0x20
push dword [esp + 0x20]
push dword [esp + 0xd0]
call sub.bcrypt.dll_BCryptHashData
test eax, eax
js 0x403135
push 0
push 0x20
push dword [esp + 0x1c]
push dword [esp + 0xd0]
call sub.bcrypt.dll_BCryptHashData
test eax, eax
js 0x403135
push 0
push dword [ebp + 0xc]
push dword [ebp + 8]
push dword [esp + 0xd0]
call sub.bcrypt.dll_BCryptHashData
test eax, eax
js 0x403135
push 0
push 0x40
lea eax, [esp + 0x11c]
push eax
push dword [esp + 0xd0]
call sub.bcrypt.dll_BCryptFinishHash
test eax, eax
js 0x403135
push dword [esp + 0xc4]
call sub.bcrypt.dll_BCryptDestroyHash
test eax, eax
js 0x403135
push 0
push dword [esp + 0xf0]
call sub.bcrypt.dll_BCryptCloseAlgorithmProvider
xor ebx, ebx
test eax, eax
js 0x403137
lea esi, [esp + 0x114]
mov ecx, esi
call fcn.004050e4
lea edi, [esp + 0x244]
mov ecx, edi
mov edx, esi
lea eax, [esp + 0x90]
push eax
lea eax, [esp + 0x1a8]
push eax
call fcn.0040673b
add esp, 8
lea ecx, [esp + 0x17c]
mov edx, edi
call fcn.0040730d
xor ecx, ecx
mov al, byte [esp + ebx + 0x60]
xor al, byte [esp + ebx + 0x17c]
or al, cl
inc ebx
mov ecx, eax
cmp ebx, 0x20
jne 0x40326b
test al, al
sete bl
jmp 0x403137