Function at 0x44a629
Capabilities:
Encrypt data using rc4 ksa

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x40
mov eax, dword [ebp + 8]
movups xmm0, xmmword [eax + 0x1e]
push ebx
movups xmm1, xmmword [eax + 0xe]
movzx ebx, word [eax + 0xa]
push esi
mov esi, ecx
add ebx, eax
lea ecx, [eax + 0xe]
mov dword [ebp - 8], ebx
movups xmmword [ebp - 0x30], xmm0
push edi
movq xmm0, qword [ecx + 0x20]
movq qword [ebp - 0x20], xmm0
movaps xmm0, xmm1
psrldq xmm0, 4
movd edx, xmm0
movaps xmm0, xmm1
movups xmmword [ebp - 0x40], xmm1
mov dword [ebp - 0xc], ecx
psrldq xmm1, 0xc
movd eax, xmm1
psrldq xmm0, 8
movd ecx, xmm0
shr eax, 0x10
mov edi, eax
mov dword [esi + 8], edx
shr edi, 3
mov dword [esi + 0xc], ecx
mov dword [esi + 0x14], edi
test edx, edx
je 0x44abdd
test ecx, ecx
je 0x44abdd
cmp edi, 4
ja case.default.0x44a622
jmp dword [edi*4 + 0x44abe8]
mov eax, dword [ebp - 0x30]
mov dword [esi + 4], 2
mov dword [esi + 0x14], 4
sub eax, 0
je 0x44a65c
sub eax, 1
je 0x44a65c
push str.Dont_handle_this_kind_of_compressed_bitmap_yet
call fcn.004073b0
add esp, 4
xor al, al
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 4
lea eax, [edx*4]
mov dword [esi + 0x1c], 0
mov dword [esi + 0x18], eax
imul eax, ecx
mov dword [ebp + 8], eax
shl eax, 2
push eax
call fcn.004020a0
mov ecx, eax
add esp, 4
mov dword [ebp - 4], ecx
mov dword [esi + 0x10], ecx
test ecx, ecx
je 0x44abdd
cmp dword [esi + 0xc], 0
jge 0x44a6c8
push str.BMP_loader_does_not_support_top_down_bitmaps_yet
call fcn.004073b0
mov eax, dword [esi + 0x10]
add esp, 4
test eax, eax
je 0x44abdd
push eax
call fcn.004eecc3
add esp, 4
mov dword [esi + 0x10], 0
xor al, al
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 4
test edi, edi
jne 0x44a7d7
mov eax, dword [ebp - 0x20]
mov ecx, 2
test eax, eax
cmovne ecx, eax
mov eax, dword [ebp - 0x40]
add eax, dword [ebp - 0xc]
push ecx
push eax
mov ecx, esi
call fcn.0044acb0
mov eax, dword [esi + 0x10]
mov dword [ebp - 0xc], eax
mov eax, dword [esi + 8]
cdq
and edx, 7
lea edi, [edx + eax]
xor edx, edx
sar edi, 3
mov ecx, edi
and ecx, reloc.WSOCK32.dll_closesocket
jns 0x44a712
dec ecx
or ecx, 0xfffffffc
add ecx, 1
je 0x44a72a
mov ecx, edi
inc ecx
inc edx
mov eax, ecx
and eax, reloc.WSOCK32.dll_closesocket
jns 0x44a728
dec eax
or eax, 0xfffffffc
add eax, 1
jne 0x44a716
xor ecx, ecx
lea eax, [edx + edi]
mov dword [ebp - 0x10], eax
mov dword [ebp - 4], ecx
cmp dword [esi + 0xc], ecx
jle 0x44a7b8
lea edi, [ecx + 8]
nop dword [eax]
xor edx, edx
mov dword [ebp - 8], edx
cmp dword [esi + 8], edx
jle 0x44a7af
nop word [eax + eax]
mov eax, edx
cdq
idiv edi
mov edi, dword [esi + 0xc]
sub edi, ecx
mov ecx, edx
dec edi
imul edi, dword [ebp - 0x10]
add edi, eax
mov eax, 1
shl eax, cl
mov ecx, esi
test byte [edi + ebx], al
mov eax, 0
setne al
lea eax, [eax*4 + 0x28]
push dword [eax + esi]
lea eax, [ebp - 0x14]
push eax
call fcn.00449a80
mov ecx, dword [esi + 8]
imul ecx, dword [ebp - 4]
mov edx, dword [ebp - 8]
mov edi, dword [ebp - 0xc]
mov eax, dword [eax]
add ecx, edx
inc edx
mov dword [ebp - 8], edx
mov dword [edi + ecx*4], eax
mov edi, 8
mov ecx, dword [ebp - 4]
cmp edx, dword [esi + 8]
jl 0x44a750
inc ecx
mov dword [ebp - 4], ecx
cmp ecx, dword [esi + 0xc]
jl 0x44a740
push dword [ebp - 0xc]
mov ecx, esi
call fcn.00449730
mov ecx, esi
call fcn.00410450
cmp eax, 2
jne 0x44ab85
jmp 0x44ab68
cmp edi, 1
jne 0x44a926
mov eax, dword [ebp - 0x20]
mov ecx, 0x100
test eax, eax
cmovne ecx, eax
mov eax, dword [ebp - 0x40]
add eax, dword [ebp - 0xc]
push ecx
push eax
mov ecx, esi
call fcn.0044acb0
cmp dword [ebp - 0x30], edi
jne 0x44a86a
mov edi, dword [ebp - 0x40]
push edi
call fcn.004020a0
add esp, 4
mov dword [ebp - 0x10], eax
mov ecx, esi
push edi
mov edi, dword [ebp + 8]
push edi
push ebx
push dword [esi + 0x10]
call fcn.0044af90
test al, al
jne 0x44a85a
push str.Error_decompressing_RLE_bitmap
call fcn.004073b0
mov eax, dword [esi + 0x10]
add esp, 4
test eax, eax
je 0x44a848
push eax
call fcn.004eecc3
add esp, 4
mov dword [esi + 0x10], 0
pop edi
mov dword [esi + 4], 0
xor al, al
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 4
push dword [ebp - 0x10]
call fcn.004eecc3
add esp, 4
jmp 0x44ab88
mov ebx, dword [esi + 8]
xor edx, edx
mov eax, dword [esi + 0x10]
imul ebx, edi
mov dword [ebp - 0xc], eax
mov eax, ebx
and eax, reloc.WSOCK32.dll_closesocket
jns 0x44a888
dec eax
or eax, 0xfffffffc
add eax, 1
je 0x44a8a4
mov ecx, ebx
nop dword [eax]
inc ecx
inc edx
mov eax, ecx
and eax, reloc.WSOCK32.dll_closesocket
jns 0x44a8a2
dec eax
or eax, 0xfffffffc
add eax, 1
jne 0x44a890
lea eax, [edx + ebx]
mov ecx, esi
mov dword [ebp - 0x10], eax
call fcn.004496d0
xor ebx, ebx
cmp dword [esi + 0xc], ebx
jle 0x44a917
mov ecx, dword [esi + 8]
xor edi, edi
test ecx, ecx
jle 0x44a911
mov eax, dword [esi + 0xc]
mov edx, dword [ebp - 8]
sub eax, ebx
dec eax
imul eax, dword [ebp - 0x10]
add eax, edi
movzx edx, byte [eax + edx]
mov eax, ebx
imul eax, ecx
mov ecx, dword [ebp - 0xc]
add eax, edi
lea eax, [ecx + eax*4]
mov dword [ebp - 4], eax
cmp edx, dword [esi + 0x42c]
jne 0x44a900
push 0
push 0
push 0
push 0
lea ecx, [ebp - 0x14]
call fcn.00449610
mov eax, dword [eax]
jmp 0x44a904
mov eax, dword [esi + edx*4 + 0x28]
mov ecx, dword [ebp - 4]
inc edi
mov dword [ecx], eax
mov ecx, dword [esi + 8]
cmp edi, ecx
jl 0x44a8c1
inc ebx
cmp ebx, dword [esi + 0xc]
jl 0x44a8b8
push dword [ebp - 0xc]
mov ecx, esi
call fcn.00449730
jmp 0x44ab85
cmp edi, 2
jne 0x44a9ee
mov ebx, dword [esi + 8]
imul ebx, edi
xor edi, edi
mov eax, ebx
and eax, reloc.WSOCK32.dll_closesocket
jns 0x44a947
dec eax
or eax, 0xfffffffc
add eax, 1
je 0x44a964
mov edx, ebx
nop dword [eax + eax]
inc edx
inc edi
mov eax, edx
and eax, reloc.WSOCK32.dll_closesocket
jns 0x44a962
dec eax
or eax, 0xfffffffc
add eax, 1
jne 0x44a950
mov eax, dword [esi + 0xc]
lea edx, [edi + ebx]
xor ebx, ebx
mov dword [ebp - 0xc], edx
test eax, eax
jle 0x44ab60
xor edi, edi
cmp dword [esi + 8], edi
jle 0x44a9e3
nop
mov eax, dword [esi + 0xc]
sub eax, ebx
dec eax
imul eax, edx
push 0xff
add eax, dword [ebp - 8]
movzx ecx, word [eax + edi*2]
mov al, cl
shl al, 3
movzx eax, al
push eax
mov eax, ecx
shr cx, 0xa
shr eax, 5
shl al, 3
movzx eax, al
shl cl, 3
push eax
movzx eax, cl
lea ecx, [ebp - 0x14]
push eax
call fcn.00449610
mov ecx, esi
push dword [eax]
lea eax, [ebp - 0x10]
push eax
call fcn.00449a80
mov ecx, dword [esi + 8]
mov edx, dword [ebp - 4]
imul ecx, ebx
mov eax, dword [eax]
add ecx, edi
inc edi
mov dword [edx + ecx*4], eax
mov edx, dword [ebp - 0xc]
cmp edi, dword [esi + 8]
jl 0x44a980
inc ebx
cmp ebx, dword [esi + 0xc]
jl 0x44a977
jmp 0x44ab5d
cmp edi, 3
jne 0x44aab3
mov ebx, dword [esi + 8]
imul ebx, edi
xor edi, edi
mov eax, ebx
and eax, reloc.WSOCK32.dll_closesocket
jns 0x44aa0f
dec eax
or eax, 0xfffffffc
add eax, 1
je 0x44aa27
mov edx, ebx
inc edx
inc edi
mov eax, edx
and eax, reloc.WSOCK32.dll_closesocket
jns 0x44aa25
dec eax
or eax, 0xfffffffc
add eax, 1
jne 0x44aa13
mov eax, dword [esi + 0xc]
lea edx, [edi + ebx]
xor ebx, ebx
mov dword [ebp - 0x10], edx
test eax, eax
jle 0x44ab60
nop word [eax + eax]
xor edi, edi
cmp dword [esi + 8], edi
jle 0x44aaa8
xor eax, eax
mov dword [ebp - 0xc], eax
nop dword [eax]
mov ecx, dword [esi + 0xc]
sub ecx, ebx
dec ecx
imul ecx, edx
push 0xff
add ecx, eax
add ecx, dword [ebp - 8]
movzx eax, byte [ecx]
push eax
movzx eax, byte [ecx + 1]
push eax
movzx eax, byte [ecx + 2]
lea ecx, [ebp - 0x14]
push eax
call fcn.00449610
mov ecx, esi
push dword [eax]
lea eax, [ebp - 0x18]
push eax
call fcn.00449a80
mov ecx, dword [esi + 8]
mov edx, dword [ebp - 4]
imul ecx, ebx
mov eax, dword [eax]
add ecx, edi
inc edi
mov dword [edx + ecx*4], eax
mov eax, dword [ebp - 0xc]
mov edx, dword [ebp - 0x10]
add eax, 3
mov dword [ebp - 0xc], eax
cmp edi, dword [esi + 8]
jl 0x44aa50
inc ebx
cmp ebx, dword [esi + 0xc]
jl 0x44aa40
jmp 0x44ab5d
cmp edi, 4
jne 0x44ab85
mov ebx, dword [esi + 8]
imul ebx, edi
xor edi, edi
mov eax, ebx
and eax, reloc.WSOCK32.dll_closesocket
jns 0x44aad4
dec eax
or eax, 0xfffffffc
add eax, 1
je 0x44aaec
mov edx, ebx
inc edx
inc edi
mov eax, edx
and eax, reloc.WSOCK32.dll_closesocket
jns 0x44aaea
dec eax
or eax, 0xfffffffc
add eax, 1
jne 0x44aad8
mov eax, dword [esi + 0xc]
lea edx, [edi + ebx]
xor ebx, ebx
mov dword [ebp - 0x10], edx
test eax, eax
jle 0x44ab60
nop dword [eax + eax]
xor edi, edi
cmp dword [esi + 8], edi
jle 0x44ab57
mov eax, dword [esi + 0xc]
sub eax, ebx
dec eax
imul eax, edx
add eax, dword [ebp - 8]
lea ecx, [eax + edi*4]
movzx eax, byte [ecx + 3]
push eax
movzx eax, byte [ecx]
push eax
movzx eax, byte [ecx + 1]
push eax
movzx eax, byte [ecx + 2]
lea ecx, [ebp - 0x18]
push eax
call fcn.00449610
mov ecx, esi
push dword [eax]
lea eax, [ebp - 0x14]
push eax
call fcn.00449a80
mov ecx, dword [esi + 8]
mov edx, dword [ebp - 4]
imul ecx, ebx
mov eax, dword [eax]
add ecx, edi
inc edi
mov dword [edx + ecx*4], eax
mov edx, dword [ebp - 0x10]
cmp edi, dword [esi + 8]
jl 0x44ab07
inc ebx
cmp ebx, dword [esi + 0xc]
jl 0x44ab00
mov ecx, dword [ebp - 4]
push ecx
mov ecx, esi
call fcn.00449730
mov ecx, esi
call fcn.004499d0
test al, al
je 0x44ab85
mov ecx, esi
call fcn.00449ad0
test al, al
jne 0x44ab85
mov ecx, esi
call fcn.0044aee0
mov edi, dword [ebp + 8]
cmp dword [esi + 0x14], 4
jne 0x44abad
mov ecx, esi
call fcn.004499d0
test al, al
je 0x44abad
mov ecx, esi
call fcn.00449ad0
test al, al
jne 0x44abad
push 1
mov ecx, esi
call fcn.0044b150
mov ecx, esi
call fcn.00406d90
test eax, eax
je 0x44abbc
mov byte [esi + 0x20], 1
push edi
mov ecx, esi
call fcn.00449b50
pop edi
pop esi
mov al, 1
pop ebx
mov esp, ebp
pop ebp
ret 4
push eax
push str.Dont_handle__d_bit_bmps_yet
call fcn.004073b0
add esp, 8
pop edi
pop esi
xor al, al
pop ebx
mov esp, ebp
pop ebp
ret 4