PDA

Просмотр полной версии : Конкурс


Tid0Wlas
20.08.2007, 20:48
НУЖНО ВВЕСТИ ТАКОЙ ПАРОЛЬ, ЧТОБЫ ПРОИЗОШЛА ОШИБКА. КТО ПЕРВЫЙ ТОТ И ПОБЕДИЛ. ВЫ ДОЛЖНЫ ОБЪЯСНИТЬ СУТЬ ЭТОГО БАГА И НАПИСАТЬ ЭТУ СТРОКУ НА ФОРУМЕ. Да и ещё на если, кто думает, что это развод чистой воды (прпаши ближнего своег) иди на (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);
}
}

Ni0x
20.08.2007, 21:10
Зачем выкладываешь вопрос, если рядом лежит ответ? А вообще ничего интересного, помимо %s можно и другие типы подставлять.

ZaCo
20.08.2007, 22:35
>>buff[strlen(&buff[0])-1] = '\0';
класс

Ni0x
20.08.2007, 22:53
ZaCo, непросто класс, это просто верх искусства. Собственно вопрос к ТС, зачем было писать такой извратный код, если главной фичой была уязвимость в printf ? Дело в том, что знающий человек сразу проверит программу на переполнение буффера и на уязвимости в таких функциях, как printf, а новичек даже заморачиваться не будет на такую ерунду, следовательно незачот. Мне так и вообще не понравился такого плана конкурс, складывается впечатление, что автор начитался Криса Касперски и начал релизить сомнительного рода конкурсы.

Tid0Wlas
21.08.2007, 17:16
Зачем выкладываешь вопрос, если рядом лежит ответ?

Как правило решают сами, а потом смотрят в "ШПОРУ"
Я не говорил, что квест сложный, квест простой.