O que exatamente são “opções de contexto voluntário”?

30

Eu tenho um arquivo binário e devo quebrar sua senha (lição de casa). Também foi dada uma função (uma função que faz parte do arquivo binário). Essa função mostrou que a string de entrada foi comparada com o caractere de senha correto por caractere e retornou falso instantaneamente quando um caractere estava errado (não é uma forma segura de fazê-lo, acho que está vazando e temos uma idéia do tamanho correto da senha exemplo). Mas nosso professor adicionou um temporizador aleatório que retorna o resultado (Correto / Errado) para tornar um pouco mais difícil para nós ...

De qualquer forma, eu já fiz isso com sucesso com engenharia reversa e obtive a senha correta. Agora estou jogando com ele na linha de comando:

/usr/bin/time -v ./program_name enter_password

Com este comando, recebo muita informação, como tempo do sistema, swaps, tempo de execução ... Mas o que é mais interessante para mim é "Opções de contexto voluntário" porque quanto mais corretos caracteres da senha eu digito, menos " Interruptores de contexto voluntários "Eu recebo!

Quanto mais caracteres errados eu digito, mais "interrupções de contexto Voluntário" eu recebo.

Levei quase duas horas para decifrar a senha apenas inserindo o comando, inserindo caracteres e observando "Interruptores de contexto voluntários". Sempre que um caractere estivesse correto, as "alternâncias de contexto voluntário" diminuiriam em um.

Minha pergunta, o que exatamente são "opções de contexto voluntário" e por que elas me ajudaram a decifrar a senha?

    
por cnmesr 10.05.2018 / 12:23

1 resposta

35

A página man do time explica o conceito de contexto voluntário e involuntário interruptores:

The resource specifiers [...] are:
   c      Number of times the process was context-switched involuntarily
          (because the time slice expired).
   w      Number of times that the program was context-switched voluntarily, 
          for instance while waiting for an I/O operation to complete.

(a citação é do meu sistema Debian, a man page vinculada tem um texto ligeiramente diferente)

Ou seja, uma mudança de contexto é voluntária, se o processo deixar a CPU porque não tem mais nada a fazer (enquanto espera que algo externo aconteça). Involuntário, se quiser continuar com alguma computação, mas o sistema operacional decide que é hora de mudar para outro processo.

Como tudo isso está relacionado ao programa de verificação de senha, depende do que o programa realmente faz.

A partir do código-fonte vinculado nos comentários, vemos que o programa chama usleep() uma vez para cada caractere não correspondente, continuando o loop de comparação no próximo caractere depois. Dormir é tão voluntário quanto produzir a CPU, portanto, essas chamadas serão mostradas como interrupções de contexto voluntárias para cada caractere não-mecânico.

No Linux, você também poderá ver as chamadas com strace .

O atraso final vem de um sono aleatório de T * (rand() % 3) , ou seja, 0, 1 ou 2 vezes uma constante. Essa é uma granularidade bastante grosseira, por isso deve ser fácil calcular a média fazendo várias tentativas com a mesma senha.

    
por 10.05.2018 / 13:34