Перейти к содержимому

Фото
- - - - -

ZeroTurnaround


  • Вы не можете создать новую тему
  • Please log in to reply
17 ответов в этой теме

#1 ParadoxL

ParadoxL
  • Постоялец
  • 4 756 сообщений
  • Откуда:Edinburg

Отправлено 16 Сентябрь 2011 - 16:14

Решил Вас развеселить ....
с утреца копался в конторе в архивах EestiPäevaleht в поисках судоку (они у них лучше чем в постимеесе) и наткнулся на интересную рекламу ... :D

Тут на наш общий праздник вышла реклама в газете.
Так как уже прошло достаточно долго времени и кто хотел, тот давно уже отправил решение.
То если мы тут напечатаем решение, никто не обидится .... надеюсь.

Итак контора предлагает пройти квест, по решению которого предлагается возможность на интервью на должность Java кодера...
zeroturnaround предложение

Буду вывешивать решение шаг за шагом ... а если кто-то решит следующий шаг то пишите сюда...

Ну что понеслася ...

Кто начнет? :)

Сообщение изменено: Инкуб (16 Сентябрь 2011 - 16:22 )

  • 0
Victoria nulla est, Quam quae confessos animo quoque subjugat hostes ...
Верю в смерть после жизни, любовь после секса и в крем после бритья ...

#2 Warvick

Warvick
  • Пользователь
  • 411 сообщений
  • Откуда:Tallinn

Отправлено 16 Сентябрь 2011 - 17:41

Халява, кроме одного нюанса. Но задумка - 5! )
ЗЫ. На С# можно одним выражением(в 1 строку).
Думаю интересно было бы на перле посмотреть реализацию.
  • 0
Да, я такой!

#3 ParadoxL

ParadoxL
  • Постоялец
  • 4 756 сообщений
  • Откуда:Edinburg

Отправлено 16 Сентябрь 2011 - 17:54

Warvick, ну так пиши ответ.

Хорошо ... пишем ...
public class ZeroTurnaround {

      final static String z = "62 69 74 2e 6c 79 2f 7a 74 2d 70 75 7a 7a 6c 65";

      public static void main(String[] args) {

            final String[] a = z.split(" ");

            for(int i = 0; i < a.length; i++)

                  System.out.print((char) Byte.parseByte(a[i],16));

  }

}

Получаем

bit.ly/zt-puzzle

То есть идем по

http://bit.ly/zt-puzzle

Там картинка ...

Размещенное изображение

Что дальше с ней делаем?
  • 0
Victoria nulla est, Quam quae confessos animo quoque subjugat hostes ...
Верю в смерть после жизни, любовь после секса и в крем после бритья ...

#4 Агент

Агент

    Ништяяяяк

  • S-Модератор
  • 17 594 сообщений
  • Откуда:Таллинн

Отправлено 16 Сентябрь 2011 - 17:58

а ты посмотри что ZT делает. Их JRebel позволяет обойтись без редеплоев. вот и ответ, видимо :rolleyes:
  • 0

По часам только таблетки надо принимать! А властвовать и унижать можно в любое время!

#5 ParadoxL

ParadoxL
  • Постоялец
  • 4 756 сообщений
  • Откуда:Edinburg

Отправлено 16 Сентябрь 2011 - 18:16

Агент, :) тут квест .... JRebel конечно хорошо ... но надо пройти весь путь :))

ладно ... дальше .... открываем картинку через hex редактор ... и просматирваем ... натыкаемся на интересный момент

Размещенное изображение

PkZip архив … просматирваем дальше … натыкаемся еще на 5-6 префиксов PK\хх\хх

Что наводит на мысль, что там насколько архивов … но вспоминая формат архива понимаем что это один архив,

с вложенными папками и фалами …

пишем нехитрый код который вытаскивает арихив

      final static String png = "/lab/accept-teh-challenge.png";

 

      public static void extractZip() throws IOException {

            File file = new File(png);

            if (!file.exists()) {

                  System.out.println("file not found");

                  return;

            }

        DataInputStream dis = new DataInputStream(new FileInputStream(file));

        byte b1;

        byte b2;

        DataOutputStream dos = null;

        int cnt = 0;

        while (file.length() > cnt) {

            b1 = dis.readByte();

            cnt++;

            if (dos == null &&  (byte)'P' != b1)

                  continue;

            if ( (byte)'P' == b1) {

                        b2 = dis.readByte();

                        if ((byte)'K' == b2 && dos == null) {

                              dos = new DataOutputStream(new FileOutputStream("/lab/" + cnt + ".zip"));

                        }

                        if (dos != null) {

                              dos.write(b1);

                              dos.write(b2);

                        }

                        continue;

            }

            if (dos != null)

                  dos.writeByte(b1);

        }

        System.out.println("CNT = " + cnt);

      }

Результат имеем файлик 10269.zip ... что с ним дальше?

Прикрепленные файлы

  • Прикрепленный файл  10269.zip   138,23К   8 Количество загрузок

  • 0
