Function at 0x431790
Capabilities:
Encode data using xor
Encrypt data using aes
Encrypt data using rc4 ksa
Reference aes constants

Disassembly:
mov eax, dword fs:[0]
push 0xffffffffffffffff
push 0x476eb6
push eax
mov dword fs:[0], esp
sub esp, 0xa0
push ebp
mov ebp, ecx
mov ecx, dword [esp + 0xb4]
test ecx, ecx
jne 0x4317ed
mov eax, dword [str.FileCrypt_ERROR:_No_Key_DataSpecified_]
push eax
lea ecx, [esp + 0x44]
call dword [sym.imp.MSVCP71.dll_public:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::constructor_char_const__]
push eax
lea ecx, [esp + 0x1c]
mov dword [esp + 0xb0], 0
call fcn.00431680
push 0x4a624c
lea ecx, [esp + 0x1c]
push ecx
call sub.MSVCR71.dll__CxxThrowException
mov eax, dword [esp + 0xb8]
push esi
mov esi, 1
cmp eax, esi
jge 0x43182f
mov edx, dword [str.FileCrypt_ERROR:_Key_Data_Length_should_be___0_]
push edx
lea ecx, [esp + 0x48]
call dword [sym.imp.MSVCP71.dll_public:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::constructor_char_const__]
push eax
lea ecx, [esp + 0x20]
mov dword [esp + 0xb4], esi
call fcn.00431680
push 0x4a624c
lea eax, [esp + 0x20]
push eax
call sub.MSVCR71.dll__CxxThrowException
push ebx
mov ebx, dword [esp + 0xc8]
cmp ebx, 0x10
je 0x431879
cmp ebx, 0x18
je 0x431879
cmp ebx, 0x20
je 0x431879
push str.Illegal_Key_Length_
lea ecx, [esp + 0x4c]
call dword [sym.imp.MSVCP71.dll_public:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::constructor_char_const__]
push eax
lea ecx, [esp + 0x24]
mov dword [esp + 0xb8], 2
call fcn.00431680
push 0x4a624c
lea ecx, [esp + 0x24]
push ecx
call sub.MSVCR71.dll__CxxThrowException
push edi
mov edi, dword [esp + 0xd0]
cmp edi, 0x10
je 0x4318c5
cmp edi, 0x18
je 0x4318c5
cmp edi, 0x20
je 0x4318c5
mov edx, dword [str.Illegal_Block_Size_]
push edx
lea ecx, [esp + 0x50]
call dword [sym.imp.MSVCP71.dll_public:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::constructor_char_const__]
push eax
lea ecx, [esp + 0x28]
mov dword [esp + 0xbc], 3
call fcn.00431680
push 0x4a624c
lea eax, [esp + 0x28]
push eax
call sub.MSVCR71.dll__CxxThrowException
mov edx, dword [esp + 0xd4]
test edx, edx
jl 0x431d43
cmp edx, 2
jg 0x431d43
mov eax, dword [esp + 0xd8]
test eax, eax
jl 0x431d09
cmp eax, 2
jg 0x431d09
mov dword [ebp + 0x10], edx
xor esi, esi
xor edx, edx
test ebx, ebx
mov dword [ebp + 0x14], eax
jle 0x43191a
mov al, byte [edx + ecx]
mov byte [esp + esi + 0x68], al
lea eax, [edx + 1]
cdq
idiv dword [esp + 0xc4]
inc esi
cmp esi, ebx
jl 0x431903
mov esi, dword [esp + 0xc8]
mov ecx, edi
mov edx, ecx
shr ecx, 2
mov dword [ebp + 8], edi
lea eax, [ebp + 0x3dc]
mov edi, eax
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov ecx, dword [ebp + 8]
mov esi, eax
mov eax, ecx
shr ecx, 2
lea edi, [ebp + 0x3fc]
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov ecx, ebx
mov edx, ecx
shr ecx, 2
mov dword [ebp + 0xc], ebx
lea esi, [esp + 0x68]
lea edi, [ebp + 0x18]
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov eax, dword [ebp + 0xc]
cmp eax, 0x10
je 0x431999
cmp eax, 0x18
je 0x431988
mov dword [ebp + 0x3d8], 0xe
jmp 0x4319bc
mov ecx, dword [ebp + 8]
xor eax, eax
cmp ecx, 0x20
sete al
lea eax, [eax + eax + 0xc]
jmp 0x4319b6
mov eax, dword [ebp + 8]
cmp eax, 0x10
jne 0x4319a8
mov eax, 0xa
jmp 0x4319b6
xor ecx, ecx
cmp eax, 0x18
setne cl
lea ecx, [ecx + ecx + 0xc]
mov eax, ecx
mov dword [ebp + 0x3d8], eax
mov eax, dword [ebp + 8]
cdq
and edx, 3
add eax, edx
mov ebx, eax
mov eax, dword [ebp + 0x3d8]
sar ebx, 2
xor edx, edx
test eax, eax
mov dword [esp + 0x20], ebx
jl 0x4319fa
lea esi, [ebp + 0x38]
lea ecx, [ecx]
test ebx, ebx
jle 0x4319ec
mov ecx, ebx
xor eax, eax
mov edi, esi
rep stosd dword es:[edi], eax
mov eax, dword [ebp + 0x3d8]
inc edx
add esi, 0x20
cmp edx, eax
jle 0x4319e0
mov eax, dword [ebp + 0x3d8]
xor edx, edx
test eax, eax
jl 0x431a2a
lea esi, [ebp + 0x1f8]
lea esp, [esp]
test ebx, ebx
jle 0x431a1c
mov ecx, ebx
xor eax, eax
mov edi, esi
rep stosd dword es:[edi], eax
mov eax, dword [ebp + 0x3d8]
inc edx
add esi, 0x20
cmp edx, eax
jle 0x431a10
mov eax, dword [ebp + 0x3d8]
inc eax
imul eax, ebx
mov dword [esp + 0x18], eax
mov eax, dword [ebp + 0xc]
cdq
and edx, 3
add eax, edx
mov esi, eax
sar esi, 2
test esi, esi
lea ecx, [ebp + 0x41c]
lea eax, [esp + 0x68]
jle 0x431a80
mov edi, esi
movzx edx, byte [eax]
shl edx, 0x18
mov dword [ecx], edx
movzx edx, byte [eax + 1]
inc eax
shl edx, 0x10
or dword [ecx], edx
xor edx, edx
mov dh, byte [eax + 1]
inc eax
add ecx, 4
or dword [ecx - 4], edx
movzx edx, byte [eax + 1]
or dword [ecx - 4], edx
inc eax
inc eax
dec edi
jne 0x431a56
xor edi, edi
test esi, esi
mov dword [esp + 0x1c], edi
jle 0x431ad4
lea ecx, [ebp + 0x41c]
mov dword [esp + 0x14], ecx
cmp edi, dword [esp + 0x18]
jge 0x431ad0
mov eax, edi
cdq
idiv ebx
mov ecx, dword [ecx]
lea ebx, [edx + eax*8]
mov dword [ebp + ebx*4 + 0x38], ecx
mov ecx, dword [ebp + 0x3d8]
mov ebx, dword [esp + 0x20]
sub ecx, eax
lea edx, [edx + ecx*8]
mov ecx, dword [esp + 0x14]
mov eax, dword [ecx]
inc edi
add ecx, 4
cmp edi, esi
mov dword [ebp + edx*4 + 0x1f8], eax
mov dword [esp + 0x14], ecx
jl 0x431a94
mov dword [esp + 0x1c], edi
cmp edi, dword [esp + 0x18]
jge 0x431c63
mov dword [esp + 0x14], 0x4873c0
jmp 0x431af0
mov eax, dword [ebp + esi*4 + 0x418]
mov ecx, eax
shr ecx, 0x10
movzx ecx, cl
movsx edx, byte [ecx + str.cw]
mov ecx, dword [esp + 0x14]
movsx ecx, byte [ecx]
xor edx, ecx
movzx ecx, ah
movzx ecx, byte [ecx + str.cw]
mov dword [esp + 0x10], eax
shl edx, 8
xor edx, ecx
mov ecx, dword [esp + 0x10]
and eax, 0xff
movzx eax, byte [eax + str.cw]
shl edx, 8
xor edx, eax
shr ecx, 0x18
movzx eax, byte [ecx + str.cw]
mov ecx, dword [esp + 0x14]
shl edx, 8
xor edx, eax
mov eax, dword [ebp + 0x41c]
xor eax, edx
inc ecx
cmp esi, 8
mov dword [ebp + 0x41c], eax
mov dword [esp + 0x14], ecx
je 0x431b84
cmp esi, 1
jle 0x431c01
lea eax, [ebp + 0x420]
lea ecx, [esi - 1]
mov edx, dword [eax - 4]
xor dword [eax], edx
add eax, 4
dec ecx
jne 0x431b74
jmp 0x431c01
lea eax, [ebp + 0x420]
mov ecx, 3
nop
mov edx, dword [eax - 4]
xor dword [eax], edx
add eax, 4
dec ecx
jne 0x431b90
mov eax, dword [ebp + 0x428]
mov ecx, eax
shr ecx, 0x18
movsx edx, byte [ecx + str.cw]
mov ecx, eax
shr ecx, 0x10
movzx ecx, cl
movzx ecx, byte [ecx + str.cw]
shl edx, 8
xor edx, ecx
movzx ecx, ah
movzx ecx, byte [ecx + str.cw]
mov dword [esp + 0x10], eax
shl edx, 8
and eax, 0xff
movzx eax, byte [eax + str.cw]
xor edx, ecx
shl edx, 8
xor edx, eax
xor dword [ebp + 0x42c], edx
lea eax, [ebp + 0x430]
mov ecx, 3
mov edx, dword [eax - 4]
xor dword [eax], edx
add eax, 4
dec ecx
jne 0x431bf6
test esi, esi
mov dword [esp + 0x10], 0
jle 0x431c59
lea ecx, [ebp + 0x41c]
cmp edi, dword [esp + 0x18]
jge 0x431c63
mov eax, edi
cdq
idiv ebx
mov ebx, dword [ecx]
add ecx, 4
lea edi, [edx + eax*8]
mov dword [ebp + edi*4 + 0x38], ebx
mov edi, dword [ebp + 0x3d8]
mov ebx, dword [esp + 0x20]
sub edi, eax
lea eax, [edx + edi*8]
mov edx, dword [ecx - 4]
mov edi, dword [esp + 0x1c]
mov dword [ebp + eax*4 + 0x1f8], edx
mov eax, dword [esp + 0x10]
inc eax
inc edi
cmp eax, esi
mov dword [esp + 0x10], eax
mov dword [esp + 0x1c], edi
jl 0x431c13
cmp edi, dword [esp + 0x18]
jl 0x431af0
mov ecx, dword [ebp + 0x3d8]
mov eax, 1
cmp ecx, eax
mov dword [esp + 0x14], eax
jle 0x431cea
lea ecx, [ebp + 0x218]
mov dword [esp + 0x18], ecx
test ebx, ebx
jle 0x431ccc
mov edx, ebx
jmp 0x431c90
mov eax, dword [ecx]
mov dword [esp + 0x10], eax
movzx edi, byte [esp + 0x12]
mov esi, eax
shr esi, 0x18
mov esi, dword [esi*4 + 0x4863c0]
xor esi, dword [edi*4 + 0x4867c0]
movzx edi, ah
xor esi, dword [edi*4 + 0x486bc0]
and eax, 0xff
xor esi, dword [eax*4 + 0x486fc0]
mov dword [ecx], esi
add ecx, 4
dec edx
jne 0x431c90
mov eax, dword [esp + 0x14]
mov ecx, dword [esp + 0x18]
mov edx, dword [ebp + 0x3d8]
inc eax
add ecx, 0x20
cmp eax, edx
mov dword [esp + 0x14], eax
mov dword [esp + 0x18], ecx
jl 0x431c80
mov ecx, dword [esp + 0xb0]
pop edi
pop ebx
mov byte [ebp + 4], 1
pop esi
pop ebp
mov dword fs:[0], ecx
add esp, 0xac
ret 0x1c
mov eax, dword [str.FileCrypt_ERROR:_Illegal_Padding_Mode_]
push eax
lea ecx, [esp + 0x6c]
call dword [sym.imp.MSVCP71.dll_public:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::constructor_char_const__]
push eax
lea ecx, [esp + 0x8c]
mov dword [esp + 0xbc], 5
call fcn.00431680
push 0x4a624c
lea ecx, [esp + 0x8c]
push ecx
call sub.MSVCR71.dll__CxxThrowException
mov edx, dword [str.FileCrypt_ERROR:_Illegal_Operation_Mode_]
push edx
lea ecx, [esp + 0x50]
call dword [sym.imp.MSVCP71.dll_public:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::constructor_char_const__]
push eax
lea ecx, [esp + 0x28]
mov dword [esp + 0xbc], 4
call fcn.00431680
push 0x4a624c
lea eax, [esp + 0x28]
push eax
call sub.MSVCR71.dll__CxxThrowException
int3