Function at 0x404290
Capabilities:
Compute adler32 checksum

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
mov ecx, dword [ebp + 8]
mov ebx, dword [ebp + 0x10]
mov edi, dword [ebp + 0xc]
movzx esi, cx
shr ecx, 0x10
cmp ebx, 1
je 0x40450e
test edi, edi
je 0x404397
cmp ebx, 0x10
jb 0x4044d2
cmp ebx, 0x15b0
jae 0x40439c
movzx eax, byte [edi]
movzx edx, byte [edi + 1]
add ebx, 0xfffffff0
add eax, esi
movzx esi, byte [edi + 0xd]
add ecx, eax
add edx, eax
movzx eax, byte [edi + 2]
add ecx, edx
add eax, edx
movzx edx, byte [edi + 3]
add ecx, eax
add edx, eax
movzx eax, byte [edi + 4]
add ecx, edx
add eax, edx
movzx edx, byte [edi + 5]
add ecx, eax
add edx, eax
movzx eax, byte [edi + 6]
add ecx, edx
add eax, edx
movzx edx, byte [edi + 7]
add ecx, eax
add edx, eax
movzx eax, byte [edi + 8]
add ecx, edx
add eax, edx
movzx edx, byte [edi + 9]
add ecx, eax
add edx, eax
movzx eax, byte [edi + 0xa]
add ecx, edx
add eax, edx
movzx edx, byte [edi + 0xb]
add ecx, eax
add edx, eax
movzx eax, byte [edi + 0xc]
add ecx, edx
add eax, edx
add ecx, eax
add esi, eax
movzx eax, byte [edi + 0xe]
add ecx, esi
add eax, esi
movzx esi, byte [edi + 0xf]
add edi, 0x10
add ecx, eax
add esi, eax
add ecx, esi
cmp ebx, 0xf
ja 0x4042cb
test ebx, ebx
je 0x404368
movzx eax, byte [edi]
inc edi
add esi, eax
add ecx, esi
dec ebx
jne 0x40435d
mov edi, 0x80078071
mov eax, esi
mul edi
shr edx, 0xf
imul eax, edx, 0xfff1
sub esi, eax
mov eax, ecx
mul edi
shr edx, 0xf
imul eax, edx, 0xfff1
sub ecx, eax
shl ecx, 0x10
or ecx, esi
mov eax, ecx
pop esi
pop edi
pop ebx
pop ebp
ret
xor ecx, ecx
inc ecx
jmp 0x404390
mov eax, 0xffffea60
nop word cs:[eax + eax]
nop dword [eax + eax]
movzx edx, byte [edi + eax + 0x15a0]
add edx, esi
movzx esi, byte [edi + eax + 0x15a1]
add ecx, edx
add esi, edx
movzx edx, byte [edi + eax + 0x15a2]
add ecx, esi
add edx, esi
movzx esi, byte [edi + eax + 0x15a3]
add ecx, edx
add esi, edx
movzx edx, byte [edi + eax + 0x15a4]
add ecx, esi
add edx, esi
movzx esi, byte [edi + eax + 0x15a5]
add ecx, edx
add esi, edx
movzx edx, byte [edi + eax + 0x15a6]
add ecx, esi
add edx, esi
movzx esi, byte [edi + eax + 0x15a7]
add ecx, edx
add esi, edx
movzx edx, byte [edi + eax + 0x15a8]
add ecx, esi
add edx, esi
movzx esi, byte [edi + eax + 0x15a9]
add ecx, edx
add esi, edx
movzx edx, byte [edi + eax + 0x15aa]
add ecx, esi
add edx, esi
movzx esi, byte [edi + eax + 0x15ab]
add ecx, edx
add esi, edx
movzx edx, byte [edi + eax + 0x15ac]
add ecx, esi
add edx, esi
movzx esi, byte [edi + eax + 0x15ad]
add ecx, edx
add esi, edx
movzx edx, byte [edi + eax + 0x15ae]
add ecx, esi
add edx, esi
movzx esi, byte [edi + eax + 0x15af]
add ecx, edx
add esi, edx
add ecx, esi
test eax, eax
je 0x40447c
add eax, 0x10
jmp 0x4043b0
mov eax, esi
mov edx, 0x80078071
add ebx, 0xffffea50
add edi, 0x15b0
mul edx
shr edx, 0xf
imul eax, edx, 0xfff1
mov edx, 0x80078071
sub esi, eax
mov eax, ecx
mul edx
shr edx, 0xf
imul eax, edx, 0xfff1
sub ecx, eax
cmp ebx, 0x15af
ja 0x40439c
test ebx, ebx
je 0x40438b
cmp ebx, 0xf
ja 0x4042cb
jmp 0x40435d
test ebx, ebx
je 0x4044e1
movzx eax, byte [edi]
inc edi
add esi, eax
add ecx, esi
dec ebx
jne 0x4044d6
lea edi, [esi - 0xfff1]
cmp esi, 0xfff0
mov edx, 0x80078071
mov eax, ecx
cmovbe edi, esi
mul edx
shr edx, 0xf
imul eax, edx, 0xfff1
sub ecx, eax
shl ecx, 0x10
or ecx, edi
jmp 0x404390
movzx eax, byte [edi]
mov edi, 0xfff0
lea edx, [esi + eax]
lea eax, [esi + eax - 0xfff1]
cmp edx, edi
cmovbe eax, edx
add ecx, eax
mov edx, ecx
shl edx, 0x10
cmp ecx, edi
lea ecx, [edx + 0xf0000]
cmovbe ecx, edx
or ecx, eax
jmp 0x404390