Есть некая проблема. Довольно давно и плотно занимаюсь веб-программированием. но вот программированием под мобильные платформы пока увы. Понадобилось для себя переписать заготовку программы для мониторинга состояния сервера. Есть готовый мидлет в *.jar формате. Необходимо из него вытащить как ресурсы так и сорс. Чуть изменить и то и другое и обратно всё собрать. Каким образом можно сие сделать подскажите пожалуйста. Пока не знаю в какую сторону копать даже.
Здравствуйте, DiFor, Вы писали:
DF>Есть некая проблема. Довольно давно и плотно занимаюсь веб-программированием. но вот программированием под мобильные платформы пока увы. Понадобилось для себя переписать заготовку программы для мониторинга состояния сервера. Есть готовый мидлет в *.jar формате. Необходимо из него вытащить как ресурсы так и сорс. Чуть изменить и то и другое и обратно всё собрать. Каким образом можно сие сделать подскажите пожалуйста. Пока не знаю в какую сторону копать даже.
Копать в сторону декомпайлера. Например JAD. Поройся на cracklab.ru в разделе скачать. Вики почитай.
Здравствуйте, DiFor, Вы писали:
DF>Есть некая проблема. Довольно давно и плотно занимаюсь веб-программированием. но вот программированием под мобильные платформы пока увы. Понадобилось для себя переписать заготовку программы для мониторинга состояния сервера. Есть готовый мидлет в *.jar формате. Необходимо из него вытащить как ресурсы так и сорс. Чуть изменить и то и другое и обратно всё собрать. Каким образом можно сие сделать подскажите пожалуйста. Пока не знаю в какую сторону копать даже.
Ресурсы должны лежать в виде файлов в самом джаре.
С декомпиляцией и последующей сборкой несколько сложнее. Не знаю, как конкретно твой мидлет, но общая специфика мобильной разработки — впихать невпихуемое. Ради этого могут отказаться от нормального ООП и использовать всего два — три класса на весь мидлет. Частое использование switch-case, которое плохо обрабатывается декомпиляторами. Отсутствие дебаг-информации. И на 99% мидлет обработан обфускатором для уменьшения размера классов. Учитывая все это, крайне рекомендую в первую очередь попробовать отыскать исходники. Если это невозможно, то лучше подумать, как добавить нужную функциональность не прибегая к декомпиляции и пересборке проекта, а решить это наследованием от какого-либо уже существующего в мидлете класса и переопределением нужного метода.
Здравствуйте, Donz, Вы писали:
D>Здравствуйте, DiFor, Вы писали:
DF>>Есть некая проблема. Довольно давно и плотно занимаюсь веб-программированием. но вот программированием под мобильные платформы пока увы. Понадобилось для себя переписать заготовку программы для мониторинга состояния сервера. Есть готовый мидлет в *.jar формате. Необходимо из него вытащить как ресурсы так и сорс. Чуть изменить и то и другое и обратно всё собрать. Каким образом можно сие сделать подскажите пожалуйста. Пока не знаю в какую сторону копать даже.
<skipped>
Если это невозможно, то лучше подумать, как добавить нужную функциональность не прибегая к декомпиляции и пересборке проекта, а решить это наследованием от какого-либо уже существующего в мидлете класса и переопределением нужного метода.
чтобы понять что наследовать и как придется сделать небольшой реверс. Возможно и правда будет геморно восстановить компилябельные исходники, что в любом случае чтобы добавить новую функциональность придется декомпилить старую если нет исходников. А уж потом и наследоваться как вариант.
Здравствуйте, Jakop, Вы писали:
J>чтобы понять что наследовать и как придется сделать небольшой реверс. Возможно и правда будет геморно восстановить компилябельные исходники, что в любом случае чтобы добавить новую функциональность придется декомпилить старую если нет исходников. А уж потом и наследоваться как вариант.
Главное — не придется заново собирать декомпилированные исходники.
Здравствуйте, Donz, Вы писали:
D>Ресурсы должны лежать в виде файлов в самом джаре. D>С декомпиляцией и последующей сборкой несколько сложнее. Не знаю, как конкретно твой мидлет, но общая специфика мобильной разработки — впихать невпихуемое. Ради этого могут отказаться от нормального ООП и использовать всего два — три класса на весь мидлет. Частое использование switch-case, которое плохо обрабатывается декомпиляторами. Отсутствие дебаг-информации. И на 99% мидлет обработан обфускатором для уменьшения размера классов. Учитывая все это, крайне рекомендую в первую очередь попробовать отыскать исходники. Если это невозможно, то лучше подумать, как добавить нужную функциональность не прибегая к декомпиляции и пересборке проекта, а решить это наследованием от какого-либо уже существующего в мидлете класса и переопределением нужного метода.
Спасибо за ответы. Декомпилил программу с помощью JD-GUI. Большая часть кода вполне читаема, есть конечно разного рода узкие места аля "if (??? == ololo)". Тут конечно только логику восстанавливать. И немного непонятна сия конструкция которая в разных видах используется во многих местах: "this.a.getDisplay().setCurrent(LoginScreen.access$000(this.a));" И именно обращение к методу через доллар =\ Сие чудо писалось в нетбинсе, что выдала структура папок внутри приложения. Собирать обратно сие я так понимаю лучше именно через него-же, верно?
Здравствуйте, DiFor, Вы писали:
DF>Спасибо за ответы. Декомпилил программу с помощью JD-GUI. Большая часть кода вполне читаема, есть конечно разного рода узкие места аля "if (??? == ololo)". Тут конечно только логику восстанавливать. И немного непонятна сия конструкция которая в разных видах используется во многих местах: "this.a.getDisplay().setCurrent(LoginScreen.access$000(this.a));" И именно обращение к методу через доллар =\
В долларе ничего плохого нет, это разрешенный символ для именования в яве. Так как люди сознательно редко используют его для названия классов или методов, то можно считать, что присутствие доллара говорит о том, что класс или метод синтетические, то есть были созданы самим компилятором. Например, подобное происходит для именования внутренних или анонимных классов. Для доступа к полю внешнего класса из анонимного генерируется синтетический метод.
DF>Сие чудо писалось в нетбинсе, что выдала структура папок внутри приложения. Собирать обратно сие я так понимаю лучше именно через него-же, верно?
Нет. Я же писал, что вариант полной компиляции декомпилированных исходников наихудший. Попробуй проанализировать логику и внести изменения в нее через наследование и переопределение нужных методов.
Даже если наследование не решит проблемы, то я сначала бы посмотрел, можно ли решить проблему, напрямую изменив байт-код классов (библиотека BCEL), внедрив нужные мне вызовы своего класса в необходимые места.
Не знаю как твой проект, но те, что я декомпилировал, выглядели почти безнадежными в плане обратной компиляции.
Здравствуйте, Donz, Вы писали:
D>В долларе ничего плохого нет, это разрешенный символ для именования в яве. Так как люди сознательно редко используют его для названия классов или методов, то можно считать, что присутствие доллара говорит о том, что класс или метод синтетические, то есть были созданы самим компилятором. Например, подобное происходит для именования внутренних или анонимных классов. Для доступа к полю внешнего класса из анонимного генерируется синтетический метод.
D>Нет. Я же писал, что вариант полной компиляции декомпилированных исходников наихудший. Попробуй проанализировать логику и внести изменения в нее через наследование и переопределение нужных методов. D>Даже если наследование не решит проблемы, то я сначала бы посмотрел, можно ли решить проблему, напрямую изменив байт-код классов (библиотека BCEL), внедрив нужные мне вызовы своего класса в необходимые места. D>Не знаю как твой проект, но те, что я декомпилировал, выглядели почти безнадежными в плане обратной компиляции.
Хорошо попробуем что-нибудь сделать, в идеале конечно полностью бы взять и переписать всё, но както это ужасно будет. Хотелось просто чуток изменений внести в программу и всё.