т.к это достаточно простой крякми (крякми же?), то напишу тут решение.
Я сижу в rz-cutter, потому что иды на линуксе нет, и декомпил может выглядеть странно (потому что используется декомпилер гидры)
1.
sub.msvcrt.dll_scanf("%31s", &var_28h);
- помещает введенное значение в var_28h
iVar1 = fcn.00401000((char *)&var_28h);
- передает это значение в функу, которое после возвращает bool (т.е прошел ли пароль проверку или нет)
Внутри функи
fcn.00401000
видим банальный XOR (оператор ^)
так как декомпилер покурил травы тут, смотрим дизасембли, чтобы узнать что суется в dest и что есть data.0040201d
dest у нас
;,<#;,\v!:/?
data.0040201d -
SCTL
Итого функция проверки выглядит как то так:
bool check_password(const char *input) {
const char *encrypted = ";,<#;,\v!:/?";
const char *key = "SCTL";
char decrypted[15];
int key_len = strlen(key);
int i;
for (i = 0; encrypted[i] != '\0'; i++) {
decrypted[i] = encrypted[i] ^ key[i % key_len];
}
decrypted[i] = '\0';
return strcmp(decrypted, input) == 0;
}
Для декрипта:
#include <stdio.h>
#include <string.h>
void decrypt(char *dest, const char *key) {
int dest_len = strlen(dest);
int key_len = strlen(key);
for (int i = 0; i < dest_len; i++) {
dest[i] = dest[i] ^ key[i % key_len];
}
}
int main() {
char dest[] = ";,<#;,\v!:/?";
decrypt(dest, "SCTL");
printf("Password: %s\n", dest);
return 0;
}
Password: hohoho_milk