книги хакеры / журнал хакер / 117_Optimized
.pdf
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
E |
|
|
|
|
|
|
|
|
C |
E |
|
|
|
||||||
|
|
X |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
||||||
|
- |
|
|
|
|
d |
|
|
|
|
- |
|
|
|
|
d |
|
||||||
|
F |
|
|
|
|
|
|
i |
|
|
|
|
F |
|
|
|
|
|
|
i |
|
||
|
|
|
|
|
|
|
t |
|
|
|
|
|
|
|
|
|
|
t |
|
||||
P |
D |
|
|
|
|
|
|
|
o |
|
|
P |
D |
|
|
|
|
|
|
|
o |
||
|
|
|
NOW! |
r |
|
|
|
|
|
NOW! |
r |
||||||||||||
|
|
|
|
to BUY |
|
|
|
|
>> unitsto BUY |
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
w |
|
|
|
|
|
|
|
|
m |
|
|
w |
|
|
|
|
|
|
|
|
m |
||
w Click |
|
|
|
|
|
o |
|
|
w Click |
|
|
|
|
|
o |
||||||||
|
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
||
|
. |
|
|
|
|
|
.c |
|
|
|
|
. |
|
|
|
|
|
.c |
|
||||
|
|
p |
df |
|
|
|
e |
|
|
|
|
|
p |
df |
|
|
|
e |
|
||||
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
g |
|
|
|
||||||
|
|
|
|
n |
|
|
|
|
|
|
|
|
|
|
n |
|
|
|
|
||||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
|
|
-x cha |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
// уязвимость форматной строки |
строки присутствует слово «baga». Например, если ввести строку |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// и переполнение буфера в стеке |
«baga %d %d %d» (без кавычек), то можно посмотреть значения |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sprintf(buf, input); |
из стека. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
else if (strstr(input, "2008")) { |
Первая ошибка переполнения буфера в стеке проявляется, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// переполнение буфера в стеке |
когда переданная строка оказывается больше 50 символов и в |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
strcpy(buf, input); |
начале строки присутствует слово «baga». Причина — в функции |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
else if (input[3]=='X') { |
sprintf(buf, input), которая записывает в буфер buf строку |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// переполнение буфера в стеке |
input без всякой проверки на количество записываемых данных |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// неправильное использование strlen(input) |
(заметь, в этой функции отсутствует еще и спецификатор формата). |
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
strncpy(buf, input, strlen(input)); |
Вторая ошибка переполнения буфера в стеке проявляется, если пе- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} else |
редана строка больше 50 символов и в строке присутствует подстро- |
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
strncpy(buf, input, sizeof(buf)); |
ка «2008». Причина — в функции strcpy(buf, input), которая |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
не делает проверку на количество передаваемых в буфер данных. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MessageBox (NULL, buf, «Bagabaga», MB_OK); |
И третья ошибка переполнения буфера в стеке проявляется, если |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
передана строка больше 50 символов, а четвертым символом в |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
строке является латинская буква X. Причина — в неверном исполь- |
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
Как видишь, в функции определен буфер buf[50]. |
зовании функции strncpy(buf, input, strlen(input)); |
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
Ошибка форматной строки проявляется, только если в начале |
третьим параметром в ней должна стоять sizeof(buf). |
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
ВТОРОЙПАЗЛ«ПОСТЕР» |
ТРЕТИЙПАЗЛ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Файл Hackers.jpg (есть на диске, прилага- |
«ВОССТАНОВИБАЙТЫ» |
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
емом к журналу) содержит скрытое сообщение: |
НарисункепоказанаCOM- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
найди его и вышли мне. |
программа(68байт),которая |
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
должнапростовыводитьна |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ПЕРВЫЙПАЗЛ«СЪЕШЬМЕНЯ» |
|
экранфразу«RESTORE BYTES |
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
OF THIS FILE, PLEASE!». |
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
Определиправильныйпаролькпрограммеeatme.exe. |
|
Восстановитрибайта(накар- |
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
ПрограмманаписананаVisualBasic6.0. |
|
тинкеонизамазаныкрасным |
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
Программуeatme.exeможнонайтинадискекжурналу |
|
цветом),чтобыпрограмма |
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
илинамоемсайтеwww.sklyaroff.ru. |
|
работалаправильно. |
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
Призыипобедители |
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
ЧЕТВЕРТЫЙПАЗЛ«ABABA» |
|
Объявляемпобедителей,отве- |
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
тившихнавопросыпрошлого |
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
Расшифруй: |
|
X-puzzle. |
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
BAAABABAABABABABABBAAAAAABAAAAABB |
|
1-еместо:samvel |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ABAABABAABAB |
|
(samkar@plavsk.tula.net) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2-еместо:VladimirShelistov |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ПЯТЫЙПАЗЛ«ЗАГАДОЧНОЕ |
|
(shelistov_v@mail.ru) |
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
3-еместо:АлексейЦветков |
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
УРАВНЕНИЕ» |
|
(xeenych@gmail.com) |
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
Посмотринапримерыиопредели,какоезна- |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
чениедолжностоятьвместознакавопросав |
|
Победителиэтогомесяца |
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
последнемуравнении: |
|
получатподпискунаz |
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
A + A = 17 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
B + B =19 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
A * B = 86 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
A + C = ? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
xàêåð 09 /117/ 08 |
|
159 |
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|