CTF CTF. Задачка для разминки мозгов (от 5h3ll) : решение

  • Автор темы Cherimoya Eihn
  • Дата начала
  • Теги
    ctf
Cherimoya Eihn

Cherimoya Eihn

Active member
11.12.2017
32
30
Привет!

Не приходилось до этого пользоватся disassemble и вот появился повод - тема от 5h3ll.
В процессе пришлось перечитать кучу форумов и разбора реальных примеров, но попробую изложить в кратце.
Значить так:
Фёрст - скачиваем скрипт и сразу пробуем codeby, CodeBy, cODEbY, ybedoc, yBedoC, YbEDOc, codeby.net, codebynet и так далее...
Ноу лак, ноу кукумбер.
Секонд - запускаем
strings CodeBy-Simple-CTF
и смортим, нет ли чего интересного:
Код:
/lib64/ld-linux-x86-64.so.2
libc.so.6
puts
__stack_chk_fail
printf
strlen
__cxa_finalize
__libc_start_main
GLIBC_2.4
GLIBC_2.2.5
_ITM_deregisterTMCloneTable
__gmon_start__
_ITM_registerTMCloneTable
u/UH
=&
=b
Codef
[]A\A]A^A_
%s -
;*3$"
GCC: (GNU) 8.1.0
GCC: (GNU) 8.1.1 20180531
init.c
crtstuff.c
deregister_tm_clones
__do_global_dtors_aux
completed.7340
__do_global_dtors_aux_fini_array_entry
frame_dummy
__frame_dummy_init_array_entry
codebytestctf.c
__FRAME_END__
__init_array_end
_DYNAMIC
__init_array_start
__GNU_EH_FRAME_HDR
_GLOBAL_OFFSET_TABLE_
__libc_csu_fini
_ITM_deregisterTMCloneTable
puts@@GLIBC_2.2.5
_edata
strlen@@GLIBC_2.2.5
__stack_chk_fail@@GLIBC_2.4
printf@@GLIBC_2.2.5
__libc_start_main@@GLIBC_2.2.5
__data_start
__gmon_start__
__dso_handle
_IO_stdin_used
__libc_csu_init
check_pw
__bss_start
main
__TMC_END__
_ITM_registerTMCloneTable
__cxa_finalize@@GLIBC_2.2.5
.symtab
.strtab
.shstrtab
.interp
.note.ABI-tag
.note.gnu.build-id
.gnu.hash
.dynsym
.dynstr
.gnu.version
.gnu.version_r
.rela.dyn
.rela.plt
.init
.text
.fini
.rodata
.eh_frame_hdr
.eh_frame
.init_array
.fini_array
.dynamic
.got
.got.plt
.data
.bss
.comment
Некоторые из этих стрингов попробовал ввести.
Стил ноу цуцумбер.

Далее - командой
objdump -D ./CodeBy-Simple-CTF > out.asm
пишем дамп в файл out.asm.
Так как нам извесны некоторые из сообщений ("Попробуй еще раз", "Необходимо ввести ключ" и "Молодец..."), то можно ныйти то место, где они прописанны.
Чтоб найти букву П, открываем и пишем П.
Получаем d0 9f.
Н > d0 9d, М > d0 9c.
Открываем out.asm и делаем поиск по этим значениям:
Capture.PNG


Далее в блоке <main> видно место, где эти сообщения используются.
И между ними видна сама программа.
Capture.PNG


Но так как "CodeBy" во всех вариантах уже опробован, тут видится некая зеленая подстава.
Дальше под присвоением "CodeBy" видны 6 рядов где появляются значения 2,3,2,3,5,1.
После подсказки от 5h3ll о том, что там есть сдвиг по алфавиту, я по таблице ASCII нашел соответствующие буквы.
Capture.PNG


Код подошел, но я так и не смог увидеть, где именно происходит замена букв.
В блоке <check_pw> виден цикл и какие-то сравнения, не особо понятные.
После, когда 5h3ll показал код программы, стало ясно, что в <check_pw> подается массив из этих 6 цифр (2,3,2,3,5,1), пароль введенный юзером и "CodeBy",
Там делается loop на 6 циклов, где каждая буква из "CodeBy" увеличивается на соответствующую величину из массива и сравнивается с буквой из введенного юзером пароля "ErfhGz".
Тоесть 6 проверок.

Если все проверки верны, то ОК.

В целом disassemble показался интересным, хотя понятно, что много не понятно.
Будем изучать.
На этом пока все.
Всем спасибо, все свободны ))
 

Вложения

Последнее редактирование:
5h3ll

5h3ll

Mod. Ethical Hacking
Red Team
23.01.2018
351
573
Рад что моя задача пробудила в тебе интерес к реверсу!
хорошая наглядная статья, так же ты первый и единственный из участников форума которые не составят в грей, ред или голд кто решил задачку!
 
busuzima

busuzima

Active member
22.02.2019
37
14
А вот тут мой мозг закипел и расплавился... Подскажите, с чего начать реверс, пожалуйста!
 
5h3ll

5h3ll

Mod. Ethical Hacking
Red Team
23.01.2018
351
573
Я имел в виду с чего начать изучение реверса, то бишь реверс-инжиниринга.
ну я бы посоветовал начать с этой книги и сосредоточится на х86 архетектуре.
потом только практика практика и ещё раз практика
 
Мы в соцсетях: