Function at 0x402620
Capabilities:
Encrypt data using rc4 prga

Disassembly:
sub esp, 0x5c
push ebx
push ebp
mov ebp, dword [esp + 0x70]
mov eax, 0x50
push esi
mov esi, dword [esp + 0x6c]
mov word [esp + 0x14], ax
mov eax, 4
push edi
push dword [esp + 0x84]
mov word [esp + 0x14], ax
xor eax, eax
mov word [esi + 2], ax
call sym.test_usbprog.exe__sys_error_none_4
mov cl, byte [esp + 0x80]
mov eax, dword [esp + 0x74]
and cl, 4
mov ebx, eax
mov byte [esp + 0x70], cl
jne 0x402672
cdq
mov ebx, eax
xor ebx, edx
sub ebx, edx
mov edi, ebx
shr ebx, 1
mov eax, ebx
and edi, 1
cdq
idiv ebp
mov ecx, eax
add eax, eax
imul ecx, ebp
sub ebx, ecx
lea ecx, [edi + ebx*2]
mov ebx, ebp
mov edx, ecx
lea edi, [eax + 1]
sub edx, ebx
mov ebp, 1
cmp ecx, ebx
mov word [esp + 0x1a], bp
cmovl edx, ecx
cmovl edi, eax
cmp edx, 9
jg 0x4026af
add dl, 0x30
jmp 0x4026b2
add dl, 0x37
mov byte [esp + 0x1c], dl
test edi, edi
je 0x402718
nop word [eax + eax]
mov eax, edi
mov ebp, dword [esp + 0x78]
cdq
idiv ebx
mov ebx, eax
mov ecx, ebx
imul ecx, ebp
sub edi, ecx
mov ecx, dword [esp + 0x1a]
inc ecx
mov edx, edi
movzx eax, cx
mov edi, ebx
mov word [esp + 0x1a], cx
cwde
cmp edx, 9
jg 0x4026ee
add dl, 0x30
jmp 0x4026f1
add dl, 0x37
test ebx, ebx
mov byte [esp + eax + 0x1b], dl
mov ebx, ebp
jne 0x4026c0
mov bp, word [esp + 0x1a]
mov edi, 1
test bp, bp
jne 0x40271d
mov ebp, edi
mov byte [esp + 0x1c], 0x30
mov word [esp + 0x1a], bp
jmp 0x40271d
mov edi, 1
xor eax, eax
mov byte [esp + 0x14], 0x20
mov word [esp + 0x12], ax
cmp byte [esp + 0x70], al
jne 0x402761
mov ecx, dword [esp + 0x74]
test ecx, ecx
jns 0x402744
mov ax, di
mov byte [esp + 0x14], 0x2d
mov word [esp + 0x12], ax
mov dl, byte [esp + 0x80]
jle 0x402768
test dl, 2
je 0x402768
mov ax, di
mov byte [esp + 0x14], 0x2b
mov word [esp + 0x12], ax
jmp 0x402768
mov dl, byte [esp + 0x80]
mov bx, word [esp + 0x7c]
test bx, bx
je 0x40283f
cwde
movsx edi, bx
sub edi, eax
movsx eax, bp
sub edi, eax
jns 0x4027dd
mov edi, dword [esp + 0x84]
push edi
push 0xd
push 0xfffffffffffffffe
call sym.test_usbprog.exe__sys_stat_set_12
push edi
movsx eax, bx
push eax
call sym.test_usbprog.exe__sys_stat_parm_int_8
xor eax, eax
mov word [esi + 2], ax
cmp ax, word [esi]
jge 0x402887
xor ecx, ecx
nop
cmp cx, bx
jge 0x402887
lea eax, [ecx + 1]
mov word [esi + 2], ax
movsx eax, cx
mov byte [eax + esi + 4], 0x2a
movzx eax, word [esi + 2]
mov ecx, eax
cmp ax, word [esi]
jl 0x4027b0
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x5c
ret 0x18
test dl, 1
je 0x402819
lea eax, [esp + 0x10]
push eax
push esi
call sym.test_usbprog.exe__string_append_8
mov ecx, 1
cmp edi, ecx
jl 0x40284a
movzx eax, word [esi + 2]
mov edx, eax
cmp ax, word [esi]
jge 0x402887
inc eax
inc ecx
mov word [esi + 2], ax
movsx eax, dx
mov byte [eax + esi + 4], 0x30
cmp ecx, edi
jle 0x4027f6
jmp 0x40284a
mov ecx, 1
cmp edi, ecx
jl 0x40283f
movzx eax, word [esi + 2]
mov edx, eax
cmp ax, word [esi]
jge 0x402887
inc eax
inc ecx
mov word [esi + 2], ax
movsx eax, dx
mov byte [eax + esi + 4], 0x20
cmp ecx, edi
jle 0x402822
lea eax, [esp + 0x10]
push eax
push esi
call sym.test_usbprog.exe__string_append_8
movsx ebx, word [esi + 2]
movsx ecx, word [esi]
movsx edx, bp
add edx, ebx
movzx edi, cx
cmp ecx, edx
movzx eax, dx
cmovge edi, eax
inc ebx
movzx eax, di
movsx ecx, ax
mov word [esi + 2], ax
cmp ebx, ecx
jg 0x402887
movsx eax, bp
dec bp
mov al, byte [esp + eax + 0x1b]
mov byte [esi + ebx + 3], al
inc ebx
mov word [esp + 0x1a], bp
cmp ebx, ecx
jle 0x402870
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x5c
ret 0x18