Function at 0xa016c0
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
push ecx
push esi
push edi
mov esi, ecx
mov edi, eax
mov eax, dword [esi + 0x10]
test eax, eax
je 0xa016da
push eax
call fcn.00a825e4
add esp, 4
mov eax, dword [esi + 4]
add eax, eax
add eax, eax
push ebx
push eax
call fcn.00a82640
mov edx, dword [esi + 4]
add edx, edx
add edx, edx
add esp, 4
xor ecx, ecx
mov dword [esi + 0x10], eax
test edx, edx
jle 0xa01735
jmp 0xa01700
mov ebx, ecx
and ebx, 0x80000003
jns 0xa0170f
dec ebx
or ebx, 0xfffffffc
inc ebx
imul ebx, dword [esi + 4]
mov eax, ecx
cdq
and edx, 3
add eax, edx
mov dl, byte [ecx + edi]
sar eax, 2
add ebx, eax
mov eax, dword [esi + 0x10]
mov byte [ebx + eax], dl
mov eax, dword [esi + 4]
add eax, eax
inc ecx
add eax, eax
cmp ecx, eax
jl 0xa01700
xor edi, edi
xor eax, eax
cmp dword [esi + 4], eax
jle 0xa0175c
mov edi, edi
mov ecx, dword [esi + 4]
mov edx, dword [esi + 0xc]
imul ecx, edi
add ecx, eax
add ecx, dword [esi + 0x10]
lea edx, [edx + eax*4]
mov dl, byte [edx + edi]
xor byte [ecx], dl
inc eax
cmp eax, dword [esi + 4]
jl 0xa01740
inc edi
cmp edi, 4
jl 0xa01737
cmp dword [esi], 1
mov dword [ebp - 4], 1
jle 0xa01949
mov eax, dword [esi + 0x10]
movzx ecx, byte [eax]
mov edx, ecx
and ecx, 0xf
and edx, 0xfffffff0
movzx ecx, byte [edx + ecx + str.cw]
mov byte [eax], cl
movzx ecx, byte [eax + 1]
mov edx, ecx
and ecx, 0xf
and edx, 0xfffffff0
movzx ecx, byte [edx + ecx + str.cw]
mov byte [eax + 1], cl
movzx ecx, byte [eax + 2]
mov edx, ecx
and ecx, 0xf
and edx, 0xfffffff0
movzx ecx, byte [edx + ecx + str.cw]
mov byte [eax + 2], cl
movzx ecx, byte [eax + 3]
mov edx, ecx
and ecx, 0xf
and edx, 0xfffffff0
movzx ecx, byte [edx + ecx + str.cw]
mov byte [eax + 3], cl
mov eax, dword [esi + 4]
add eax, dword [esi + 0x10]
movzx ecx, byte [eax]
mov edx, ecx
and ecx, 0xf
and edx, 0xfffffff0
movzx ecx, byte [edx + ecx + str.cw]
mov byte [eax], cl
movzx ecx, byte [eax + 1]
mov edx, ecx
and ecx, 0xf
and edx, 0xfffffff0
movzx ecx, byte [edx + ecx + str.cw]
mov byte [eax + 1], cl
movzx ecx, byte [eax + 2]
mov edx, ecx
and ecx, 0xf
and edx, 0xfffffff0
movzx ecx, byte [edx + ecx + str.cw]
mov byte [eax + 2], cl
movzx ecx, byte [eax + 3]
mov edx, ecx
and ecx, 0xf
and edx, 0xfffffff0
movzx ecx, byte [edx + ecx + str.cw]
mov byte [eax + 3], cl
mov edx, dword [esi + 4]
mov eax, dword [esi + 0x10]
movzx ecx, byte [eax + edx*2]
lea eax, [eax + edx*2]
mov edx, ecx
and ecx, 0xf
and edx, 0xfffffff0
movzx ecx, byte [edx + ecx + str.cw]
mov byte [eax], cl
movzx ecx, byte [eax + 1]
mov edx, ecx
and ecx, 0xf
and edx, 0xfffffff0
movzx ecx, byte [edx + ecx + str.cw]
mov byte [eax + 1], cl
movzx ecx, byte [eax + 2]
mov edx, ecx
and ecx, 0xf
and edx, 0xfffffff0
movzx ecx, byte [edx + ecx + str.cw]
mov byte [eax + 2], cl
movzx ecx, byte [eax + 3]
mov edx, ecx
and edx, 0xfffffff0
and ecx, 0xf
movzx ecx, byte [edx + ecx + str.cw]
mov byte [eax + 3], cl
mov eax, dword [esi + 4]
lea eax, [eax + eax*2]
add eax, dword [esi + 0x10]
movzx ecx, byte [eax]
mov edx, ecx
and ecx, 0xf
and edx, 0xfffffff0
movzx ecx, byte [edx + ecx + str.cw]
mov byte [eax], cl
movzx ecx, byte [eax + 1]
mov edx, ecx
and ecx, 0xf
and edx, 0xfffffff0
movzx ecx, byte [edx + ecx + str.cw]
mov byte [eax + 1], cl
movzx ecx, byte [eax + 2]
mov edx, ecx
and ecx, 0xf
and edx, 0xfffffff0
movzx ecx, byte [edx + ecx + str.cw]
mov byte [eax + 2], cl
movzx ecx, byte [eax + 3]
mov edx, ecx
and edx, 0xfffffff0
and ecx, 0xf
movzx ecx, byte [edx + ecx + str.cw]
mov byte [eax + 3], cl
call fcn.00a013b0
call fcn.00a01460
xor edx, edx
xor ecx, ecx
cmp dword [esi + 4], ecx
jle 0xa01934
lea esp, [esp]
mov eax, dword [esi + 4]
mov ebx, dword [esi + 0xc]
mov edi, eax
imul eax, dword [ebp - 4]
imul edi, edx
add eax, ecx
add edi, ecx
add edi, dword [esi + 0x10]
lea eax, [ebx + eax*4]
mov al, byte [eax + edx]
xor byte [edi], al
inc ecx
cmp ecx, dword [esi + 4]
jl 0xa01910
inc edx
cmp edx, 4
jl 0xa01902
mov eax, dword [ebp - 4]
inc eax
mov dword [ebp - 4], eax
cmp eax, dword [esi]
jl 0xa01772
mov eax, dword [esi + 0x10]
movzx ecx, byte [eax]
mov edx, ecx
and ecx, 0xf
and edx, 0xfffffff0
movzx ecx, byte [edx + ecx + str.cw]
mov byte [eax], cl
movzx ecx, byte [eax + 1]
mov edx, ecx
and ecx, 0xf
and edx, 0xfffffff0
movzx ecx, byte [edx + ecx + str.cw]
mov byte [eax + 1], cl
movzx ecx, byte [eax + 2]
mov edx, ecx
and ecx, 0xf
and edx, 0xfffffff0
movzx ecx, byte [edx + ecx + str.cw]
mov byte [eax + 2], cl
movzx ecx, byte [eax + 3]
mov edx, ecx
and ecx, 0xf
and edx, 0xfffffff0
movzx ecx, byte [edx + ecx + str.cw]
mov byte [eax + 3], cl
mov eax, dword [esi + 4]
add eax, dword [esi + 0x10]
movzx ecx, byte [eax]
mov edx, ecx
and ecx, 0xf
and edx, 0xfffffff0
movzx ecx, byte [edx + ecx + str.cw]
mov byte [eax], cl
movzx ecx, byte [eax + 1]
mov edx, ecx
and ecx, 0xf
and edx, 0xfffffff0
movzx ecx, byte [edx + ecx + str.cw]
mov byte [eax + 1], cl
movzx ecx, byte [eax + 2]
mov edx, ecx
and ecx, 0xf
and edx, 0xfffffff0
movzx ecx, byte [edx + ecx + str.cw]
mov byte [eax + 2], cl
movzx ecx, byte [eax + 3]
mov edx, ecx
and ecx, 0xf
and edx, 0xfffffff0
movzx ecx, byte [edx + ecx + str.cw]
mov byte [eax + 3], cl
mov edx, dword [esi + 4]
mov eax, dword [esi + 0x10]
movzx ecx, byte [eax + edx*2]
lea eax, [eax + edx*2]
mov edx, ecx
and ecx, 0xf
and edx, 0xfffffff0
movzx ecx, byte [edx + ecx + str.cw]
mov byte [eax], cl
movzx ecx, byte [eax + 1]
mov edx, ecx
and ecx, 0xf
and edx, 0xfffffff0
movzx ecx, byte [edx + ecx + str.cw]
mov byte [eax + 1], cl
movzx ecx, byte [eax + 2]
mov edx, ecx
and ecx, 0xf
and edx, 0xfffffff0
movzx ecx, byte [edx + ecx + str.cw]
mov byte [eax + 2], cl
movzx ecx, byte [eax + 3]
mov edx, ecx
and edx, 0xfffffff0
and ecx, 0xf
movzx ecx, byte [edx + ecx + str.cw]
mov byte [eax + 3], cl
mov eax, dword [esi + 4]
lea eax, [eax + eax*2]
add eax, dword [esi + 0x10]
movzx ecx, byte [eax]
mov edx, ecx
and ecx, 0xf
and edx, 0xfffffff0
movzx ecx, byte [edx + ecx + str.cw]
mov byte [eax], cl
movzx ecx, byte [eax + 1]
mov edx, ecx
and ecx, 0xf
and edx, 0xfffffff0
movzx ecx, byte [edx + ecx + str.cw]
mov byte [eax + 1], cl
movzx ecx, byte [eax + 2]
mov edx, ecx
and ecx, 0xf
and edx, 0xfffffff0
movzx ecx, byte [edx + ecx + str.cw]
mov byte [eax + 2], cl
movzx ecx, byte [eax + 3]
mov edx, ecx
and edx, 0xfffffff0
and ecx, 0xf
movzx ecx, byte [edx + ecx + str.cw]
mov byte [eax + 3], cl
call fcn.00a013b0
mov edx, dword [esi]
mov dword [ebp - 4], edx
xor edx, edx
lea esp, [esp]
xor ecx, ecx
cmp dword [esi + 4], ecx
jle 0xa01b0b
mov eax, dword [esi + 4]
mov ebx, dword [esi + 0xc]
mov edi, eax
imul eax, dword [ebp - 4]
imul edi, edx
add eax, ecx
add edi, ecx
add edi, dword [esi + 0x10]
lea eax, [ebx + eax*4]
mov al, byte [eax + edx]
xor byte [edi], al
inc ecx
cmp ecx, dword [esi + 4]
jl 0xa01ae7
inc edx
cmp edx, 4
jl 0xa01ae0
mov edx, dword [esi + 4]
add edx, edx
add edx, edx
xor ecx, ecx
pop ebx
test edx, edx
jle 0xa01b58
nop
mov edi, ecx
and edi, 0x80000003
jns 0xa01b2f
dec edi
or edi, 0xfffffffc
inc edi
imul edi, dword [esi + 4]
mov eax, ecx
cdq
and edx, 3
add eax, edx
sar eax, 2
add edi, eax
mov eax, dword [esi + 0x10]
mov dl, byte [edi + eax]
mov eax, dword [ebp + 8]
mov byte [ecx + eax], dl
mov edx, dword [esi + 4]
add edx, edx
inc ecx
add edx, edx
cmp ecx, edx
jl 0xa01b20
pop edi
pop esi
mov esp, ebp
pop ebp
ret 4