![]() |
Конкурс
НУЖНО ВВЕСТИ ТАКОЙ ПАРОЛЬ, ЧТОБЫ ПРОИЗОШЛА ОШИБКА. КТО ПЕРВЫЙ ТОТ И ПОБЕДИЛ. ВЫ ДОЛЖНЫ ОБЪЯСНИТЬ СУТЬ ЭТОГО БАГА И НАПИСАТЬ ЭТУ СТРОКУ НА ФОРУМЕ. Да и ещё на если, кто думает, что это развод чистой воды (прпаши ближнего своег) иди на (http://www.kiber-zona.org/index.php?showtopic=2044) форум киберзоны конкурс и смотри мой ответ с прохлждением.
#include <stdio.h> #include <stdlib.h> #include <string.h> #define len 255 int test(); int main() { int i = test(); system("PAUSE"); } int test() { char buff[len],forprint[len]; printf("ENTER PASSWORD: "); fgets(&buff[0], len-1, stdin); strcpy(&forprint[0], &buff[0]); buff[strlen(&buff[0])-1] = '\0'; //-------------------------------------------------start register int i=0,a=0; size_t n; n = strlen(buff); for (;i<n;i++) { if (a >= 32764) a = 0x00; else a += buff[i]; } for (i=0;i<n; i++) { buff[i] = (buff[i] ^ a) ^ (n^i); } //--------------------------------------------------------AND if (strcmp("}trrwy", &buff[0])==0) { printf("PASSWORD Ok: "); printf(forprint); } else { printf("INVALID PASSWORD: "); printf(forprint); } } |
Зачем выкладываешь вопрос, если рядом лежит ответ? А вообще ничего интересного, помимо %s можно и другие типы подставлять.
|
>>buff[strlen(&buff[0])-1] = '\0';
класс |
ZaCo, непросто класс, это просто верх искусства. Собственно вопрос к ТС, зачем было писать такой извратный код, если главной фичой была уязвимость в printf ? Дело в том, что знающий человек сразу проверит программу на переполнение буффера и на уязвимости в таких функциях, как printf, а новичек даже заморачиваться не будет на такую ерунду, следовательно незачот. Мне так и вообще не понравился такого плана конкурс, складывается впечатление, что автор начитался Криса Касперски и начал релизить сомнительного рода конкурсы.
|
Цитата:
Я не говорил, что квест сложный, квест простой. |
| Время: 05:37 |