Function at 0x403020
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
push ebx
push esi
push edi
mov eax, dword [ebp + 8]
push ebx
push ecx
push edx
push esi
push edi
push ebp
sub esp, 0x14
mov edi, eax
mov al, byte [0x411e98]
xor al, byte [edi + 0x58]
mov ah, byte [0x4119a8]
xor ah, al
mov dl, byte [edi + 0x57]
mov byte [esp], ah
mov al, byte [0x411e99]
xor al, dl
mov ah, byte [0x4119b6]
xor ah, al
mov dh, byte [edi + 0x56]
mov byte [esp + 1], ah
mov al, byte [0x411e9a]
xor al, dh
mov ah, byte [0x4119dd]
xor ah, al
mov bl, byte [edi + 0x55]
mov byte [esp + 2], ah
mov al, byte [0x411e9b]
xor al, bl
mov ah, byte [0x4119c8]
xor ah, al
mov bh, byte [edi + 0x54]
mov byte [esp + 3], ah
mov al, byte [0x411e9c]
xor al, bh
mov ah, byte [0x4119d1]
xor ah, al
mov byte [esp + 4], ah
mov al, byte [esp]
xor ecx, ecx
and al, 0xf
and eax, 0xff
mov dl, byte [eax*4 + 0x411ac0]
xor eax, eax
mov al, byte [esp]
sar eax, 4
shl dl, 4
mov al, byte [eax*4 + 0x411ac0]
or al, dl
mov byte [esp], al
mov al, byte [esp + 1]
and al, 0xf
and eax, 0xff
mov dl, byte [eax*4 + 0x411ac0]
xor eax, eax
mov al, byte [esp + 1]
sar eax, 4
shl dl, 4
mov al, byte [eax*4 + 0x411ac0]
or al, dl
mov byte [esp + 1], al
mov al, byte [esp + 2]
and al, 0xf
and eax, 0xff
mov dl, byte [eax*4 + 0x411ac0]
xor eax, eax
mov al, byte [esp + 2]
sar eax, 4
shl dl, 4
mov al, byte [eax*4 + 0x411ac0]
or al, dl
mov byte [esp + 2], al
mov al, byte [esp + 3]
and al, 0xf
xor edx, edx
and eax, 0xff
mov dl, byte [esp + 3]
mov al, byte [eax*4 + 0x411ac0]
sar edx, 4
shl al, 4
mov ah, byte [edx*4 + 0x411ac0]
or ah, al
mov byte [esp + 3], ah
mov al, byte [esp + 4]
and al, 0xf
and eax, 0xff
mov dl, byte [eax*4 + 0x411ac0]
xor eax, eax
mov al, byte [esp + 4]
xor ebx, ebx
sar eax, 4
shl dl, 4
mov al, byte [eax*4 + 0x411ac0]
mov bl, byte [esp + 3]
or al, dl
xor edx, edx
shl ebx, 0xf
mov dl, al
mov byte [esp + 4], al
shl edx, 0x18
xor eax, eax
or edx, 0x800000
mov al, byte [esp]
or edx, ebx
xor ebx, ebx
shl eax, 7
mov bl, byte [esp + 1]
or eax, 0x10000000
shl ebx, 0xf
or eax, ebx
mov bl, byte [esp + 2]
and bl, 0x1f
and ebx, 0xff
shl ebx, 0x17
or eax, ebx
mov bl, byte [esp + 2]
and bl, 0xe0
lea esi, [edi + 0x80]
and ebx, 0xff
add edi, 0x800
shl ebx, 0x18
mov dword [esp + 0xc], edi
or eax, ebx
xor ebx, ebx
mov edi, edx
mov dword [esp + 8], ebx
mov ebx, edx
shr edi, 0xc
shr ebx, 0xf
and edi, 0xf8
and ebx, 0xff
xor edi, ebx
mov ebx, edx
shr ebx, 9
and ebx, 0xc0
xor edi, ebx
mov ebx, edx
shr ebx, 0x1d
mov ebx, dword [ebx*4 + 0x411a98]
xor ebx, edi
mov edi, ebx
shr edx, 8
shl edi, 0x18
or edx, edi
mov edi, eax
shr edi, 7
mov dword [esp + 0x10], edi
mov edi, eax
mov ebp, dword [esp + 0x10]
shr edi, 0xa
xor ebp, edi
mov edi, eax
shr edi, 0xb
xor ebp, edi
mov edi, eax
shr edi, 0x13
xor edi, ebp
xor bl, 0xff
and edi, 0xff
add ebx, edi
add ecx, ebx
mov ebp, edi
mov ebx, ecx
movzx edi, byte [esi]
and ebx, 0xff
inc esi
xor ebx, edi
shr eax, 8
mov dword [esp + 8], ebx
mov bl, byte [edi + str.3r9_gmq6w__bht]
shl ebp, 0x18
mov bh, byte [esp + 8]
xor bl, bh
or eax, ebp
mov byte [esi - 1], bl
mov ebx, dword [esp + 0xc]
sar ecx, 8
cmp esi, ebx
jne 0x4031d9
add esp, 0x14
pop ebp
pop edi
pop esi
pop edx
pop ecx
pop ebx
pop edi
pop esi
pop ebx
pop ebp
ret