https://dememax.dreamwidth.org/181802.html Компания У дала два
apk с определённой задачей.
Быстро
нашёл, как из apk с помощью
dex2jar получить jar-файлы, а потом с помощью
jd-gui получить исходный код.
Этого хватило на первую часть первого apk, а потом меня ожидала засада: некоторые java-файлы созданные jd не то чтобы не содержали кода методов, некоторые из них и классов не содержали!
А некоторые части кода не вызывали доверия, например:
(new int[2])[0] = какое-то число;
(new int[2])[1] = другое число;
int i = (new int[2])[b];Сразу понятно, что не будет такое работать (в смысле, скомпилируется и будет работать, но смысла - нет вообще).
Пошёл смотреть всё же, что javap рассказывает. Но это же надо знать
эти инструкции, а я до такого практически никогда не спускался.
Но этого было достаточно, чтобы понять, что jd нагенерил полную чушь здесь!
Делать нечего, пошёл искать что-то более продвинутое в плане получения java-кода из class-файлов.
Через проект
procyon вышел на
cfr, и вот этот уже намного лучше перевёл всё в java-код, и пустой файл обрёл соответствующий класс внутри, аллилуия! Тот кусок превратился в более осмысленный.
Но "недолго музыка играла", всплыли ещё участки, где нет смысла.
"Искусство в большом долгу!" (Покровские ворота)
Что ж, пойду читать
эту смешенную смешную машину, обхихикаться...
С другой стороны, понял, что ничего сверхестественного за десятилетия с явой ничего не произошло,
я когда-то сам запутывал свой код для апплета.
Кто не в курсе, в яве можно много чего "накрутить", т.к. там используется юникод и есть контексты, в которых различается использование идентификатора, поэтому, например, можно:
- для классов, их методов, переменных - можно такие юникодовские имена выбирать, что потом это видеть, ну, только - развидеть!!!
- вполне допустимо иметь и переменную, и метод с одним и тем же названием, т.к. по месту использования понятно, что из этого используется
- и перегрузку никто не отменял, у вас может быть метод класса (статический) и объекта
- на всё это накладывается, что в этом же коде может быть и тип с таким же именем
- наверно, я что-то забыл, например, что ключевое слово может использоваться для имени класса...
в общем, весело потом на это смотреть человеку с его размером "кэшей", очень быстро всё вытесняется.