dememax: (Hacker Emblem)
[personal profile] dememax
Компания У дала два 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-код, и пустой файл обрёл соответствующий класс внутри, аллилуия! Тот кусок превратился в более осмысленный.

Но "недолго музыка играла", всплыли ещё участки, где нет смысла.
"Искусство в большом долгу!" (Покровские ворота)
Что ж, пойду читать эту смешенную смешную машину, обхихикаться...

С другой стороны, понял, что ничего сверхестественного за десятилетия с явой ничего не произошло, я когда-то сам запутывал свой код для апплета.

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

https://mpd.livejournal.com/186127.html

Date: 2022-12-11 07:28 pm (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

А к чему это такое издевательство вообще?

juan_gandhi: (Default)
From: [personal profile] juan_gandhi

Хм. Можно не заморачиваться так уж такой фигней. А просто дать что-нибудь запрограммировать. Чуть ли не физ-баз.

Date: 2022-12-12 10:15 am (UTC)
From: [personal profile] sassa_nf
I think decompilers work only for code generated using a few standard compilers. (javac, maybe scala and cotlin)

I patched a few methods by hand and using ASM, and the decompilers were stuck, unable to express that code in Java.

Profile

dememax

May 2023

S M T W T F S
 123456
78910111213
14151617181920
21 2223 24252627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 16th, 2025 11:04 pm
Powered by Dreamwidth Studios