Function at 0x2998590
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
and esp, 0xfffffff8
sub esp, 0xb0
mov ebx, dword [ebp + 0xc]
movaps xmm0, xmmword [0x29bdd90]
movups xmmword [esp + 0x30], xmm0
movaps xmm0, xmmword [0x29bdda0]
movups xmmword [esp + 0x40], xmm0
movaps xmm0, xmmword [0x29bddb0]
movups xmmword [esp + 0x50], xmm0
mov dword [esp + 0x60], 0x9b489523
lea eax, [esp + 0x64]
mov word [esp + 0x64], 0x999a
mov dword [esp + 0x66], 0
mov byte [esp + 0x6a], 0
mov dword [esp + 0x14], 0
mov ecx, dword [esp + 0x14]
cmp ecx, 0x3a
ja 0x2998641
nop word [eax + eax]
mov ecx, dword [esp + 0x14]
mov edx, dword [esp + 0x14]
movzx edx, byte [esp + edx + 0x30]
lea esi, [ecx + 0xc5]
and esi, edx
add ecx, edx
add esi, esi
sub ecx, esi
add ecx, 0x5c11a1c5
mov dword [esp + 0x74], ecx
mov ecx, dword [esp + 0x74]
add cl, 0x9d
mov edx, dword [esp + 0x14]
mov byte [esp + edx + 0x30], cl
inc dword [esp + 0x14]
mov ecx, dword [esp + 0x14]
cmp ecx, 0x3b
jb 0x2998600
lea edi, [esp + 0x74]
lea edx, [esp + 0x30]
mov ecx, 0xd
xchg esi, edx
rep movsd dword es:[edi], dword [esi]
xchg esi, edx
lea edi, [esp + 0xa8]
mov ecx, 1
xchg esi, eax
rep movsw word es:[edi], word [esi]
xchg esi, eax
mov esi, dword [ebx + 4]
mov eax, 0xfffffffe
nop dword [eax]
cmp word [esi + eax + 2], 0
lea eax, [eax + 2]
jne 0x2998670
mov ecx, dword [ebp + 0x10]
mov edi, dword [ecx + 4]
mov ecx, 0xfffffffe
nop word cs:[eax + eax]
cmp word [edi + ecx + 2], 0
lea ecx, [ecx + 2]
jne 0x2998690
sar eax, 1
sar ecx, 1
lea edx, [eax + ecx]
add eax, ecx
add eax, 0x1b
lea ecx, [edx + edx]
add ecx, 0x36
test eax, eax
mov eax, 0xffffffff
cmovns eax, ecx
push eax
call fcn.02989550
add esp, 4
movzx ecx, word [esi]
mov dword [esp + 0xc], eax
test cx, cx
je 0x29986f1
add esi, 2
mov eax, dword [esp + 0xc]
nop word cs:[eax + eax]
mov word [eax], cx
add eax, 2
movzx ecx, word [esi]
add esi, 2
test cx, cx
jne 0x29986e0
mov word [eax], 0
movzx ecx, word [esp + 0x74]
test cx, cx
je 0x2998721
lea edx, [esp + 0x76]
nop word cs:[eax + eax]
mov word [eax], cx
add eax, 2
movzx ecx, word [edx]
add edx, 2
test cx, cx
jne 0x2998710
mov word [eax], 0
movzx ecx, word [edi]
test cx, cx
je 0x2998751
add edi, 2
nop word cs:[eax + eax]
mov word [eax], cx
add eax, 2
movzx ecx, word [edi]
add edi, 2
test cx, cx
jne 0x2998740
mov word [eax], 0
movaps xmm0, xmmword [0x29bddc0]
movups xmmword [esp + 0x30], xmm0
movsd xmm0, qword [0x29bddd0]
movsd qword [esp + 0x40], xmm0
lea eax, [esp + 0x48]
mov word [esp + 0x48], 0x8584
mov dword [esp + 0x4e], 0
mov dword [esp + 0x4a], 0
mov dword [esp + 4], 0
mov ecx, dword [esp + 4]
cmp ecx, 0x21
ja 0x29987f1
nop dword [eax]
mov ecx, dword [esp + 4]
mov edx, dword [esp + 4]
movzx edx, byte [esp + edx + 0x30]
lea esi, [ecx + 0x6e]
mov edi, edx
not edi
or edi, esi
and esi, edx
add esi, edi
neg esi
add ecx, esi
add ecx, 0x675ad36d
mov dword [esp + 0x14], ecx
mov ecx, dword [esp + 0x14]
mov edx, ecx
xor edx, 0xfd
and ecx, 0x7d
lea ecx, [edx + ecx*2]
inc cl
mov edx, dword [esp + 4]
mov byte [esp + edx + 0x30], cl
inc dword [esp + 4]
mov ecx, dword [esp + 4]
cmp ecx, 0x22
jb 0x29987a0
lea edi, [esp + 0x14]
lea edx, [esp + 0x30]
mov ecx, 6
xchg esi, edx
rep movsd dword es:[edi], dword [esi]
xchg esi, edx
lea edi, [esp + 0x2c]
mov ecx, 1
xchg esi, eax
rep movsw word es:[edi], word [esi]
xchg esi, eax
mov edi, dword [ebx]
mov eax, 0xfffffffe
nop dword [eax]
cmp word [edi + eax + 2], 0
lea eax, [eax + 2]
jne 0x2998820
sar eax, 1
mov esi, dword [ebx + 8]
mov ecx, 0xfffffffe
nop word cs:[eax + eax]
cmp word [esi + ecx + 2], 0
lea ecx, [ecx + 2]
jne 0x2998840
sar ecx, 1
lea edx, [eax + ecx]
add ecx, eax
inc ecx
lea eax, [edx + edx]
add eax, 2
xor ecx, 0xd
mov edx, dword [ebp + 0x10]
mov ebx, dword [edx]
mov edx, 0xfffffffe
nop word cs:[eax + eax]
cmp word [ebx + edx + 2], 0
lea edx, [edx + 2]
jne 0x2998870
and eax, 0x1a
add eax, ecx
sar edx, 1
add edx, eax
lea eax, [edx + edx]
test edx, edx
mov ecx, 0xffffffff
cmovns ecx, eax
push ecx
call fcn.02989550
add esp, 4
movzx ecx, word [edi]
mov dword [esp + 0x10], eax
test cx, cx
je 0x29988c1
add edi, 2
mov eax, dword [esp + 0x10]
nop dword [eax]
mov word [eax], cx
add eax, 2
movzx ecx, word [edi]
add edi, 2
test cx, cx
jne 0x29988b0
mov word [eax], 0x2f
add eax, 2
movzx ecx, word [esi]
test cx, cx
je 0x29988f1
add esi, 2
nop word cs:[eax + eax]
mov word [eax], cx
add eax, 2
movzx ecx, word [esi]
add esi, 2
test cx, cx
jne 0x29988e0
mov word [eax], 0
movzx ecx, word [esp + 0x14]
test cx, cx
je 0x2998923
lea edx, [esp + 0x16]
mov esi, dword [esp + 0xc]
nop dword [eax + eax]
mov word [eax], cx
add eax, 2
movzx ecx, word [edx]
add edx, 2
test cx, cx
jne 0x2998910
jmp 0x2998927
mov esi, dword [esp + 0xc]
mov word [eax], 0
movzx ecx, word [ebx]
test cx, cx
je 0x2998951
add ebx, 2
nop word [eax + eax]
mov word [eax], cx
add eax, 2
movzx ecx, word [ebx]
add ebx, 2
test cx, cx
jne 0x2998940
mov word [eax], 0
mov dword [esp + 0x30], 0xa3a0a1fc
mov dword [esp + 0x34], 0
mov dword [esp + 8], 0
mov eax, dword [esp + 8]
cmp eax, 7
ja 0x29989c5
nop word [eax + eax]
mov eax, dword [esp + 8]
mov ecx, dword [esp + 8]
movzx ecx, byte [esp + ecx + 0x30]
mov edx, eax
xor edx, 0xf2c5553b
and eax, 0xf2c5553b
lea eax, [edx + eax*2]
lea edx, [eax + ecx]
and eax, ecx
add eax, eax
sub edx, eax
mov dword [esp + 4], edx
mov eax, dword [esp + 4]
add al, 0x63
mov ecx, dword [esp + 8]
mov byte [esp + ecx + 0x30], al
inc dword [esp + 8]
mov eax, dword [esp + 8]
cmp eax, 8
jb 0x2998980
push 0
push 0
push 0xc00000
lea eax, [esp + 0x3c]
push eax
push esi
push dword [esp + 0x24]
push dword [ebp + 8]
call fcn.0299b3a0
add esp, 0x1c
mov ebx, eax
mov eax, dword [0x29c2a74]
mov ecx, 0xf0a32682
xor ecx, dword [str.0k6]
add eax, ecx
inc eax
jmp eax