Function at 0x4188c0
Capabilities:
Encode data using xor

Disassembly:
push ecx
cmp dword [esp + 0xc], 0
mov ecx, dword [edx]
mov edx, dword [edx + 4]
push ebx
push ebp
push esi
push edi
je 0x4188d9
mov esi, eax
mov dword [esp + 0x1c], eax
jmp 0x4188e0
lea esi, [eax + 0x48]
mov dword [esp + 0x1c], esi
xor ecx, dword [esi]
add esi, 8
mov edi, 2
lea ebx, [ebx]
mov ebx, ecx
shr ebx, 0x10
movzx ebx, bl
mov ebx, dword [eax + ebx*4 + 0x490]
mov dword [esp + 0x10], edx
mov ebp, ecx
shr ebp, 0x18
add ebx, dword [eax + ebp*4 + 0x90]
mov edx, ecx
shr edx, 8
movzx ebp, dl
xor ebx, dword [eax + ebp*4 + 0x890]
mov edx, dword [esp + 0x10]
movzx ebp, cl
add ebx, dword [eax + ebp*4 + 0xc90]
mov dword [esp + 0x10], ecx
xor ebx, dword [esi - 4]
xor edx, ebx
mov ebx, edx
shr ebx, 0x10
movzx ebx, bl
mov ebx, dword [eax + ebx*4 + 0x490]
mov ebp, edx
shr ebp, 0x18
add ebx, dword [eax + ebp*4 + 0x90]
mov ecx, edx
shr ecx, 8
movzx ebp, cl
xor ebx, dword [eax + ebp*4 + 0x890]
mov ecx, dword [esp + 0x10]
movzx ebp, dl
add ebx, dword [eax + ebp*4 + 0xc90]
mov dword [esp + 0x10], edx
xor ebx, dword [esi]
xor ecx, ebx
mov ebx, ecx
shr ebx, 0x10
movzx ebx, bl
mov ebx, dword [eax + ebx*4 + 0x490]
mov ebp, ecx
shr ebp, 0x18
add ebx, dword [eax + ebp*4 + 0x90]
mov edx, ecx
shr edx, 8
movzx ebp, dl
xor ebx, dword [eax + ebp*4 + 0x890]
mov edx, dword [esp + 0x10]
movzx ebp, cl
add ebx, dword [eax + ebp*4 + 0xc90]
mov dword [esp + 0x10], ecx
xor ebx, dword [esi + 4]
xor edx, ebx
mov ebx, edx
shr ebx, 0x10
movzx ebx, bl
mov ebx, dword [eax + ebx*4 + 0x490]
mov ebp, edx
shr ebp, 0x18
add ebx, dword [eax + ebp*4 + 0x90]
mov ecx, edx
shr ecx, 8
movzx ebp, cl
xor ebx, dword [eax + ebp*4 + 0x890]
mov ecx, dword [esp + 0x10]
movzx ebp, dl
add ebx, dword [eax + ebp*4 + 0xc90]
mov dword [esp + 0x10], edx
xor ebx, dword [esi + 8]
xor ecx, ebx
mov ebx, ecx
shr ebx, 0x10
movzx ebx, bl
mov ebx, dword [eax + ebx*4 + 0x490]
mov ebp, ecx
shr ebp, 0x18
add ebx, dword [eax + ebp*4 + 0x90]
mov edx, ecx
shr edx, 8
movzx ebp, dl
xor ebx, dword [eax + ebp*4 + 0x890]
movzx ebp, cl
add ebx, dword [eax + ebp*4 + 0xc90]
mov edx, dword [esp + 0x10]
xor ebx, dword [esi + 0xc]
mov dword [esp + 0x10], ecx
xor edx, ebx
mov ebx, edx
shr ebx, 0x10
movzx ebx, bl
mov ebx, dword [eax + ebx*4 + 0x490]
mov ebp, edx
shr ebp, 0x18
add ebx, dword [eax + ebp*4 + 0x90]
mov ecx, edx
shr ecx, 8
movzx ebp, cl
xor ebx, dword [eax + ebp*4 + 0x890]
mov ecx, dword [esp + 0x10]
movzx ebp, dl
add ebx, dword [eax + ebp*4 + 0xc90]
mov dword [esp + 0x10], edx
xor ebx, dword [esi + 0x10]
add esi, 0x20
xor ecx, ebx
mov ebx, ecx
shr ebx, 0x10
movzx ebx, bl
mov ebx, dword [eax + ebx*4 + 0x490]
mov ebp, ecx
shr ebp, 0x18
add ebx, dword [eax + ebp*4 + 0x90]
mov edx, ecx
shr edx, 8
movzx ebp, dl
xor ebx, dword [eax + ebp*4 + 0x890]
mov edx, dword [esp + 0x10]
movzx ebp, cl
add ebx, dword [eax + ebp*4 + 0xc90]
mov dword [esp + 0x10], ecx
xor ebx, dword [esi - 0xc]
xor edx, ebx
mov ebx, edx
shr ebx, 0x10
movzx ebx, bl
mov ebx, dword [eax + ebx*4 + 0x490]
mov ebp, edx
shr ebp, 0x18
add ebx, dword [eax + ebp*4 + 0x90]
mov ecx, edx
shr ecx, 8
movzx ebp, cl
xor ebx, dword [eax + ebp*4 + 0x890]
mov ecx, dword [esp + 0x10]
movzx ebp, dl
add ebx, dword [eax + ebp*4 + 0xc90]
xor ebx, dword [esi - 8]
xor ecx, ebx
sub edi, 1
jne 0x4188f0
mov eax, dword [esp + 0x1c]
mov esi, dword [eax + 0x44]
mov eax, dword [esp + 0x18]
xor esi, edx
pop edi
mov dword [eax], esi
pop esi
pop ebp
mov dword [eax + 4], ecx
pop ebx
pop ecx
ret