Скажите, процесс компиляции Java-мидлета обратим, или нет? То есть, другими словами, можно ли с помощью декомпиляции получить рабочий исходник мидлета (без его дополнительной доработки)?
![]() Обратим Ли Процесс Компиляции Мидлета?, Вопрос начинающего. |
![]() |
![]() |
![]() |
![]() |
![]() |
Здравствуйте, гость ( Вход | Регистрация ) |
![]() Обратим Ли Процесс Компиляции Мидлета?, Вопрос начинающего. |
Oleg_SK |
![]() |
Новичок ![]() Группа: Пользователи Сообщений: 6 Регистрация: 15.3.2006 Пользователь №: 74 328 Модель телефона: Motorola e398 Прошивка: Moto-Symbian_1.4_48R Рейтинг: 0 ![]() |
Скажите, процесс компиляции Java-мидлета обратим, или нет? То есть, другими словами, можно ли с помощью декомпиляции получить рабочий исходник мидлета (без его дополнительной доработки)?
|
Smi1ee |
![]() |
Мастер ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 168 Регистрация: 9.3.2006 Из: Новосибирск Пользователь №: 73 484 Модель телефона: C350L Прошивка: 82R Рейтинг: 60 ![]() |
Конечно java-мидлет можно декомпилировать. Но так как часто после этого мидлет обрабатывают обфуксатором, то после декомпиляции он оказывается нерабочим и нужно его дорабатывать. А вообще по этой теме есть куча информации и есть гугл.
|
Andy51 |
![]() |
![]() 0xFFFF ![]() ![]() ![]() ![]() ![]() ![]() Группа: Разработчики Сообщений: 832 Регистрация: 28.3.2006 Из: Нижний Новгород Пользователь №: 76 255 Модель телефона: E398, Milestone 2 Прошивка: 49R w/ElfPack2 Настроение: ^^, Рейтинг: 1224 ![]() |
Цитата(Oleg_SK @ Четверг, 27 Апреля 2006, 6:16) Скажите, процесс компиляции Java-мидлета обратим, или нет? То есть, другими словами, можно ли с помощью декомпиляции получить рабочий исходник мидлета (без его дополнительной доработки)? Без дополнительной обработки - нельзя, а так - можно. После декомпиляции нужно править код: иногда switch написать, try..catch поставить в основном. Я этим сам не так давно начал заниматься, скажу что переделываются легко не все мидлеты, но зато какой результат! :D А самый реальный декомпилер - Java Decompiler by [wl] Автор проги известен у нас на форуме как wlcool |
Navigator |
![]() |
Опытный ![]() ![]() ![]() Группа: Пользователи Сообщений: 147 Регистрация: 2.11.2004 Из: П-П Пользователь №: 19 313 Модель телефона: E398 Прошивка: MotoSymbian 1.4 Рейтинг: 85 ![]() |
|
wl` |
![]() |
Интересующийся ![]() ![]() Группа: Пользователи Сообщений: 49 Регистрация: 13.12.2005 Пользователь №: 61 943 Модель телефона: Nokia 6681 Прошивка: ?? Рейтинг: 7.5 ![]() |
jad.exe в чистом виде не переименовывает имена методов и переменных (хотя переменные переименовывает, но криво, лучше бы не). В итоге в декомпилированных классах по пятьдесят методов a(...); b(...); причём далеко не всегда очевидно, где какой метод используется, и получаются кучи ambiguous-ошибок. Моя оболочка делает все имена методов и переменных уникальными, поэтому если ошибки и остаются, то только от самого jad.exe. - типа нераспознанные исключения, свитчи... Но с небольшим опытом такие ошибки очень легко исправить.
|
grafmoto |
![]() |
![]() ЯваМотоКодер ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Почётные мотофаны Сообщений: 2 003 Регистрация: 15.10.2004 Из: Северодвинск Пользователь №: 16 752 Модель телефона: iPhone 3Gs Прошивка: iOS 6.1.3 Рейтинг: 703 ![]() |
децл потестил :
wlcool: public iTunesApplet() { super("iTunes", "1.0"); synchronized(bv.m_aObject) { EventManager._registerEventHandlerObjectV("ITUNES_START_PLAY_2", this); EventManager._registerEventHandlerObjectV("ITUNES_START_DOD", this); _avV(); } } public final void _handleEventObjectObjectV(Object obj, int i, Object obj1) { ... DJ Java Decompiler 3.7: public iTunesApplet() { super("iTunes", "1.0"); synchronized(bv.a) { EventManager.registerEventHandler("ITUNES_START_PLAY_2", this); EventManager.registerEventHandler("ITUNES_START_DOD", this); a(); } } public final void handleEvent(Object obj, int l, Object obj1) { ... думаю результат на лице :-) зачем она у тебя имена методов так? |
wl` |
![]() |
Интересующийся ![]() ![]() Группа: Пользователи Сообщений: 49 Регистрация: 13.12.2005 Пользователь №: 61 943 Модель телефона: Nokia 6681 Прошивка: ?? Рейтинг: 7.5 ![]() |
это необфуцированный мидлет похоже. Для таких нужно убирать галку "Deobfuscate" before decompile. Потому что имена методов и так уникальны.
Кроме того, у меня там есть файл except.lst, с названиями методов, которые не нужно переименовывать, так вот там в основном всё из MIDP2.0 и CLDC1.0, для разных сторонних библиотек и JSR нужно пополнять его вручную... |
grafmoto |
![]() |
![]() ЯваМотоКодер ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Почётные мотофаны Сообщений: 2 003 Регистрация: 15.10.2004 Из: Северодвинск Пользователь №: 16 752 Модель телефона: iPhone 3Gs Прошивка: iOS 6.1.3 Рейтинг: 703 ![]() |
|
Andy51 |
![]() |
![]() 0xFFFF ![]() ![]() ![]() ![]() ![]() ![]() Группа: Разработчики Сообщений: 832 Регистрация: 28.3.2006 Из: Нижний Новгород Пользователь №: 76 255 Модель телефона: E398, Milestone 2 Прошивка: 49R w/ElfPack2 Настроение: ^^, Рейтинг: 1224 ![]() |
А вот пример из обфусцированного мидлета
DJ 3.7 Код private void _mthbyte(int i1) { a(_fldint); a(_fldint, 2, i1); _mthif(4, _fldint, 2); a(4); a(4, 3, i1 >> 1); _mthif(4, _fldint, 3); _mthif(_fldchar, _fldint, 2); _mthif(_fldchar, _fldchar, 3); for(int j1 = 1; j1 <= 2; j1++) { n n1 = F[j1]._fldif[_fldint]; n n2 = F[j1]._fldif[_fldchar]; n2.b = n1.b + (int)((long)i1 * (long)n1._fldgoto >> 16); n2._fldgoto = n1._fldgoto + (int)((long)i1 * (long)(int)((long)F[j1]._fldnew * (long)n1.f >> 16) >> 16); } } wlcool Код private void _byteIV(int j) { _aIV(m_intI); _aIIV(m_intI, 2, j); _ifIIV(4, m_intI, 2); _aIV(4); _aIIV(4, 3, j >> 1); _ifIIV(4, m_intI, 3); _ifIIV(m_charI, m_intI, 2); _ifIIV(m_charI, m_charI, 3); for(int i1 = 1; i1 <= 2; i1++) { n n1 = m_Fak[i1].m_ifan[m_intI]; n n2 = m_Fak[i1].m_ifan[m_charI]; n2.m_bI = n1.m_bI + (int)((long)j * (long)n1.m_gotoI >> 16); n2.m_gotoI = n1.m_gotoI + (int)((long)j * (long)(int)((long)m_Fak[i1].m_newI * (long)n1.m_fI >> 16) >> 16); } } Сразу видно, где какая функция вызывается, где поле класса и какого оно типа(m_charI = поле класса типа int) |
Navigator |
![]() |
Опытный ![]() ![]() ![]() Группа: Пользователи Сообщений: 147 Регистрация: 2.11.2004 Из: П-П Пользователь №: 19 313 Модель телефона: E398 Прошивка: MotoSymbian 1.4 Рейтинг: 85 ![]() |
«Deobfuscate» это да, хорошая штука :) Только вот jad и после такой обработки очень многие вещи не может нормально декомпилировать. Попробуйте декомпильнуть им приложение, пропущенное через Zelix KlassMaster — поймёте ;)
Цитата(wlcool @ Четверг, 27 Апреля 2006, 15:33) а ты сделай так, чтобы можно было к нему библиотеки подцеплять, а он, основываясь на них, решал, какие методы надо переименовывать, а какие нет. |
wl` |
![]() |
Интересующийся ![]() ![]() Группа: Пользователи Сообщений: 49 Регистрация: 13.12.2005 Пользователь №: 61 943 Модель телефона: Nokia 6681 Прошивка: ?? Рейтинг: 7.5 ![]() |
идея здравая, но этой программе уже почти год и я всё в ней уже забыл.
наверное проще написать отдельный парсер, который except.lst будет формировать, однако - лень.. java на смартах хреново работает, так что я ей уже почти не занимаюсь - разве что так, иногда, чтобы не потерять сноровку. Кстати у меня на сайте где-то была статья про взлом самого ZKM :о) |
Navigator |
![]() |
Опытный ![]() ![]() ![]() Группа: Пользователи Сообщений: 147 Регистрация: 2.11.2004 Из: П-П Пользователь №: 19 313 Модель телефона: E398 Прошивка: MotoSymbian 1.4 Рейтинг: 85 ![]() |
|
![]() ![]() |
Текстовая версия | Сейчас: 28.7.2025, 19:08 |
Форум живёт: