(Não é uma resposta para a pergunta como indicado no título, mas uma maneira de resolver o problema subjacente, no entanto).
Acho que consegui (principalmente) fazer engenharia reversa do algoritmo que gera a senha de resgate na lista de senhas antigas. Infelizmente, não possuo uma placa ASUS, por isso não posso verificar se isso prevê corretamente novas senhas, no entanto, a execução do snippet postado abaixo nas datas em que a senha é conhecida sempre fornece o resultado correto. Se você tentar e isso funcionar ou não para você, me avise.
Apenas analisando os dados fornecidos de várias maneiras (por exemplo, criando uma tabela de senhas para um dia fixo do mês), pode-se ver alguns padrões surgindo.
Se rotularmos as letras da senha da seguinte forma: 01234567
, é fácil ver que as letras 6 e 7 são determinadas exclusivamente pelo dia do mês (e, portanto, são completamente independentes do mês ou ano). Para a letra 7, simplesmente use o dia do mês com base em zero como índice na string AAAABLDDBB0LB211C9BAAAAABLDDBB0
. Da mesma forma, para a letra 6, é a string LBAL0AL0ADLADLADLADBADBABBAB2AA
.
Para a letra 5, também é fácil ver que, além do dia do mês, a paridade do mês (isto é, o restante quando dividido por dois) também é importante. Para meses ímpares, é necessário usar a string de referência BADBOA01AAH1ABBALLBABLBAH1ADL1A
, para meses pares é A0CAABALBBALBBAH1ABH1ABLABL9ABO
.
As letras 2, 3 e 4 são muito semelhantes, basta usar uma tabela de pesquisa diferente para cada mês (ou seja, cada uma dessas letras tem doze tabelas de pesquisa).
A carta 1 também leva em conta a paridade do ano. Então aqui temos 24 tabelas de pesquisa total, 12 para anos ímpares e 12 para anos pares. Muitas dessas tabelas de consulta contêm as mesmas letras na mesma sequência, elas começam em um ponto diferente daquela sequência. Eu acho que isso indica que há algum padrão subjacente que eu ainda não consegui descobrir.
A letra 0 é um pouco mais complexa e ainda não consegui determinar completamente um padrão. Parece que, dependendo do mês e ano, uma das quatro seqüências fundamentais ( OLLAA1AO
, ADBA4CAL
, AD2AH9AB
, AB1A0BB0
) é selecionada e rotacionada por uma quantidade específica. No entanto, parece também que os anos 2002-2009 seguem um padrão diferente de 2010 e 2011 (de fato, 2010 mostra o mesmo comportamento de 2008, e 2011 como 2009), então é muito difícil prever como essa seqüência continua de qualquer maneira. / p>
Em vez disso, como neste momento já temos 7 de 8 letras determinadas, e parece haver apenas 12 possibilidades para a carta final, poderíamos apenas tentar forçar a senha. Se você tentar sistematicamente a letra ausente por frequência nas 4 sequências mencionadas anteriormente, você já deve ter 50% de chance de obter a senha correta após 2 tentativas.
Abaixo está um trecho de Javascript que, quando executado, solicita uma data e mostra as 12 senhas possíveis para essa data, classificadas por probabilidade. Para a data de hoje (2016-02-28), isso forneceria X0BLB9BD
, com X
sendo um dos ABLOD10942CH
.
(function() {
let today = new Date();
let date = prompt("Enter a date", today.toISOString().substring(0, 10));
let tables = [
[["AAAABLDDBB0LB211C9BAAAAABLDDBB0"]],
[["LBAL0AL0ADLADLADLADBADBABBAB2AA"]],
[["BADBOA01AAH1ABBALLBABLBAH1ADL1A", "A0CAABALBBALBBAH1ABH1ABLABL9ABO"]],
[["A49BLA0ODBLA0OD1ALAOD2ALABCA0OA", "BCA0AHBL20A4BLBAOADLBA0AD1ABA", "1ABAA9BLAAACBLA0OD2LAHBD2ALABL2", "ALAB1A0AHB1A0A4BLBAA49BBA0AD1L", "0AD1ABAA91ALAACBLAHACA0AHBD2AAH", "BD2AOAB1AAOAB1A0A491ABA49BBA0A", "BBA0OD1AB0OD1ALAACAALABCA0AHB1A", "0AHBL2AOABLBAOAB1ABOAD1ABA49BAB", "A49BLA0ODBLA0OD1ALAOD2ALABCA0O", "0AHBL2AOABLBAOAB1ABOAD1ABA49BAB", "A49BLA0ODBLA0OD1ALAOD2ALABCA0O", "BCA0AHBL20A4BLBAOADLBA0AD1ABAOD"]],
[["DA1HABBDAA24ABBLA244A9LLABAA99O", "9LLA2AA9LLBABAACOBAALBACOAALB", "BACOBALBAA10AALDA100AO0DA1HAOOB", "O0DA1HAO00DA1HABBDAA24ABBLA244", "4ABBDA24AA9LLA2AA9LLBABAACOBAAL", "ABAA9OBABBBACOBALBAA10AALDA100", "0AALBA10AAO0DA1HAO00DA1HABBDAA2", "A1HAOBDA114ABBDA24AA9LLA2AA9LLB", "LLA24A9LLLABAA9OBABBBACOBALBAA", "LA24A9LLAABAA9LBABAAACOBALBACC0", "COBABBACOOAALBA10AAA0DA10AO0DD", "DA10AO0DAA1HAO0DA1HHABBDA24ABBL"]],
[["LA24ABBDAA1HAO0DA1H0AALBA10AAAB", "1HAOBDA1H0AALDA10AAABAACOBABA", "AO0DA10AAALBACOBABAAA9LLA24ABBB", "LBACOBABAAA9LLA24ABBBDA1HAO0DD", "A9LLA24A9BBDA1HAOBDDA10AA0DA1CO", "BDA14ABBDDA10AO0DA1COBALBACOBL", "A1HAO0DA110AALBACOBBABAA9LLA224", "0AALBACOBBABAA9LLA224ABBDA1HAAO", "ABAA9LLAB24ABBDA14AAO0DA1HAO0L", "AO0DA10AAALBACOBABAAA9LLA24ABBB", "LBACOBABBAA9LLA24A9BBDA1HABBDD", "A9LLABAA9BBDA24ABBDDA1HAO0DA1CO"]],
[["BL4AA20BAAAA2HBA1LDBHBA1ODA90A1", "ODA9BBAOBACBDAOL4AADABLAAA20B", "AA2HBA1LDBHAA1ODA9BA1OLACBBAOLA", "CBDABL4AADABLAAA2HB0AAABHBA1OO", "HAA1ODA9BA10LACBDAOLACLDABLAALD", "AB0AAA2HB0BAABHAA1OOB4AA1OLACA", "10LACBDABBACLDABLAALDA90AAABH90", "BAOBHAA1OOB4AA10LACAA20LACLDA0B", "A1LDAB0AALDA90BAABH9BBAOB4AA1A", "OLA9BBAOLACBDABL4AADABLAAA2HB0A", "AA2HBA1ODBHAA1ODA9BA1OLACBDAOL", "CBDABLAAADAB0AAA2HB0AAABHAA1OOB"], ["BAABHAA1OOB4AA1OLACAA10LACLDA0B", "ACLDAB0AALDA90AAABH90BAOB4AA", "L4AA10LACAA20LACLDAHBA1LDAB0A1O", "DA90BAABH9BBAOB4AA1AOL4AA10LAA", "A20BACLDAHBA1LDA90A1ODA90BAOBAC", "BBAOB4AA1ABL4AA20LAAAA2HBA1LDB", "BA1ODA90B1ODA9BBAOBACBDAOL4AADA", "BLAAA20BAAAA2HBA1LDBHAA1ODA90A1", "OLA9BBAOBACBDABL4AADABLAAA20B0", "A1LDAB0AALDA90BAABH9BBAOB4AA1AO", "L4AA10LACAA20BACLDAHBA1LDA90A1", "DA90BAOBH9BBAOB4AA1AOL4AA20LAAA"]]
];
let match = date.match(/^(\d{4})-(\d{2})-(\d{2})/);
if (!match) {
alert("Invalid date: " + date);
return;
}
let [_, y, m, d] = match.map((a,b) => +a)
let pass = "";
for (let i = 6; i >= 0; --i) {
let letters_map = tables[i];
let year_map = letters_map[y % letters_map.length];
let month_map = year_map[(m - 1) % year_map.length];
pass += month_map[d - 1];
}
let final_letters = "ABLOD10942CH";
let output = []
for (let x = 0; final_letters[x]; ++x)
output.push(final_letters[x] + pass);
alert(output.join("\n"));
})();