Victoria nulla est, Quam quae confessos animo quoque subjugat hostes ...
Верю в смерть после жизни, любовь после секса и в крем после бритья ...

#6 Агент

Агент

    Ништяяяяк

  • S-Модератор
  • 17 594 сообщений
  • Откуда:Таллинн

Отправлено 16 Сентябрь 2011 - 18:25

Инкуб,
чувак, это банальный раржпег, зачем писать было екстрактор :) там внутри ява класс, видать его запустить надобно? я хз, я не программер :rolleyes:

Сообщение изменено: Агент (16 Сентябрь 2011 - 18:26 )

  • 0

По часам только таблетки надо принимать! А властвовать и унижать можно в любое время!

#7 ParadoxL

ParadoxL
  • Постоялец
  • 4 756 сообщений
  • Откуда:Edinburg

Отправлено 16 Сентябрь 2011 - 18:41

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

продолжаем ....

дальше запускаем ....
Размещенное изображение

на выходе файл ... опять смотрим его содержимое ...

Размещенное изображение

Есть идеи ... что с этим добром делать дальше?

Впереди самое интересное .... :D

Завтра напишу продолжение ... а вы пока подумайте ...

1.bin

Прикрепленные файлы

  • Прикрепленный файл  1.rar   7,86К   5 Количество загрузок

  • 0
Victoria nulla est, Quam quae confessos animo quoque subjugat hostes ...
Верю в смерть после жизни, любовь после секса и в крем после бритья ...

#8 Агент

Агент

    Ништяяяяк

  • S-Модератор
  • 17 594 сообщений
  • Откуда:Таллинн

Отправлено 16 Сентябрь 2011 - 18:41

там ж написано, фикси конкурренси баги :rolleyes:
  • 0

По часам только таблетки надо принимать! А властвовать и унижать можно в любое время!

#9 ParadoxL

ParadoxL
  • Постоялец
  • 4 756 сообщений
  • Откуда:Edinburg

Отправлено 16 Сентябрь 2011 - 18:43

там ж написано, фикси конкурренси баги :rolleyes:


расшифруй ... :D как на этом этапе проделать то что ты сказал? :) И что это вообще значит?
  • 0
Victoria nulla est, Quam quae confessos animo quoque subjugat hostes ...
Верю в смерть после жизни, любовь после секса и в крем после бритья ...

#10 defcon

defcon
  • Пользователь
  • 83 сообщений

Отправлено 16 Сентябрь 2011 - 19:38

Я, наверное, сейчас, все заспойлю, но там не нужно ничего фиксить :P
  • 0

#11 ParadoxL

ParadoxL
  • Постоялец
  • 4 756 сообщений
  • Откуда:Edinburg

Отправлено 16 Сентябрь 2011 - 22:11

Я, наверное, сейчас, все заспойлю, но там не нужно ничего фиксить :P


Да не парся... я думаю народу тут любая подсказка пригодится :)))
  • 0
Victoria nulla est, Quam quae confessos animo quoque subjugat hostes ...
Верю в смерть после жизни, любовь после секса и в крем после бритья ...

#12 defcon

defcon
  • Пользователь
  • 83 сообщений

Отправлено 17 Сентябрь 2011 - 23:10

Инкуб, я так понимаю ты до конца решил - мейл то по указанному адресу отправил? :)
  • 0

#13 ParadoxL

ParadoxL
  • Постоялец
  • 4 756 сообщений
  • Откуда:Edinburg

Отправлено 17 Сентябрь 2011 - 23:52

defcon, написал ... дайте мне конфетку ... обещали дать :))))

Понятно что это компилированный ява класс ….
Исходя из того что класс называется ZTChallenge
Переименовываем 1.bin -> ZTChallenge.class
Запускаем …

Размещенное изображение

Засада … декомпилируем …. Получается, что-то вроде такого

import java.io.PrintStream;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;

public class ZTChallenge extends URLClassLoader
{
    public ZTChallenge(URL aurl[])
    {
        super(aurl);
    }

    protected Class findClass(String s)

        throws ClassNotFoundException

    {

        return defineClass(s, TWISTED, 0, TWISTED.length);

    }

 

    public static void main(String args[])

        throws Exception

    {

_L1:

        if(byte1 != 0)

            break MISSING_BLOCK_LABEL_18;

        JVM INSTR pop ;

        byte1 = 2;

        fixMe();

        break MISSING_BLOCK_LABEL_31;

        args;

        System.out.println("Wow! I have encountered an exception. It must be a bug!\nPlease fix it, so I can get further.");

        System.exit(1);

        Class class1;

        args = new int[3];

        args[0] = 42;

        args[1] = 64;

        args[2] = 100;

        args = args;

        for(int i = 0; i < TWISTED.length; i++)

        {

            byte byte0 = (byte)(TWISTED[i] ^ args[i % 3]);

            TWISTED[i] = byte0;

        }

 

        System.out.println("You're on the right track! Lets see how much you know about debugging concurrency issues\n.");

        System.out.println("Aaaargh, I think I'm stuck....");

        class1 = (new ZTChallenge(new URL[0])).findClass(null);

        args = class1.getDeclaredMethod("go", new Class[0]);

        Object obj = class1.newInstance();

        args.invoke(obj, new Object[0]);

        return;

        byte byte1 = 0;

        byte1 = 0;

        null;

          goto _L1

    }

 

