RetTr0 3113
New member
Здравствуйте форумчане. Я плохо знаю C и C++. Помогите пожалуйста с реверсом, я получил такой ключ MTQKCQ-RTQZMJ-KGXJOS. Но на сколько я понял, в программе используется алгоритм, который изменяет части ключа и сравнивает их с исходными. Мне не нужно говорить полностью флаг, но так как я не знаю C на достаточном уровне, я бы не отказался от пояснений к коду. Вот функция прямиком из гидры:
Код:
bool check_chunk(long param_1, ulong param_2)
{
int local_14;
ulong local_10;
local_10 = 0;
local_14 = 0;
while (local_14 < 6) {
local_10 = (local_10 + (long)(local_14 + *(char *)(param_1 + local_14))) * 0x100;
local_14 = local_14 + 1;
}
return param_2 == local_10 >> 8;
}
А вот функция main:
Код:
undefined8 main(int param_1,undefined8 *param_2)
{
char *__s;
bool bVar1;
int iVar2;
undefined8 uVar3;
size_t sVar4;
if (param_1 < 2) {
printf("Usage: %s <serial_number>\n",*param_2);
uVar3 = 0xffffffff;
}
else {
__s = (char *)param_2[1];
sVar4 = strlen(__s);
if (sVar4 == 0x14) {
if ((__s[6] != '-') || (__s[0xd] != '-')) {
puts("Invalid serial!");
}
bVar1 = false;
iVar2 = check_chunk(__s,_secret_first,_secret_first);
if (iVar2 == 0) {
exit_m("First check failed!");
}
else {
iVar2 = check_chunk(__s + 7,_secret_second,__s + 7);
if (iVar2 == 0) {
exit_m("Second check failed!");
}
else {
iVar2 = check_chunk(__s + 0xe,_secret_third,__s + 0xe);
if (iVar2 == 0) {
exit_m("Third check failed!");
}
else {
bVar1 = true;
}
}
}
if (bVar1) {
puts("Access granted! Welcome!");
printf("Your flag is kks{%s}\n",__s);
}
uVar3 = 0;
}
else {
puts("Incorrect serial number!");
uVar3 = 0xfffffffe;
}
}
return uVar3;
}
Мне нужно сделать так, чтобы этот ключ проходил проверку. Можно ли каким-то образом воспользоваться angr для решения этого задания?
Спасибо всем заранее.
Ссылка скрыта от гостей