Всем fprintf(stdout,"Hello World!\n"); Это моя первая статья, так что может быть не очень... В реверсе и pwn я недавно, но мне дико нравится это, потому что я давно пишу код на C/C++/python в следствии чего мне проще понять код, ибо есть опыт. Эта статья нужна больше не для чайников и даже не для проженых самоваров, а для оплавленных кипятильников. Так что как-то так. По правде говоря, мне очень сложно что-то кому-то объяснять из этой тематики. Но ничего напрактикуемся, как говорится "Практика решает ВСЁ !"

Приступим, так сказать к взлому

вот что мы имеем, исходный код программы
вот что мы имеем, исходный код программы

Так как нам дан исходный код и сама задача довольно проста, нам совершенно нет никакого смысла кидать её в отладчик и т. д. и т. п.

Рассмотрим, что дано:

char input[256];

char serial[] = "f2hwldozg|:wbq";

int i;

Массив типа char, в который, видимо будем загружать флаг, какой-то массив такого же типа, где уже есть набор символов и переменная типа int. Смотрим дальше:

printf("Enter flag to check: ");

scanf("%s", input);

Тоже изи: будем записывать в массив строчку

for (i = 0; i < strlen(serial); i++) {

if (input[i] + i != serial[i]) {

printf("Wrong position %d!\n", i);

return 0;

}

}

Вот та часть программы, в которой всё происходит, думаю, что это очевидно...

И так у нас есть пошаговый цикл for, который идёт с 0 до длины нашего массива

serial . После чего стоит условие, которое гласит:

ЕСЛИ i-ый элемент input со смещением i не равно флагу, то выход из программы путём return 0 ; ИНАЧЕ продолжаем цикл.

Что за смещение?

Так как у нас каждый символ, клавиша и т. д. согласуется с таблицей ASCII она имеет так сказать свой номер. Например:

Буква U имеет номер по таблице ASCII 85 (DEC), когда мы прибавляем к ей значение 2, будет соответственно число 87, а это уже буква W.

Зная это не трудно догадаться, что нам нужно ввести такие буквы, которые при таком смещении будут равны строке в массиве serial . После этого таск будет решен.

Сделаю 3 буквы, дальше сами:

i = 0

ASCII f = 102(DEC): 102+0 = 102 => 1 символ f

i=1

ASCII 2 = 50(DEC): 50-1 = 49 => 2 символ 1

i=2

ASCII h = 104(DEC): 104-2=102 => 3 символ f

итд.

На этом моя первая статья в Habr закончена.

ОТВЕТ: f1fth_is_s0lVd