    private static void fixMe()

    {

        if(42 != 100)

            throw new IllegalArgumentException("Fix me! Please!");

        else

            return;

    }

 

    static final byte TWISTED[];

 

    static

    {

        byte abyte0[] = new byte[2249];

        abyte0[0] = -32;

        abyte0[1] = -66;

        abyte0[2] = -34;

        abyte0[3] = -108;

        .....

        abyte0[2246] = 102;

        abyte0[2247] = 42;

        abyte0[2248] = 117;

        TWISTED = abyte0;

    }

}


По логике вещей видим … из преобразованного массива создают класс и соответвенно экземпляр этого класса … и вызывают метод «go» .

Но нам париться не хочется … разбираться во всей этой бороде … тут ключивой момент преобразование массива … т.е.
        for(int i = 0; i < TWISTED.length; i++)

        {

            byte byte0 = (byte)(TWISTED[i] ^ args[i % 3]);

            TWISTED[i] = byte0;

        }

Переделываем ZTChallenge в

import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;

 

public class ZTChallenge extends URLClassLoader {

 

      public ZTChallenge(URL aurl[]) {

            super(aurl);

      }

 

      protected Class findClass(String s) throws ClassNotFoundException {

            return defineClass(s, TWISTED, 0, TWISTED.length);

      }

 

      public static void main(String arg[])

        throws Exception

    {

                        DataOutputStream dos = new DataOutputStream(new FileOutputStream("/lab/result.class"));

        Class class1;

        int[] args = new int[3];

        args[0] = 42;

        args[1] = 64;

        args[2] = 100;

        for(int i = 0; i < TWISTED.length; i++)

        {

            byte byte0 = (byte)(TWISTED[i] ^ args[i % 3]);

            TWISTED[i] = byte0;

            dos.write(TWISTED[i]);

        }

        dos.close();

    }

 

      static final byte TWISTED[];

 

      static {

            byte abyte0[] = new byte[2249];

            abyte0[0] = -32;

            ...

            abyte0[2248] = 117;

            TWISTED = abyte0;

      }

}


На выходе получаем … result.class ….

Завтра продолжение!!!
  • 0
Victoria nulla est, Quam quae confessos animo quoque subjugat hostes ...
Верю в смерть после жизни, любовь после секса и в крем после бритья ...

#14 Talk-To-Frank

Talk-To-Frank

    :)

  • Постоялец
  • 1 515 сообщений

Отправлено 17 Сентябрь 2011 - 23:55

ну рекламу спиз украли с хабра
отличную реализацию привел чел на питоне
  • 0

j2j


#15 ParadoxL

ParadoxL
  • Постоялец
  • 4 756 сообщений
  • Откуда:Edinburg

Отправлено 18 Сентябрь 2011 - 00:39

Talk-To-Frank, да таких вещей полным полно ... ты на любом хакерском сейшене побывай (если не боишься включать компьютер, так как взломают сразу же, если не подготовлен :))) то там таких тем очень много ... и куда интереснее ... это очень лайт эдинш!!!

вот собстна класс

Инкуб, я так понимаю ты до конца решил - мейл то по указанному адресу отправил? :)


Да я ща загружен по самые "не болуй" ... видишь даже на активах не показываюсь .... так что мне работа уж точно не нужна ...
А тут для молодежи реальная возможность ... если тока по-своему сделают :D

Прикрепленные файлы

  • Прикрепленный файл  result.rar   1,17К   8 Количество загрузок

  • 0
Victoria nulla est, Quam quae confessos animo quoque subjugat hostes ...
Верю в смерть после жизни, любовь после секса и в крем после бритья ...

#16 defcon

defcon
  • Пользователь
  • 83 сообщений

Отправлено 18 Сентябрь 2011 - 11:58

Talk-To-Frank,

>> отличную реализацию привел чел на питоне
что?
  • 0

#17 Talk-To-Frank

Talk-To-Frank

    :)

  • Постоялец
  • 1 515 сообщений

Отправлено 18 Сентябрь 2011 - 12:10

я же говорю, что видел уже похожую рекламу и там чел прошел на собеседование, написав код на питоне + ява

defcon,
http://ru.wikipedia.org/wiki/Python

Сообщение изменено: Talk-To-Frank (18 Сентябрь 2011 - 12:11 )

  • 0

j2j


#18 defcon

defcon
  • Пользователь
  • 83 сообщений

Отправлено 18 Сентябрь 2011 - 20:05

Talk-To-Frank, а, вот что такое питон ^_^
  • 0