Function at 0x526dd0
Capabilities:
Authenticate hmac
Encode data using xor
Resolve function by parsing pe exports

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff0
mov eax, 0x364
call fcn.005bc520
mov eax, dword [0x68a300]
xor eax, esp
mov dword [esp + 0x360], eax
mov eax, dword [ebp + 8]
mov dword [esp + 0x54], eax
mov eax, dword [ebp + 0xc]
push ebx
mov ebx, dword [ebp + 0x20]
mov dword [esp + 0x74], eax
mov eax, dword [ebp + 0x14]
mov dword [esp + 0x44], eax
mov eax, dword [ebp + 0x18]
mov dword [esp + 0x34], eax
mov eax, dword [ebp + 0x24]
mov dword [esp + 0x60], eax
mov dword [esp + 0x5c], 0x28
mov dword [esp + 0x18], 8
mov byte [esp + 0x13], 1
push esi
mov esi, dword [ebp + 0x10]
mov dword [esp + 0x6c], esi
push edi
mov edi, 0x40
mov dword [esp + 0x58], edi
cmp ebx, 0x100000
jb 0x526e5b
push 0x61e818
push 0x1c7
push 0x61e7ec
call fcn.0052f960
add esp, 0xc
push dword [esp + 0x60]
call fcn.00579950
push eax
call fcn.00544290
add esp, 8
cmp eax, 0x2a0
jg 0x526f30
je 0x526efe
cmp eax, 4
je 0x526ebe
cmp eax, 0x40
jne 0x526f41
lea eax, [esp + 0xc0]
push eax
call fcn.0054e5d0
add esp, 4
test eax, eax
jle 0x5276c1
mov dword [esp + 0x34], 0x527aa0
mov eax, 0x14
mov dword [esp + 0x1c], 0x54e610
jmp 0x527006
lea eax, [esp + 0xc0]
push eax
call fcn.0054f4b0
add esp, 4
test eax, eax
jle 0x5276c1
mov edx, 0x30
mov dword [esp + 0x34], 0x527a20
mov dword [esp + 0x1c], 0x54f4f0
mov eax, 0x10
mov dword [esp + 0x64], edx
mov byte [esp + 0x1b], 0
jmp 0x52700b
lea eax, [esp + 0xc0]
push eax
call fcn.0054ea50
add esp, 4
test eax, eax
jle 0x5276c1
mov dword [esp + 0x34], 0x527b40
mov eax, 0x20
mov dword [esp + 0x1c], 0x54eab0
jmp 0x527006
sub eax, 0x2a1
je 0x526fc8
dec eax
je 0x526fac
dec eax
je 0x526f7d
push 0x61e848
push 0x209
push 0x61e7ec
call fcn.0052f960
add esp, 0xc
test esi, esi
je 0x5276c1
mov dword [esi], 0
xor eax, eax
pop edi
pop esi
pop ebx
mov ecx, dword [esp + 0x360]
xor ecx, esp
call fcn.005ba7b4
mov esp, ebp
pop ebp
ret
lea eax, [esp + 0xc0]
push eax
call fcn.0054e710
add esp, 4
test eax, eax
jle 0x5276c1
mov dword [esp + 0x34], 0x527b40
mov eax, 0x1c
mov dword [esp + 0x1c], 0x54eab0
jmp 0x527006
lea eax, [esp + 0xc0]
push eax
call fcn.0054f1e0
add esp, 4
test eax, eax
jle 0x5276c1
mov eax, edi
jmp 0x526fe5
lea eax, [esp + 0xc0]
push eax
call fcn.0054ebb0
add esp, 4
test eax, eax
jle 0x5276c1
mov eax, 0x30
mov edi, 0x80
mov dword [esp + 0x20], 0x10
mov dword [esp + 0x58], edi
mov dword [esp + 0x1c], 0x54f290
mov dword [esp + 0x34], 0x527c30
mov edx, 0x28
cmp byte [ebp + 0x2c], 0
mov ecx, 0xd
mov dword [esp + 0x24], eax
mov dword [esp + 0x54], ecx
je 0x52702a
mov ecx, dword [ebp + 0x28]
add ecx, 0xb
add ecx, edx
mov dword [esp + 0x54], ecx
xor edx, edx
mov esi, ecx
cmp byte [ebp + 0x2c], dl
sete dl
sub esi, eax
mov eax, dword [esp + 0x20]
xor ecx, ecx
dec eax
add eax, esi
add esi, dword [ebp + 0x1c]
add eax, edi
lea edx, [edx*4 + 2]
add eax, ebx
mov dword [esp + 0x40], edx
xor edx, edx
xor ebx, ebx
div edi
xor edx, edx
mov dword [esp + 0x30], ebx
mov dword [esp + 0x38], eax
xor eax, eax
mov dword [esp + 0x44], eax
mov eax, esi
div edi
mov dword [esp + 0x6c], eax
mov eax, dword [esp + 0x20]
mov dword [esp + 0x48], edx
add eax, esi
xor edx, edx
div edi
cmp byte [ebp + 0x2c], cl
mov edx, dword [esp + 0x40]
setne cl
mov dword [esp + 0x78], eax
mov eax, dword [esp + 0x38]
add ecx, edx
cmp eax, ecx
jbe 0x5270a4
sub eax, edx
mov ebx, eax
mov dword [esp + 0x44], eax
imul ebx, edi
mov dword [esp + 0x30], ebx
cmp byte [ebp + 0x2c], 0
lea eax, [esi*8]
mov dword [esp + 0x2c], eax
jne 0x527188
lea eax, [eax + edi*8]
push edi
mov dword [esp + 0x30], eax
lea eax, [esp + 0x1ec]
push 0
push eax
call fcn.005bc550
mov esi, dword [ebp + 0x28]
add esp, 0xc
cmp esi, 0x80
jbe 0x5270f5
push 0x61e84c
push 0x271
push 0x61e7ec
call fcn.0052f960
add esp, 0xc
push esi
push dword [esp + 0x6c]
lea eax, [esp + 0x1f0]
push eax
call fcn.005bac20
add esp, 0xc
xor ecx, ecx
test edi, edi
je 0x52716d
cmp edi, 0x20
jb 0x527156
movdqa xmm1, xmmword [0x61e880]
mov eax, edi
and eax, 0x1f
mov edx, edi
sub edx, eax
lea eax, [esp + 0x1f8]
lea ecx, [ecx]
movdqu xmm0, xmmword [eax - 0x10]
add ecx, 0x20
lea eax, [eax + 0x20]
pxor xmm0, xmm1
movdqu xmmword [eax - 0x30], xmm0
movdqu xmm0, xmmword [eax - 0x20]
pxor xmm0, xmm1
movdqu xmmword [eax - 0x20], xmm0
cmp ecx, edx
jb 0x527130
cmp ecx, edi
jae 0x52716d
lea ebx, [ebx]
xor byte [esp + ecx + 0x1e8], 0x36
inc ecx
cmp ecx, edi
jb 0x527160
mov esi, dword [esp + 0x1c]
lea eax, [esp + 0x1e8]
push eax
lea eax, [esp + 0xc4]
push eax
call esi
add esp, 8
jmp 0x52718c
mov esi, dword [esp + 0x1c]
cmp byte [esp + 0x1b], 0
je 0x5271e2
mov eax, dword [esp + 0x20]
add eax, 0xfffffffc
push eax
lea eax, [esp + 0x19c]
push 0
push eax
call fcn.005bc550
mov ecx, dword [esp + 0x38]
add esp, 0xc
mov edx, dword [esp + 0x20]
mov eax, ecx
shr eax, 0x18
mov byte [esp + edx + 0x194], al
mov eax, ecx
shr eax, 0x10
mov byte [esp + edx + 0x195], al
mov eax, ecx
shr eax, 8
mov byte [esp + edx + 0x196], al
mov byte [esp + edx + 0x197], cl
jmp 0x52722b
push dword [esp + 0x20]
lea eax, [esp + 0x19c]
push 0
push eax
call fcn.005bc550
mov ecx, dword [esp + 0x38]
add esp, 0xc
mov edx, dword [esp + 0x20]
mov eax, ecx
shr eax, 0x18
mov byte [esp + edx + 0x193], al
mov eax, ecx
shr eax, 0x10
mov byte [esp + edx + 0x192], al
mov eax, ecx
shr eax, 8
mov byte [esp + edx + 0x191], al
mov byte [esp + edx + 0x190], cl
test ebx, ebx
je 0x527355
cmp byte [ebp + 0x2c], 0
je 0x5272da
mov esi, dword [esp + 0x54]
cmp esi, edi
jbe 0x5276c1
push dword [esp + 0x4c]
lea eax, [esp + 0xc4]
sub esi, edi
push eax
mov dword [esp + 0x40], esi
call dword [esp + 0x24]
mov eax, dword [esp + 0x54]
add eax, edi
push esi
push eax
lea eax, [esp + 0x278]
push eax
call fcn.005bac20
mov eax, edi
sub eax, esi
push eax
push dword [esp + 0x54]
lea eax, [esp + 0x284]
add eax, esi
push eax
call fcn.005bac20
lea eax, [esp + 0x288]
push eax
lea eax, [esp + 0xe4]
push eax
call dword [esp + 0x44]
xor edx, edx
mov eax, ebx
div edi
add esp, 0x28
dec eax
cmp eax, 1
jbe 0x527355
mov esi, dword [esp + 0x3c]
lea ebx, [eax - 1]
sub esi, dword [esp + 0x38]
add esi, edi
lea eax, [esp + 0xc0]
push esi
push eax
call dword [esp + 0x24]
add esp, 8
add esi, edi
dec ebx
jne 0x5272c0
jmp 0x527355
mov ecx, dword [esp + 0x4c]
mov eax, dword [ecx + 8]
movq xmm0, qword [ecx]
mov dword [esp + 0x270], eax
mov al, byte [ecx + 0xc]
mov byte [esp + 0x274], al
lea eax, [edi - 0xd]
push eax
push dword [esp + 0x40]
lea eax, [esp + 0x27d]
movq qword [esp + 0x270], xmm0
push eax
call fcn.005bac20
lea eax, [esp + 0x274]
push eax
lea eax, [esp + 0xd0]
push eax
call esi
xor edx, edx
mov eax, ebx
div edi
add esp, 0x14
cmp eax, 1
jbe 0x527355
mov esi, dword [esp + 0x3c]
lea ebx, [eax - 1]
add esi, 0xfffffff3
add esi, edi
lea eax, [esp + 0xc0]
push esi
push eax
call dword [esp + 0x24]
add esp, 8
add esi, edi
dec ebx
jne 0x527340
push 0x40
lea eax, [esp + 0x1ac]
push 0
push eax
call fcn.005bc550
mov eax, dword [esp + 0x4c]
add esp, 0xc
mov ecx, dword [esp + 0x44]
add eax, ecx
mov dword [esp + 0x8c], eax
cmp ecx, eax
ja 0x52760d
mov eax, ecx
xor esi, esi
xor eax, dword [esp + 0x6c]
lea edx, [eax - 1]
not eax
shr eax, 0x1f
shr edx, 0x1f
and dl, al
mov eax, ecx
xor eax, dword [esp + 0x78]
neg dl
mov dword [esp + 0x84], edx
lea ecx, [eax - 1]
not eax
shr ecx, 0x1f
shr eax, 0x1f
and cl, al
neg cl
movsx eax, cl
mov dword [esp + 0x38], ecx
movd xmm0, eax
punpcklbw xmm0, xmm0
punpcklwd xmm0, xmm0
pshufd xmm0, xmm0, 0
movdqa xmmword [esp + 0xb0], xmm0
test edi, edi
je 0x527528
mov eax, dword [esp + 0x48]
lea ebx, [esp + 0x198]
shr eax, 0x1f
not cl
mov dword [esp + 0x88], eax
or cl, dl
movzx eax, dl
mov dword [esp + 0x80], eax
mov eax, dword [esp + 0x48]
mov byte [esp + 0x2b], cl
mov ecx, dword [esp + 0x48]
neg ecx
lea eax, [eax + 1]
mov dword [esp + 0x40], ecx
shr eax, 0x1f
mov dword [esp + 0x90], eax
mov eax, edi
sub eax, dword [esp + 0x20]
mov dword [esp + 0x94], eax
mov eax, dword [esp + 0x20]
sub eax, edi
add eax, ebx
mov ebx, dword [esp + 0x30]
mov dword [esp + 0x2c], eax
lea ecx, [ecx]
mov edx, dword [esp + 0x54]
mov byte [esp + 0x1b], 0
cmp ebx, edx
jae 0x527453
mov eax, dword [esp + 0x4c]
jmp 0x527462
mov eax, dword [ebp + 0x20]
add eax, edx
cmp ebx, eax
jae 0x527469
mov eax, dword [esp + 0x3c]
sub eax, edx
mov al, byte [eax + ebx]
mov byte [esp + 0x1b], al
mov eax, dword [esp + 0x88]
mov edx, esi
shr ecx, 0x1f
inc ebx
xor cl, al
shr edx, 0x1f
xor al, dl
mov dword [esp + 0x30], ebx
or cl, al
mov edi, dword [esp + 0x58]
xor cl, dl
dec cl
movzx eax, cl
mov ecx, esi
and eax, dword [esp + 0x80]
mov dword [esp + 0x50], eax
not eax
mov dword [esp + 0x5c], eax
mov ebx, dword [esp + 0x5c]
mov eax, dword [esp + 0x50]
and bl, byte [esp + 0x1b]
and al, 0x80
or bl, al
mov eax, dword [esp + 0x48]
inc eax
sub ecx, eax
mov eax, dword [esp + 0x90]
shr ecx, 0x1f
xor cl, al
xor al, dl
or cl, al
xor cl, dl
dec cl
and cl, byte [esp + 0x84]
not cl
and cl, byte [esp + 0x2b]
and bl, cl
cmp esi, dword [esp + 0x94]
jb 0x527507
mov eax, dword [esp + 0x38]
movzx eax, al
mov dword [esp + 0x50], eax
not eax
mov dword [esp + 0x5c], eax
mov eax, dword [esp + 0x2c]
mov ecx, dword [esp + 0x50]
and cl, byte [eax]
mov eax, dword [esp + 0x5c]
and bl, al
or bl, cl
mov ecx, dword [esp + 0x40]
inc dword [esp + 0x2c]
inc ecx
mov byte [esp + esi + 0x2e8], bl
inc esi
mov ebx, dword [esp + 0x30]
mov dword [esp + 0x40], ecx
cmp esi, edi
jb 0x527440
lea eax, [esp + 0x2e8]
push eax
lea eax, [esp + 0xc4]
push eax
call dword [esp + 0x24]
lea eax, [esp + 0x2f0]
push eax
lea eax, [esp + 0xcc]
push eax
call dword [esp + 0x44]
mov esi, dword [esp + 0x34]
add esp, 0x10
xor eax, eax
test esi, esi
je 0x5275f5
cmp esi, 0x20
jb 0x5275cd
movdqa xmm2, xmmword [esp + 0xb0]
mov ecx, esi
and ecx, 0x1f
mov edx, esi
sub edx, ecx
jmp 0x527580
movdqu xmm0, xmmword [esp + eax + 0x1a8]
movdqu xmm1, xmmword [esp + eax + 0x2e8]
pand xmm1, xmm2
por xmm1, xmm0
movdqu xmmword [esp + eax + 0x1a8], xmm1
movdqu xmm1, xmmword [esp + eax + 0x2f8]
movdqu xmm0, xmmword [esp + eax + 0x1b8]
pand xmm1, xmm2
por xmm1, xmm0
movdqu xmmword [esp + eax + 0x1b8], xmm1
add eax, 0x20
cmp eax, edx
jb 0x527580
cmp eax, esi
jae 0x5275f5
mov edx, dword [esp + 0x38]
jmp 0x5275e0
mov cl, byte [esp + eax + 0x2e8]
and cl, dl
or byte [esp + eax + 0x1a8], cl
inc eax
cmp eax, esi
jb 0x5275e0
mov ecx, dword [esp + 0x44]
inc ecx
mov dword [esp + 0x44], ecx
cmp ecx, dword [esp + 0x8c]
jbe 0x527382
jmp 0x527611
mov esi, dword [esp + 0x24]
lea eax, [esp + 0x98]
push eax
call fcn.00539bf0
mov eax, dword [esp + 0x64]
push 0
push dword [eax]
lea eax, [esp + 0xa4]
push eax
call fcn.005397d0
add esp, 0x10
test eax, eax
jle 0x5276b1
cmp byte [ebp + 0x2c], 0
je 0x5276d8
mov ebx, dword [esp + 0x64]
lea eax, [esp + 0x1e8]
push ebx
push 0x5c
push eax
call fcn.005bc550
push dword [ebp + 0x28]
lea eax, [esp + 0xa8]
push dword [esp + 0x78]
push eax
call fcn.00539980
add esp, 0x18
test eax, eax
jle 0x5276b1
push ebx
lea eax, [esp + 0x1ec]
push eax
lea eax, [esp + 0xa0]
push eax
call fcn.00539980
add esp, 0xc
test eax, eax
jle 0x5276b1
push esi
lea eax, [esp + 0x1ac]
push eax
lea eax, [esp + 0xa0]
push eax
call fcn.00539980
add esp, 0xc
test eax, eax
jg 0x52777f
lea eax, [esp + 0x98]
push eax
call fcn.00539990
add esp, 4
xor eax, eax
pop edi
pop esi
pop ebx
mov ecx, dword [esp + 0x360]
xor ecx, esp
call fcn.005ba7b4
mov esp, ebp
pop ebp
ret
xor ecx, ecx
test edi, edi
je 0x52773d
cmp edi, 0x20
jb 0x527726
movdqa xmm1, xmmword [0x61e890]
mov eax, edi
and eax, 0x1f
mov edx, edi
sub edx, eax
lea eax, [esp + 0x1f8]
jmp 0x527700
movdqu xmm0, xmmword [eax - 0x10]
add ecx, 0x20
lea eax, [eax + 0x20]
pxor xmm0, xmm1
movdqu xmmword [eax - 0x30], xmm0
movdqu xmm0, xmmword [eax - 0x20]
pxor xmm0, xmm1
movdqu xmmword [eax - 0x20], xmm0
cmp ecx, edx
jb 0x527700
cmp ecx, edi
jae 0x52773d
lea ebx, [ebx]
xor byte [esp + ecx + 0x1e8], 0x6a
inc ecx
cmp ecx, edi
jb 0x527730
push edi
lea eax, [esp + 0x1ec]
push eax
lea eax, [esp + 0xa0]
push eax
call fcn.00539980
add esp, 0xc
test eax, eax
jle 0x5276b1
push esi
lea eax, [esp + 0x1ac]
push eax
lea eax, [esp + 0xa0]
push eax
call fcn.00539980
add esp, 0xc
test eax, eax
jle 0x5276b1
lea eax, [esp + 0x74]
push eax
push dword [esp + 0x80]
lea eax, [esp + 0xa0]
push eax
call fcn.00539700
mov ecx, dword [esp + 0x7c]
add esp, 0xc
test ecx, ecx
je 0x5277a9
mov eax, dword [esp + 0x74]
mov dword [ecx], eax
lea eax, [esp + 0x98]
push eax
call fcn.00539990
mov ecx, dword [esp + 0x370]
add esp, 4
mov eax, 1
pop edi
pop esi
pop ebx
xor ecx, esp
call fcn.005ba7b4
mov esp, ebp
pop ebp
ret