Function at 0x46f870
Capabilities:
Parse credit card information

Disassembly:
mov dword [esp + 0x10], edi
movzx eax, byte [edi]
mov dword [esp + 0x18], eax
cmp dword [esp + 0x100], edx
je 0x46f1b8
mov ecx, dword [esp + 0xfc]
mov edx, dword [ecx + 0x10]
add edx, 0xf9c
cmp ebx, edx
ja 0x471b14
mov ecx, dword [esp + 0x90]
cmp ebx, ecx
jae 0x46f13b
mov dword [esp + 0x14], ecx
mov ebx, ecx
mov eax, dword [esp + 0x100]
mov eax, dword [eax]
mov edx, ebx
sub edx, ecx
mov ecx, 0x7fffffeb
sub ecx, eax
cmp ecx, edx
jl 0x471b37
sub eax, dword [esp + 0x90]
mov edx, dword [esp + 0x100]
add eax, ebx
mov dword [edx], eax
xor edx, edx
cmp ebp, edx
je 0x46f1a5
cmp ebp, esi
jbe 0x46f1ab
mov eax, ebx
sub eax, ebp
push eax
push ebp
push esi
call fcn.0047abe0
mov edi, dword [esp + 0x1c]
mov ecx, esi
sub ecx, ebp
add ebx, ecx
mov ecx, dword [esp + 0x68]
mov ebp, esi
add esp, 0xc
mov dword [esp + 0x14], ebx
mov dword [esp + 0x24], ebp
xor edx, edx
mov dword [esp + 0x90], ebx
jmp 0x46f1d1
mov dword [esp + 0x14], esi
mov ebx, esi
mov ecx, dword [esp + 0x5c]
mov dword [esp + 0x90], ebx
jmp 0x46f1d1
mov eax, dword [esp + 0xfc]
mov esi, dword [eax + 0x10]
add esi, 0xf9c
cmp dword [eax + 0x24], esi
ja 0x471b5a
cmp dword [esp + 0x50], edx
je 0x46f2c2
cmp dword [esp + 0x18], edx
je 0x46f2c2
cmp dword [esp + 0x18], 0x5c
jne 0x46f20e
cmp byte [edi + 1], 0x45
jne 0x46f20e
mov esi, dword [esp + 0xb8]
mov ecx, dword [esp + 0x5c]
mov ebp, dword [esp + 0x24]
inc edi
mov dword [esp + 0x50], edx
inc edi
xor edx, edx
jmp 0x46f0fa
cmp ecx, edx
je 0x46f24b
cmp dword [esp + 0x100], edx
jne 0x46f247
movzx edx, byte [ecx + 6]
movzx eax, byte [ecx + 7]
shl edx, 8
or edx, eax
mov eax, edi
sub eax, edx
mov edx, dword [esp + 0xfc]
sub eax, dword [edx + 0x18]
mov edx, eax
sar edx, 8
mov byte [ecx + 8], dl
mov byte [ecx + 9], al
mov edi, dword [esp + 0x10]
xor edx, edx
mov dword [esp + 0x5c], edx
test dword [esp + 0x2c], 0x4000
je 0x46f288
mov esi, dword [esp + 0xfc]
mov word [ebx], 0xff53
mov dword [ebx + 2], edx
mov eax, edi
mov ecx, eax
sub ecx, dword [esi + 0x18]
mov dword [esp + 0x5c], ebx
sar ecx, 8
mov byte [ebx + 6], cl
sub al, byte [esi + 0x18]
mov word [ebx + 8], 0
mov byte [ebx + 7], al
add ebx, 0xa
mov dword [esp + 0x14], ebx
mov al, byte [esp + 0x18]
mov dl, byte [esp + 0x2c]
and dl, 1
or dl, 0x1c
mov byte [ebx], dl
mov dword [esp + 0x24], ebx
mov byte [ebx + 1], al
add ebx, 2
mov dword [esp + 0x14], ebx
cmp al, 0xd
je 0x46f2b2
cmp al, 0xa
jne 0x471a96
mov edx, dword [esp + 0xfc]
or dword [edx + 0x48], 0x20
jmp 0x471a9d
mov eax, dword [esp + 0x18]
cmp eax, 0x2a
je 0x46f3e5
cmp eax, 0x2b
je 0x46f3e5
cmp eax, 0x3f
je 0x46f3e5
cmp eax, 0x7b
jne 0x46f2f6
lea eax, [edi + 1]
call fcn.0046d390
test eax, eax
jne 0x46f3e5
mov esi, dword [esp + 0x5c]
xor ecx, ecx
mov dword [esp + 0x1c], ecx
cmp esi, ecx
je 0x46f350
mov eax, dword [esp + 0xa4]
mov edx, eax
dec eax
mov dword [esp + 0xa4], eax
test edx, edx
jg 0x46f350
cmp dword [esp + 0x100], ecx
jne 0x46f34c
movzx edx, byte [esi + 6]
movzx eax, byte [esi + 7]
shl edx, 8
or edx, eax
mov eax, edi
sub eax, edx
mov edx, dword [esp + 0xfc]
sub eax, dword [edx + 0x18]
mov edx, eax
sar edx, 8
mov byte [esi + 8], dl
mov byte [esi + 9], al
mov edi, dword [esp + 0x10]
mov dword [esp + 0x5c], ecx
mov edx, dword [esp + 0x2c]
test dl, 8
je 0x46f430
mov eax, dword [esp + 0xfc]
mov ecx, dword [eax + 0xc]
mov edx, dword [esp + 0x18]
test byte [edx + ecx], 1
jne 0x46f4c6
cmp edx, 0x23
jne 0x46f439
inc edi
mov dword [esp + 0x10], edi
mov cl, byte [edi]
test cl, cl
je 0x46f3d4
lea esp, [esp]
mov edx, dword [eax + 0x58]
test edx, edx
je 0x46f3f2
mov eax, dword [eax + 0x1c]
cmp edi, eax
jae 0x46f419
mov esi, dword [esp + 0xfc]
push edx
add esi, 0x5c
mov edx, eax
mov ecx, edi
call fcn.00478cb0
add esp, 4
test eax, eax
je 0x46f419
mov eax, dword [esp + 0xfc]
mov ecx, dword [eax + 0x5c]
lea edi, [edi + ecx - 1]
mov dword [esp + 0x10], edi
cmp byte [edi], 0
jne 0x46f4c6
mov esi, dword [esp + 0xfc]
mov dword [esp + 0x18], 0
jmp 0x46f43b
mov dword [esp + 0x1c], 1
jmp 0x46f350
mov edx, dword [eax + 0x5c]
mov eax, dword [eax + 0x1c]
sub eax, edx
cmp edi, eax
ja 0x46f419
mov eax, dword [esp + 0xfc]
cmp cl, byte [eax + 0x60]
jne 0x46f419
cmp edx, 1
je 0x46f3b9
mov cl, byte [edi + 1]
mov edx, eax
cmp cl, byte [edx + 0x61]
je 0x46f3b9
inc edi
mov dword [esp + 0x10], edi
mov cl, byte [edi]
test cl, cl
je 0x46f3d4
mov eax, dword [esp + 0xfc]
jmp 0x46f390
mov esi, dword [esp + 0xfc]
jmp 0x46f443
mov esi, eax
mov edx, dword [esp + 0x2c]
mov ebp, dword [esp + 0x24]
xor ecx, ecx
test edx, 0x4000
je 0x46f485
cmp dword [esp + 0x1c], ecx
jne 0x46f485
mov word [ebx], 0xff53
mov dword [ebx + 2], ecx
mov eax, edi
mov edx, eax
sub edx, dword [esi + 0x18]
mov dword [esp + 0x5c], ebx
sar edx, 8
mov byte [ebx + 6], dl
sub al, byte [esi + 0x18]
mov edx, dword [esp + 0x2c]
mov byte [ebx + 7], al
mov word [ebx + 8], cx
mov edi, dword [esp + 0x10]
add ebx, 0xa
mov dword [esp + 0x14], ebx
cmp dword [esp + 0x18], 0x7c
ja 0x46f288
mov eax, dword [esp + 0x18]
movzx eax, byte [eax + 0x46ec8c]
jmp dword [eax*4 + 0x46ec58]
mov dword [esp + 0x14], ebx
mov edi, dword [esp + 0x10]
mov esi, dword [esp + 0xb8]
mov ecx, dword [esp + 0x5c]
mov ebp, dword [esp + 0x24]
inc edi
xor edx, edx
jmp 0x46f0fa
cmp dword [esp + 0x50], 0
je 0x46f678
cmp esi, 0x5c
jne 0x46f831
cmp byte [edi + 1], 0x45
jne 0x46f831
mov dword [esp + 0x50], 0
inc edi
jmp 0x46f922
cmp esi, 0x5b
jne 0x46f7e7
mov al, byte [edi + 1]
cmp al, 0x3a
je 0x46f694
cmp al, 0x2e
je 0x46f694
cmp al, 0x3d
jne 0x46f831
lea edx, [esp + 0x6c]
push edx
mov eax, edi
call fcn.0046e7b0
add esp, 4
test eax, eax
je 0x46f831
cmp byte [edi + 1], 0x3a
mov eax, dword [esp + 0xfc]
mov ebp, dword [eax + 8]
mov dword [esp + 0x40], 0
jne 0x471c34
add edi, 2
mov dword [esp + 0x10], edi
cmp byte [edi], 0x5e
jne 0x46f6e6
mov eax, 1
add edi, eax
mov dword [esp + 0x40], eax
mov dword [esp + 0x20], eax
mov dword [esp + 0x10], edi
mov ebx, dword [esp + 0x6c]
sub ebx, edi
push edi
call fcn.0046e800
add esp, 4
test eax, eax
js 0x471c57
test byte [esp + 0x2c], 1
je 0x46f70b
cmp eax, 2
jg 0x46f70b
xor eax, eax
lea eax, [eax + eax*2]
mov esi, dword [eax*4 + 0x496f18]
add esi, ebp
mov ecx, 8
lea edi, [esp + 0xbc]
rep movsd dword es:[edi], dword [esi]
mov ecx, dword [eax*4 + 0x496f1c]
mov esi, dword [eax*4 + str._s_s:_s___1.500s_n_n]
test ecx, ecx
js 0x46f764
xor eax, eax
add ecx, ebp
test esi, esi
js 0x46f752
nop
mov dl, byte [ecx + eax]
or byte [esp + eax + 0xbc], dl
inc eax
cmp eax, 0x20
jl 0x46f740
jmp 0x46f764
mov dl, byte [ecx + eax]
not dl
and byte [esp + eax + 0xbc], dl
inc eax
cmp eax, 0x20
jl 0x46f752
test esi, esi
jns 0x46f76a
neg esi
cmp esi, 1
jne 0x46f779
and byte [esp + 0xbd], 0xc3
jmp 0x46f786
cmp esi, 2
jne 0x46f786
and byte [esp + 0xc7], 0x7f
xor eax, eax
cmp dword [esp + 0x40], eax
je 0x46f7c0
mov edi, edi
mov cl, byte [esp + eax + 0xbc]
not cl
or byte [esp + eax + 0x70], cl
inc eax
cmp eax, 0x20
jl 0x46f790
mov edi, dword [esp + 0x6c]
mov ebx, dword [esp + 0x14]
inc edi
mov dword [esp + 0x18], 0xa
jmp 0x46f922
mov dl, byte [esp + eax + 0xbc]
or byte [esp + eax + 0x70], dl
inc eax
cmp eax, 0x20
jl 0x46f7c0
mov edi, dword [esp + 0x6c]
mov ebx, dword [esp + 0x14]
inc edi
mov dword [esp + 0x18], 0xa
jmp 0x46f922
cmp esi, 0x5c
jne 0x46f831
mov eax, dword [esp + 0x2c]
mov edi, dword [esp + 0xec]
mov edx, dword [esp + 0xfc]
push 1
push eax
mov eax, dword [edx + 0x34]
lea ecx, [esp + 0x18]
push edi
push ecx
call fcn.0046d010
add esp, 0x10
cmp dword [edi], 0
mov esi, eax
jne 0x4708a6
mov ecx, esi
neg ecx
cmp ecx, 5
jne 0x46f8af
lea esi, [ecx + 3]
mov edi, dword [esp + 0x10]
cmp byte [edi + 1], 0x5c
jne 0x46f857
xor eax, eax
lea esp, [esp]
cmp byte [edi + 2], 0x45
jne 0x46f857
add edi, 2
mov dword [esp + 0x10], edi
cmp byte [edi + 1], 0x5c
mov dword [esp + 0x50], eax
je 0x46f840
mov ebp, edi
cmp esi, 0xd
je 0x46f863
cmp esi, 0xa
jne 0x46f86e
mov eax, dword [esp + 0xfc]
or dword [eax + 0x48], 0x20
mov ecx, dword [esp + 0x50]
and al, 0x50
test ecx, ecx
jne 0x46fc3b
cmp byte [edi + 1], 0x2d
jne 0x46fc3b
add edi, 2
mov dword [esp + 0x10], edi
cmp byte [edi], 0x5c
jne 0x46fb0f
cmp byte [edi + 1], 0x45
jne 0x46fadb
add edi, 2
mov dword [esp + 0x10], edi
cmp byte [edi], 0x5c
je 0x46f894
jmp 0x46fb0f
cmp ecx, 0x1a
jne 0x46f8d3
mov edi, dword [esp + 0x10]
cmp byte [edi + 1], 0x5c
jne 0x46f8c9
cmp byte [edi + 2], 0x45
jne 0x46f8c9
add edi, 2
jmp 0x46f922
mov dword [esp + 0x50], 1
jmp 0x46f922
cmp ecx, 0x19
je 0x46f91e
test esi, esi
jns 0x46f82d
mov eax, dword [esp + 0xfc]
mov eax, dword [eax + 8]
mov edx, 2
add dword [esp + 0x18], edx
add ecx, 0xfffffffa
cmp ecx, 0xf
ja 0x46fac0
jmp dword [ecx*4 + 0x46ed0c]
mov edi, dword [esp + 0x10]
inc edi
mov dword [esp + 0x10], edi
movzx esi, byte [edi]
test esi, esi
je 0x471c99
cmp esi, 0x5d
jne 0x46f650
cmp dword [esp + 0x50], 0
jne 0x46f657
cmp dword [esp + 0x18], 1
jne 0x46fc9c
cmp dword [esp + 0x28], 0
mov ecx, dword [esp + 0x48]
mov dword [esp + 0x4c], ecx
je 0x46fc93
mov eax, dword [esp + 0x30]
cmp eax, 0xfffffffe
jne 0x46f974
or eax, 0xffffffff
mov dword [esp + 0x30], eax
mov dl, byte [esp + 0x1c]
mov byte [ebx], 0x1e
mov byte [ebx + 1], dl
mov dword [esp + 0x54], eax
add ebx, 2
jmp 0x46f4be
test byte [esp + 0x2c], 0x40
jne 0x471c69
mov edi, dword [esp + 0x10]
sub dword [esp + 0x18], edx
movzx esi, byte [edi]
jmp 0x46f831
cmp byte [edi], 0x5c
jne 0x46fb0f
cmp byte [edi + 1], 0x51
jne 0x46fb0f
add edi, 2
mov dword [esp + 0x10], edi
cmp byte [edi], 0x5c
jne 0x46fb06
cmp byte [edi + 1], 0x45
jne 0x46fb06
add edi, 2
mov dword [esp + 0x10], edi
cmp byte [edi], 0x5c
je 0x46fae0
jmp 0x46fb0f
mov ecx, 1
mov dword [esp + 0x50], ecx
mov al, byte [edi]
test al, al
je 0x46fc35
test ecx, ecx
jne 0x46fb25
cmp al, 0x5d
je 0x46fc35
movzx eax, al
mov dword [esp + 0x4c], eax
test ecx, ecx
jne 0x46fb82
cmp eax, 0x5c
jne 0x46fb82
mov eax, dword [esp + 0x2c]
mov edi, dword [esp + 0xec]
mov edx, dword [esp + 0xfc]
push 1
push eax
mov eax, dword [edx + 0x34]
lea ecx, [esp + 0x18]
push edi
push ecx
call fcn.0046d010
add esp, 0x10
cmp dword [edi], 0
mov dword [esp + 0x4c], eax
jne 0x4708a6
test eax, eax
jns 0x46fb7e
cmp eax, 0xfffffffb
jne 0x46fc35
mov eax, 8
mov dword [esp + 0x4c], eax
mov edi, dword [esp + 0x10]
cmp eax, esi
jl 0x471c76
je 0x46fc3b
cmp eax, 0xd
je 0x46fb9a
cmp eax, 0xa
jne 0x46fba5
mov ecx, dword [esp + 0xfc]
or dword [ecx + 0x48], 0x20
mov edx, dword [esp + 0x18]
mov ecx, eax
sub ecx, esi
cmp dword [esp + 0x100], 0
lea ecx, [edx + ecx + 1]
mov dword [esp + 0x18], ecx
mov dword [esp + 0x1c], eax
jne 0x46f922
cmp esi, eax
jg 0x46f922
mov eax, dword [esp + 0x2c]
and eax, 1
mov dword [esp + 0x60], eax
lea ebx, [ebx]
mov eax, esi
cdq
and edx, 7
add eax, edx
mov ecx, esi
and ecx, 7
mov dl, 1
shl dl, cl
sar eax, 3
lea ebp, [esp + eax + 0x70]
or byte [ebp], dl
cmp dword [esp + 0x60], 0
je 0x46fc29
mov eax, dword [esp + 0xfc]
mov ecx, dword [eax + 4]
movzx ecx, byte [ecx + esi]
mov eax, ecx
cdq
and edx, 7
add eax, edx
and ecx, 7
mov dl, 1
sar eax, 3
shl dl, cl
lea ebp, [esp + eax + 0x70]
or byte [ebp], dl
inc esi
cmp esi, dword [esp + 0x4c]
jle 0x46fbe0
jmp 0x46f922
mov edi, ebp
mov dword [esp + 0x10], edi
mov eax, esi
cdq
and edx, 7
add eax, edx
sar eax, 3
lea ebp, [esp + eax + 0x70]
mov ecx, esi
and ecx, 7
mov al, 1
shl al, cl
or byte [ebp], al
test byte [esp + 0x2c], 1
je 0x46fc86
mov ecx, dword [esp + 0xfc]
mov edx, dword [ecx + 4]
movzx esi, byte [edx + esi]
mov eax, esi
cdq
and edx, 7
add eax, edx
sar eax, 3
lea ebp, [esp + eax + 0x70]
mov ecx, esi
and ecx, 7
mov al, 1
shl al, cl
or byte [ebp], al
inc dword [esp + 0x18]
mov dword [esp + 0x1c], esi
jmp 0x46f922
mov al, byte [esp + 0x1c]
jmp 0x46f28c
mov eax, dword [esp + 0x30]
cmp eax, 0xfffffffe
jne 0x46fcac
or eax, 0xffffffff
mov dword [esp + 0x30], eax
mov dword [esp + 0x54], eax
mov eax, dword [esp + 0x48]
mov dword [esp + 0x4c], eax
mov eax, dword [esp + 0x28]
cmp eax, dword [esp + 0x20]
setne cl
add cl, 0x4e
mov byte [ebx], cl
inc ebx
test eax, eax
je 0x46fcf7
cmp dword [esp + 0x100], 0
jne 0x46fd04
lea esi, [esp + 0x70]
mov eax, ebx
sub esi, ebx
mov edi, 0x20
mov dl, byte [esi + eax]
not dl
mov byte [eax], dl
inc eax
dec edi
jne 0x46fce4
add ebx, 0x20
jmp 0x46f4be
mov ecx, 8
lea esi, [esp + 0x70]
mov edi, ebx
rep movsd dword es:[edi], dword [esi]
add ebx, 0x20
jmp 0x46f4be
mov edi, dword [esp + 0x10]
mov edx, dword [esp + 0xe8]
mov dword [edx], edi
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0xcc
ret
mov edx, dword [esp + 0xfc]
mov ecx, dword [esp + 0x30]
mov edi, dword [esp + 0x10]
cmp ecx, 0xfffffffe
jne 0x471adf
mov ecx, dword [esp + 0x48]
mov esi, dword [esp + 0xb8]
mov ebp, dword [esp + 0x24]
movzx eax, al
or eax, dword [esp + 0x98]
mov dword [esp + 0x4c], ecx
mov ecx, dword [esp + 0x5c]
inc edi
mov dword [esp + 0x54], 0xffffffff
mov dword [esp + 0x30], eax
xor edx, edx
jmp 0x46f0fa
mov eax, dword [esp + 0x48]
mov esi, dword [esp + 0xb8]
mov ebp, dword [esp + 0x24]
mov dword [esp + 0x54], ecx
movzx ecx, byte [ebx - 1]
or ecx, dword [edx + 0x4c]
inc edi
or ecx, dword [esp + 0x98]
mov dword [esp + 0x4c], eax
mov dword [esp + 0x48], ecx
mov ecx, dword [esp + 0x5c]
xor edx, edx
jmp 0x46f0fa
mov edx, dword [esp + 0xec]
mov dword [edx], 0x34
mov edx, dword [esp + 0xe8]
mov dword [edx], edi
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0xcc
ret
mov edx, dword [esp + 0xe8]
mov eax, dword [esp + 0xec]
mov dword [edx], edi
pop edi
pop esi
pop ebp
mov dword [eax], 0x14
xor eax, eax
pop ebx
add esp, 0xcc
ret
mov edx, dword [esp + 0xe8]
mov ecx, dword [esp + 0xec]
mov dword [edx], edi
pop edi
pop esi
pop ebp
mov dword [ecx], 0x34
xor eax, eax
pop ebx
add esp, 0xcc
ret
mov edx, dword [esp + 0xec]
mov dword [edx], 0x1f
mov edx, dword [esp + 0xe8]
mov dword [edx], edi
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0xcc
ret
mov eax, dword [esp + 0xec]
mov dword [eax], 0x1e
jmp 0x4708a6
mov ecx, edi
mov dword [ecx], 7
jmp 0x4708a6
mov edx, dword [esp + 0xec]
mov dword [edx], 8
mov edx, dword [esp + 0xe8]
mov dword [edx], edi
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0xcc
ret
mov edx, dword [esp + 0xe8]
mov eax, dword [esp + 0xec]
mov dword [edx], edi
pop edi
pop esi
pop ebp
mov dword [eax], 6
xor eax, eax
pop ebx
add esp, 0xcc
ret