Pull to refresh

Comments 7

Очень залипательное чтиво. Реверс на уровне HEX редактора - интересненько, интересненнько!

ну, а с чего начинать, если не с этого :)

Ну как вариант с Ollydbg =) Но опять же - это вариант на любителя. Теоретически можно было бы открыть экзешник в отладчике, пробежаться по коду (привет ассемблер =^_^=), найти точку обращения к файлу, после проанализировать что там творится (там скорее всего было бы что-то из серии SBС EAX, 2 ), ну а дальше уже создать распаковщик по вашему сценарию. Не думаю что там была бы какая-то сложная защита по типу VM Protect, максимум upx. Но с таким подходом интересной статьи бы не получилось, а это явно минус, так что Ваш метод явно интереснее как по мне.

Не знаю, похвалить ли вас за то, что своим умом дошли до циклического сдвига влево методом проб и ошибок. Или похаять за необоснованные претензии к java )))

Ваш псевдокод можно написать как:

        byte[] data = Files.readAllBytes(Path.of("data.pak"));

        for (int i = 0; i < data.length; i++) {
            byte src = data[i];
            data[i] = (byte) ((src << 1) | ((src >> 7) & 1));
        }
        
        Files.write(Path.of("data_dec.pak"), data);

Моя претензия к java была в том, что в идеальном мире , я для нужного мне битового сдвига хотел бы обойтись одним оператором << или >> на худой конец каким-то стандартным методом типа Integer.rotateLeft(int value, int shifts) ,который тоже делает битовый сдвиг.
но оба метода сдвигают биты не так, как мне хотелось бы.
вы же мне говорите "не смей ругать java" и предлагаете битовый сдвиг сделать с помощью ЧЕТЫРЕХ операторов. Хотя именно про это я и писал в статье, что нужны костыли усложняющие код.

В kotlin в стандартной библиотеке есть готовый метод: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/rotate-left.html
Сам по себе байткод jvm имеет очень небольшое количество команд и вращение битов в их число не входит. Так что вращение битов (пусть и спрятанное за красивым названием) в любом случае будет состоять из нескольких примитивных операций.

Как уже прокомментировали выше, набор инструкций (будь то jvm, cpu) ограничен и для расширения функционала создаются функции / модули / библиотеки. Integer.rotate точно бы не подошел, т.к. у него база 32 бита, а вам надо 8 бит, потому какой-нить Byte.rotate пригодился бы. Создайте PR в проект OpenJDK и возможно его примут.

Sign up to leave a comment.

Articles