Function at 0x10004090
Capabilities:
Encode data using xor

Disassembly:
push ebx
mov ebx, dword [esp + 8]
test ebx, ebx
jne 0x1000409e
lea eax, [ebx + 0x57]
pop ebx
ret
push esi
mov esi, dword [esp + 0x10]
test esi, esi
jne 0x100040ad
lea eax, [esi + 0x57]
pop esi
pop ebx
ret
push ebp
mov ebp, dword [esp + 0x18]
cmp ebp, 8
ja 0x100040c0
pop ebp
pop esi
mov eax, 0x57
pop ebx
ret
mov dword [ebx], 0
lea eax, [ebp - 4]
mov edx, dword [esi]
lea ecx, [esi + 4]
xor edx, 0xe9b35
mov dword [esp + 0x10], eax
push edi
cmp eax, 4
jb 0x1000410e
mov ebp, 4
lea eax, [esi + 4]
mov edi, 0x8790ea3
sub ebp, eax
lea ecx, [ecx]
xor edx, edi
lea ecx, [ecx + 4]
xor dword [ecx - 4], edx
lea eax, [ecx + ebp]
add edi, 0x3a6cd4
cmp eax, dword [esp + 0x14]
jbe 0x100040f0
mov ebp, dword [esp + 0x1c]
lea ecx, [esi + 4]
mov eax, dword [ecx]
lea edi, [ebp - 8]
xor ecx, ecx
mov dword [esp + 0x14], eax
xor edx, edx
jmp 0x10004120
mov al, byte [edx + esi + 8]
test al, al
je 0x1000412c
add ecx, ecx
jmp 0x1000412d
inc ecx
movzx eax, al
inc edx
add ecx, eax
cmp edx, edi
jbe 0x10004120
or eax, 0xffffffff
test ecx, ecx
cmove ecx, eax
cmp dword [esp + 0x14], ecx
je 0x1000414f
pop edi
pop ebp
pop esi
mov eax, 0xd
pop ebx
ret
mov edx, 8
cmp ebp, 0xa
jbe 0x10004340
lea ecx, [ecx]
mov cl, byte [edx + esi + 1]
lea edx, [edx + 2]
mov al, byte [edx + esi - 2]
movzx edi, cl
lea ebp, [edi + edx]
cmp ebp, dword [esp + 0x1c]
ja 0x10004340
test al, al
jne 0x10004187
test cl, cl
je 0x10004340
movzx eax, al
dec eax
cmp eax, 0xd
ja case.default.0x10004194
jmp dword [eax*4 + 0x10004348]
test cl, cl
je case.default.0x10004194
cmp cl, 0x1f
ja case.default.0x10004194
lea eax, [edx + esi]
push edi
push eax
lea eax, [ebx + 8]
push eax
call fcn.10005ad0
mov byte [edi + ebx + 8], 0
jmp 0x1000432e
cmp cl, 4
jne case.default.0x10004194
mov eax, dword [edx + esi]
mov dword [ebx], eax
jmp case.default.0x10004194
cmp cl, 4
jne case.default.0x10004194
mov eax, dword [edx + esi]
mov dword [ebx + 4], eax
jmp case.default.0x10004194
test cl, cl
je case.default.0x10004194
cmp cl, 0x1f
ja case.default.0x10004194
lea eax, [edx + esi]
push edi
push eax
lea eax, [ebx + 0x28]
push eax
call fcn.10005ad0
mov byte [edi + ebx + 0x28], 0
jmp 0x1000432e
cmp cl, 4
jne case.default.0x10004194
mov eax, dword [edx + esi]
mov dword [ebx + 0x48], eax
jmp case.default.0x10004194
cmp cl, 2
jne case.default.0x10004194
mov ax, word [edx + esi]
mov word [ebx + 0x50], ax
jmp case.default.0x10004194
cmp cl, 4
jne case.default.0x10004194
mov eax, dword [edx + esi]
mov dword [ebx + 0x4c], eax
jmp case.default.0x10004194
cmp cl, 2
jne case.default.0x10004194
mov ax, word [edx + esi]
mov word [ebx + 0x52], ax
jmp case.default.0x10004194
cmp cl, 4
jne case.default.0x10004194
mov eax, dword [edx + esi]
mov dword [ebx + 0x54], eax
jmp case.default.0x10004194
cmp cl, 4
jne case.default.0x10004194
mov eax, dword [edx + esi]
mov dword [ebx + 0x58], eax
jmp case.default.0x10004194
test cl, cl
je case.default.0x10004194
cmp cl, 0x3e
ja case.default.0x10004194
lea eax, [edx + esi]
push edi
push eax
lea eax, [ebx + 0x5c]
push eax
call fcn.10005ad0
shr edi, 1
add esp, 0xc
xor eax, eax
mov word [ebx + edi*2 + 0x5c], ax
jmp case.default.0x10004194
test cl, cl
je case.default.0x10004194
cmp cl, 0x3e
ja case.default.0x10004194
lea eax, [edx + esi]
push edi
push eax
lea eax, [ebx + 0x9c]
push eax
call fcn.10005ad0
shr edi, 1
add esp, 0xc
xor eax, eax
mov word [ebx + edi*2 + 0x9c], ax
jmp case.default.0x10004194
test cl, cl
je case.default.0x10004194
cmp cl, 0x2f
ja case.default.0x10004194
lea eax, [edx + esi]
push edi
push eax
lea eax, [ebx + 0xdc]
push eax
call fcn.10005ad0
mov byte [edi + ebx + 0xdc], 0
jmp 0x1000432e
test cl, cl
je case.default.0x10004194
cmp cl, 0x2f
ja case.default.0x10004194
lea eax, [edx + esi]
push edi
push eax
lea eax, [ebx + 0x10c]
push eax
call fcn.10005ad0
mov byte [edi + ebx + 0x10c], 0
add esp, 0xc
mov edx, ebp
lea ecx, [edx + 2]
cmp ecx, dword [esp + 0x1c]
jb 0x10004160
pop edi
pop ebp
pop esi
xor eax, eax
pop ebx
ret