Skip to content
Shaun Smiley edited this page Mar 13, 2022 · 47 revisions

Welcome to the Android-PIN-Bruteforce wiki!

List of supported phones

Make Model Release year Android Version Tested by Config options Max Incorrect PINs tested
Samsung S5 2014 6.0.1 @urbanadventurer config.samsung.s5 1500
Samsung S7 2016 8.01 @urbanadventurer config.samsung.s7 20
Samsung J7 2015 6.01 @v1adf
Samsung A5 2014 7.0 @v1adf
Samsung S10e 2019 9.0 @senorsmile
LG Nexus 5 2013 6.0.1 @v1adf
Motorola G4 Plus 2016 7.0 @urbanadventurer config.motorola-moto-g4-plus 1001
Motorola G5 Plus 2017 7.0 @odorisiogallo config.motorola-moto-g5-plus
Xiaomi Mi Mix 3 2019 10.0 @psyhomb config.xiaomi.mi-mix-3 65
Xiaomi Redmi Note 7 2019 10.0 @psyhomb config.xiaomi.mi-mix-3 12

List of unsupported phones

Make Model Release year Android Version Tested by Config options
HTC One M8 2014 5.01 @v1adf
LG K20 2019 9.0 @v1adf
LG Q6 2017 8.01 @v1adf
Motorola E6 2019 9.0 @v1adf
Motorola Moto G 2013 9.0 @simtcrcom
Samsung A50 2019 10.0 @v1adf
Samsung S7 Edge 2016 6.0.1 @v1adf
Samsung S8 2017 9.0 @v1adf

Comments about specific phones

Motorola E6

1 second cooldown, 1 attack every 60 after 40 incorrect

Motorola Sequence

I do not have a Motorola G5 Plus to test with, so I cannot confirm that this is correct.

@odorisiogallo shared a number sequence of the cooldown timing in issue #9. The lockscreen delays appear to follow the exponential pattern, 15 x 2n, where n denotes the nth term in the series.

The following Ruby script generates the series of delays up to 25 terms.

irb(main):001:0> (1..25).map { |n|  15*2**n  }
=> [30, 60, 120, 240, 480, 960, 1920, 3840, 7680, 15360, 30720, 61440, 122880, 245760, 491520, 983040, 1966080, 3932160, 7864320, 15728640, 31457280, 62914560, 125829120, 251658240, 503316480]
irb(main):002:0>

The following script translates these delay times from seconds into days, hours, minutes, and seconds.

# from https://gist.github.com/shunchu/3175001
def formatted_duration(total_seconds)
    days = total_seconds / (60 * 60 * 24)
    hours = total_seconds / (60 * 60)
    hours -= (24 * days) if days >= 1
    minutes = (total_seconds / 60) % 60
    seconds = total_seconds % 60

    "#{days}d #{hours}h #{minutes}min #{seconds}s"
end

irb(main):015:0> (1..25).each { |x|  seconds = 15*2**x;  puts "#{x}\t#{seconds}\t\t#{formatted_duration(seconds)}" }
1	30		0d 0h 0min 30s
2	60		0d 0h 1min 0s
3	120		0d 0h 2min 0s
4	240		0d 0h 4min 0s
5	480		0d 0h 8min 0s
6	960		0d 0h 16min 0s
7	1920		0d 0h 32min 0s
8	3840		0d 1h 4min 0s
9	7680		0d 2h 8min 0s
10	15360		0d 4h 16min 0s
11	30720		0d 8h 32min 0s
12	61440		0d 17h 4min 0s
13	122880		1d 10h 8min 0s
14	245760		2d 20h 16min 0s
15	491520		5d 16h 32min 0s
16	983040		11d 9h 4min 0s
17	1966080		22d 18h 8min 0s
18	3932160		45d 12h 16min 0s
19	7864320		91d 0h 32min 0s
20	15728640		182d 1h 4min 0s
21	31457280		364d 2h 8min 0s
22	62914560		728d 4h 16min 0s
23	125829120		1456d 8h 32min 0s
24	251658240		2912d 17h 4min 0s
25	503316480		5825d 10h 8min 0s

https://github.com/urbanadventurer/Android-PIN-Bruteforce

irb(main):001:0> (1..25).map { |n| 15*2**n } => [30, 60, 120, 240, 480, 960, 1920, 3840, 7680, 15360, 30720, 61440, 122880, 245760, 491520, 983040, 1966080, 3932160, 7864320, 15728640, 31457280, 62914560, 125829120, 251658240, 503316480] irb(main):002:0>

Clone this wiki locally