Function at 0x4b23a0
Capabilities:
Validate payment card number using luhn algorithm

Disassembly:
sub esp, 0x54
push ebx
push ebp
mov ebp, dword [esp + 0x64]
xor eax, eax
push esi
push edi
mov dword [esp + 0x18], eax
mov dword [esp + 0x28], eax
mov dword [esp + 0x1c], eax
lea esp, [esp]
movsx esi, byte [ebp]
test esi, esi
mov eax, ebp
je 0x4b1c7e
lea ebx, [ebx]
cmp esi, 0x25
je 0x4b1c7e
movsx esi, byte [ebp + 1]
inc ebp
test esi, esi
jne 0x4b1c70
mov edi, ebp
sub edi, eax
je 0x4b1ca3
mov ebx, dword [esp + 0x68]
push edi
push eax
push ebx
call sub.MSVCR71.dll_memmove
mov eax, dword [esp + 0x28]
add ebx, edi
add esp, 0xc
add eax, edi
mov dword [esp + 0x68], ebx
mov dword [esp + 0x1c], eax
xor eax, eax
cmp esi, eax
je 0x4b22d2
mov edx, dword [esp + 0x70]
inc ebp
mov dword [esp + 0x30], eax
mov dword [esp + 0x20], eax
or ecx, 0xffffffff
mov byte [esp + 0x6c], al
mov esi, 4
mov dword [esp + 0x14], eax
lea ebx, [ebx]
movsx ebx, byte [ebp]
inc ebp
mov dword [esp + 0x2c], ebp
lea esp, [esp]
lea eax, [ebx - 0x20]
cmp eax, 0x58
ja case.0x4b1cf3.33
movzx eax, byte [eax + 0x4b2344]
jmp dword [eax*4 + 0x4b22e8]
movsx ebx, byte [ebp]
inc ebp
cmp ebx, 0x2a
mov dword [esp + 0x2c], ebp
je 0x4b1dc1
lea ecx, [ebx - 0x30]
xor eax, eax
cmp ecx, 9
ja 0x4b1d41
jmp 0x4b1d20
lea eax, [eax + eax*4]
lea eax, [ebx + eax*2 - 0x30]
movsx ebx, byte [ebp]
lea ecx, [ebx - 0x30]
inc ebp
cmp ecx, 9
jbe 0x4b1d20
test eax, eax
mov dword [esp + 0x2c], ebp
jge 0x4b1d41
or ecx, 0xffffffff
jmp 0x4b1ce0
mov ecx, eax
jmp 0x4b1ce0
xor eax, eax
jmp 0x4b1d50
lea eax, [eax + eax*4]
lea eax, [ebx + eax*2 - 0x30]
movsx ebx, byte [ebp]
lea edi, [ebx - 0x30]
inc ebp
cmp edi, 9
jbe 0x4b1d50
mov dword [esp + 0x20], eax
jmp 0x4b1cd5
mov al, byte [esp + 0x6c]
test al, al
jne 0x4b1cd0
mov byte [esp + 0x6c], 0x20
jmp 0x4b1cd0
mov eax, dword [esp + 0x14]
or eax, 8
jmp 0x4b1cc6
mov eax, dword [edx + esi - 4]
add edx, esi
test eax, eax
mov dword [esp + 0x70], edx
mov dword [esp + 0x20], eax
jge 0x4b1cd0
neg eax
mov dword [esp + 0x20], eax
mov eax, dword [esp + 0x14]
or eax, 0x10
jmp 0x4b1cc6
mov byte [esp + 0x6c], 0x2b
jmp 0x4b1cd0
mov eax, dword [edx + esi - 4]
add edx, esi
test eax, eax
mov dword [esp + 0x70], edx
jge 0x4b1dd7
or ecx, 0xffffffff
jmp 0x4b1cd0
mov ecx, eax
jmp 0x4b1cd0
mov eax, dword [esp + 0x14]
or eax, 0x20
jmp 0x4b1cc6
mov eax, dword [esp + 0x14]
or eax, esi
jmp 0x4b1cc6
mov eax, dword [esp + 0x14]
or eax, 1
jmp 0x4b1cc6
mov cl, byte [edx + esi - 4]
add edx, esi
mov dword [esp + 0x70], edx
mov byte [esp + 0x3c], cl
jmp 0x4b207f
or dword [esp + 0x14], 1
mov al, byte [esp + 0x14]
test al, 1
jne 0x4b1e2e
test al, 4
je 0x4b1e2e
movsx eax, word [edx + esi - 4]
add edx, esi
jmp 0x4b1e34
mov eax, dword [edx + esi - 4]
add edx, esi
test eax, eax
mov dword [esp + 0x70], edx
jge 0x4b1e43
neg eax
mov byte [esp + 0x6c], 0x2d
mov edi, 1
jmp 0x4b1fbb
mov al, byte [esp + 0x14]
add edx, esi
test al, 1
mov dword [esp + 0x70], edx
je 0x4b1e69
mov edx, dword [edx - 4]
mov eax, dword [esp + 0x1c]
mov dword [edx], eax
jmp 0x4b1c60
test al, 4
je 0x4b1e7d
mov ecx, dword [edx - 4]
mov dx, word [esp + 0x1c]
mov word [ecx], dx
jmp 0x4b1c60
mov eax, dword [edx - 4]
mov ecx, dword [esp + 0x1c]
mov dword [eax], ecx
jmp 0x4b1c60
or dword [esp + 0x14], 1
mov al, byte [esp + 0x14]
test al, 1
jne 0x4b1eae
test al, 4
je 0x4b1eae
movzx eax, word [edx + esi - 4]
add edx, esi
mov dword [esp + 0x70], edx
xor edi, edi
jmp 0x4b1fb6
mov eax, dword [edx + esi - 4]
add edx, esi
mov dword [esp + 0x70], edx
xor edi, edi
jmp 0x4b1fb6
mov eax, dword [edx + esi - 4]
add edx, esi
mov dword [esp + 0x70], edx
mov edi, 2
mov dword [esp + 0x28], 0x673444
mov ebx, 0x78
jmp 0x4b1fb1
add edx, esi
mov esi, dword [edx - 4]
test esi, esi
mov dword [esp + 0x70], edx
jne 0x4b1ef2
mov esi, 0x67343c
test ecx, ecx
jl 0x4b1f2a
lea edx, [ecx + esi]
cmp esi, edx
mov eax, esi
jae 0x4b1f23
nop
cmp byte [eax], 0
je 0x4b1f11
inc eax
cmp eax, edx
jb 0x4b1f00
mov eax, ecx
jmp 0x4b2088
cmp edx, eax
jbe 0x4b1f23
sub eax, esi
cmp eax, ecx
mov dword [esp + 0x18], eax
jle 0x4b208c
mov eax, ecx
jmp 0x4b2088
push esi
call fcn.0043faa0
add esp, 4
mov dword [esp + 0x18], eax
jmp 0x4b208c
or dword [esp + 0x14], 1
mov al, byte [esp + 0x14]
test al, 1
jne 0x4b1f5f
test al, 4
je 0x4b1f5f
movzx eax, word [edx + esi - 4]
add edx, esi
mov dword [esp + 0x70], edx
mov edi, 1
jmp 0x4b1fb6
mov eax, dword [edx + esi - 4]
add edx, esi
mov dword [esp + 0x70], edx
mov edi, 1
jmp 0x4b1fb6
mov dword [esp + 0x28], 0x673428
jmp 0x4b1f82
mov dword [esp + 0x28], 0x673444
mov al, byte [esp + 0x14]
test al, 1
jne 0x4b1f97
test al, 4
je 0x4b1f97
movzx eax, word [edx + esi - 4]
add edx, esi
jmp 0x4b1f9d
mov eax, dword [edx + esi - 4]
add edx, esi
mov dword [esp + 0x70], edx
test byte [esp + 0x14], 8
mov edi, 2
je 0x4b1fb6
test eax, eax
je 0x4b1fb6
or dword [esp + 0x14], 0x40
mov byte [esp + 0x6c], 0
test ecx, ecx
mov dword [esp + 0x30], ecx
jl 0x4b1fc8
and dword [esp + 0x14], 0xffffffdf
test eax, eax
lea esi, [esp + 0x64]
jne 0x4b1fd8
test ecx, ecx
je 0x4b2067
sub edi, 0
je 0x4b2044
dec edi
je 0x4b2013
dec edi
je 0x4b1ff1
mov eax, dword [esp + 0x18]
mov esi, 0x67340c
jmp 0x4b2091
mov edi, dword [esp + 0x28]
mov edx, eax
and edx, 0xf
mov cl, byte [edx + edi]
dec esi
shr eax, 4
test eax, eax
mov byte [esi], cl
jne 0x4b1ff5
lea eax, [esp + 0x64]
sub eax, esi
mov dword [esp + 0x18], eax
jmp 0x4b2091
cmp eax, 0xa
jb 0x4b2033
jmp 0x4b2020
xor edx, edx
mov ecx, 0xa
div ecx
dec esi
add dl, 0x30
cmp eax, ecx
mov byte [esi], dl
jae 0x4b2020
add al, 0x30
dec esi
mov byte [esi], al
lea eax, [esp + 0x64]
sub eax, esi
mov dword [esp + 0x18], eax
jmp 0x4b2091
mov dl, al
and dl, 7
dec esi
add dl, 0x30
shr eax, 3
test eax, eax
mov byte [esi], dl
jne 0x4b2044
test byte [esp + 0x14], 8
je 0x4b2067
mov al, dl
cmp al, 0x30
je 0x4b2067
dec esi
mov byte [esi], 0x30
lea eax, [esp + 0x64]
sub eax, esi
mov dword [esp + 0x18], eax
jmp 0x4b2091
test ebx, ebx
je 0x4b22bf
mov byte [esp + 0x3c], bl
mov eax, 1
lea esi, [esp + 0x3c]
mov dword [esp + 0x18], eax
mov byte [esp + 0x6c], 0
mov cl, byte [esp + 0x6c]
test cl, cl
mov edi, eax
mov dword [esp + 0x34], edi
je 0x4b20a4
lea edi, [eax + 1]
jmp 0x4b20ae
test byte [esp + 0x14], 0x40
je 0x4b20b2
lea edi, [eax + 2]
mov dword [esp + 0x34], edi
mov eax, dword [esp + 0x30]
cmp eax, edi
mov dword [esp + 0x24], eax
jg 0x4b20c2
mov dword [esp + 0x24], edi
mov ebp, dword [esp + 0x14]
and ebp, 0x30
mov dword [esp + 0x38], ebp
jne 0x4b212f
mov edi, dword [esp + 0x20]
sub edi, dword [esp + 0x24]
test edi, edi
jle 0x4b212f
cmp edi, 0x10
jle 0x4b2112
lea ebp, [edi - 0x11]
shr ebp, 4
inc ebp
mov eax, ebp
neg eax
shl eax, 4
add edi, eax
mov ecx, dword [esp + 0x68]
push 0x10
push str.________________0000000000000000bug_in_vfprintf:_bad_base
push ecx
call sub.MSVCR71.dll_memmove
mov ecx, dword [esp + 0x74]
add ecx, 0x10
add esp, 0xc
dec ebp
mov dword [esp + 0x68], ecx
jne 0x4b20f0
mov ebp, dword [esp + 0x68]
push edi
push str.________________0000000000000000bug_in_vfprintf:_bad_base
push ebp
call sub.MSVCR71.dll_memmove
add esp, 0xc
add ebp, edi
mov dword [esp + 0x68], ebp
mov ebp, dword [esp + 0x38]
mov al, byte [esp + 0x6c]
test al, al
je 0x4b214e
mov edi, dword [esp + 0x68]
push 1
lea edx, [esp + 0x70]
push edx
push edi
call sub.MSVCR71.dll_memmove
add esp, 0xc
inc edi
jmp 0x4b2175
test byte [esp + 0x14], 0x40
je 0x4b2179
mov edi, dword [esp + 0x68]
push 2
lea eax, [esp + 0x14]
push eax
push edi
mov byte [esp + 0x1c], 0x30
mov byte [esp + 0x1d], bl
call sub.MSVCR71.dll_memmove
add esp, 0xc
add edi, 2
mov dword [esp + 0x68], edi
cmp ebp, 0x20
jne 0x4b21d6
mov edi, dword [esp + 0x20]
sub edi, dword [esp + 0x24]
test edi, edi
jle 0x4b21d6
cmp edi, 0x10
jle 0x4b21bd
mov ebp, dword [esp + 0x68]
lea ebx, [edi - 0x11]
shr ebx, 4
inc ebx
mov ecx, ebx
neg ecx
shl ecx, 4
add edi, ecx
push 0x10
push 0x6733fc
push ebp
call sub.MSVCR71.dll_memmove
add esp, 0xc
add ebp, 0x10
dec ebx
jne 0x4b21a3
mov dword [esp + 0x68], ebp
mov ebx, dword [esp + 0x68]
push edi
push 0x6733fc
push ebx
call sub.MSVCR71.dll_memmove
add esp, 0xc
add ebx, edi
mov dword [esp + 0x68], ebx
mov ebx, dword [esp + 0x30]
sub ebx, dword [esp + 0x34]
test ebx, ebx
jle 0x4b2233
cmp ebx, 0x10
jle 0x4b221a
mov ebp, dword [esp + 0x68]
lea edi, [ebx - 0x11]
shr edi, 4
inc edi
mov edx, edi
neg edx
shl edx, 4
add ebx, edx
jmp 0x4b2200
push 0x10
push 0x6733fc
push ebp
call sub.MSVCR71.dll_memmove
add esp, 0xc
add ebp, 0x10
dec edi
jne 0x4b2200
mov dword [esp + 0x68], ebp
mov edi, dword [esp + 0x68]
push ebx
push 0x6733fc
push edi
call sub.MSVCR71.dll_memmove
add esp, 0xc
add edi, ebx
mov dword [esp + 0x68], edi
mov edi, dword [esp + 0x18]
mov ebx, dword [esp + 0x68]
push edi
push esi
push ebx
call sub.MSVCR71.dll_memmove
mov al, byte [esp + 0x20]
mov ebp, dword [esp + 0x30]
add ebx, edi
add esp, 0xc
test al, 0x10
mov dword [esp + 0x68], ebx
je 0x4b22a2
mov esi, dword [esp + 0x20]
sub esi, ebp
test esi, esi
jle 0x4b22a2
cmp esi, 0x10
jle 0x4b228d
lea edi, [esi - 0x11]
shr edi, 4
inc edi
mov eax, edi
neg eax
shl eax, 4
add esi, eax
push 0x10
push str.________________0000000000000000bug_in_vfprintf:_bad_base
push ebx
call sub.MSVCR71.dll_memmove
add esp, 0xc
add ebx, 0x10
dec edi
jne 0x4b2277
push esi
push str.________________0000000000000000bug_in_vfprintf:_bad_base
push ebx
call sub.MSVCR71.dll_memmove
add esp, 0xc
add ebx, esi
mov dword [esp + 0x68], ebx
mov eax, dword [esp + 0x20]
cmp eax, ebp
jg 0x4b22ac
mov eax, ebp
mov ecx, dword [esp + 0x1c]
mov ebp, dword [esp + 0x2c]
add ecx, eax
mov dword [esp + 0x1c], ecx
jmp 0x4b1c60
mov ecx, dword [esp + 0x68]
mov eax, dword [esp + 0x1c]
pop edi
pop esi
pop ebp
mov byte [ecx], 0
pop ebx
add esp, 0x54
ret
mov edx, dword [esp + 0x68]
mov eax, dword [esp + 0x1c]
pop edi
pop esi
pop ebp
mov byte [edx], 0
pop ebx
add esp, 0x54
ret
jmp 0x4b1c40