Olá pessoa!
Recentemente estava analisando uma aplicação que requisitava uma senha.
O método de validação da senha era feito da seguinte forma:
Nos caracteres da senha eram aplicadas várias operações binárias em uma máscara de 16 bytes.
A máscara de 16 bytes é a seguinte:
01 23 45 67 89 AB CD EF FE DC BA 98 76 54 32 10
Usando como exemplo uma senha aabbcc, as operações binárias geravam o seguinte resultado:
Senha: aabbcc
Resultado: 61 A6 01 70 27 3E 74 A5 BE 90 35 5F FE 8E 86 AD
Depois cada byte do resultado era quebrado em duas partes (4 bits) e usado como index de um array de caracteres de 0 à f, obtendo uma string de 32 caracteres:
cadeia: "0123456789abcdef"
Resultado: "61a60170273e74a5be90355ffe8e86ad"
Esse resultado era comparado com um valor fixo.
Abaixo um trecho das operações binárias usadas (neste caso ror), trechos semelhantes foram usados uma infinidade de vezes:
add r8d,edx
mov ecx,r8d
mov eax,r8d
not ecx
and eax,edx
and ecx,r10d
or ecx,eax
mov eax,r8d
add ecx,dword ptr ss:[rsp+8]
lea r9d,qword ptr ds:[rcx+r11+242070DB]
ror r9d,F
No fim das contas eu consegui descobrir a senha original, mas fiquei curioso sobre esse forma de verificação.
Alguém saberia dizer se esse algoritmo ou técnica é conhecida? Ou que tipo de criptografia foi usada?
Obrigado.