motofan logo
> 

Обратим Ли Процесс Компиляции Мидлета?, Вопрос начинающего.

Oleg_SK
сообщение 27.4.2006, 3:16


Новичок
*

Группа: Пользователи
Сообщений: 6
Регистрация: 15.3.2006
Пользователь №: 74 328
Модель телефона: Motorola e398
Прошивка: Moto-Symbian_1.4_48R

Рейтинг: 0



Скажите, процесс компиляции Java-мидлета обратим, или нет? То есть, другими словами, можно ли с помощью декомпиляции получить рабочий исходник мидлета (без его дополнительной доработки)?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
 
Ответ в темуСоздание новой темы
Ответов(1 - 11)
Smi1ee
сообщение 27.4.2006, 3:25


Мастер
****

Группа: Пользователи
Сообщений: 168
Регистрация: 9.3.2006
Из: Новосибирск
Пользователь №: 73 484
Модель телефона: C350L
Прошивка: 82R

Рейтинг: 60



Конечно java-мидлет можно декомпилировать. Но так как часто после этого мидлет обрабатывают обфуксатором, то после декомпиляции он оказывается нерабочим и нужно его дорабатывать. А вообще по этой теме есть куча информации и есть гугл.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Andy51
сообщение 27.4.2006, 11:29


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
сообщение 27.4.2006, 11:55


Опытный
***

Группа: Пользователи
Сообщений: 147
Регистрация: 2.11.2004
Из: П-П
Пользователь №: 19 313
Модель телефона: E398
Прошивка: MotoSymbian 1.4

Рейтинг: 85



Цитата(Andy51 @ Четверг, 27 Апреля 2006, 14:29)
А самый реальный декомпилер
*

сейчас все бесплатные декомпилеры на основе jad, последняя версия которого вышла в 2001 году (это так, к сведению :)). В том числе и DJ Java Decompiler, и Java Decompiler by wl…
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
wl`
сообщение 27.4.2006, 12:11


Интересующийся
**

Группа: Пользователи
Сообщений: 49
Регистрация: 13.12.2005
Пользователь №: 61 943
Модель телефона: Nokia 6681
Прошивка: ??

Рейтинг: 7.5



jad.exe в чистом виде не переименовывает имена методов и переменных (хотя переменные переименовывает, но криво, лучше бы не). В итоге в декомпилированных классах по пятьдесят методов a(...); b(...); причём далеко не всегда очевидно, где какой метод используется, и получаются кучи ambiguous-ошибок. Моя оболочка делает все имена методов и переменных уникальными, поэтому если ошибки и остаются, то только от самого jad.exe. - типа нераспознанные исключения, свитчи... Но с небольшим опытом такие ошибки очень легко исправить.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
grafmoto
сообщение 27.4.2006, 12:24


ЯваМотоКодер
********

Группа: Почётные мотофаны
Сообщений: 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`
сообщение 27.4.2006, 12:33


Интересующийся
**

Группа: Пользователи
Сообщений: 49
Регистрация: 13.12.2005
Пользователь №: 61 943
Модель телефона: Nokia 6681
Прошивка: ??

Рейтинг: 7.5



это необфуцированный мидлет похоже. Для таких нужно убирать галку "Deobfuscate" before decompile. Потому что имена методов и так уникальны.
Кроме того, у меня там есть файл except.lst, с названиями методов, которые не нужно переименовывать, так вот там в основном всё из MIDP2.0 и CLDC1.0, для разных сторонних библиотек и JSR нужно пополнять его вручную...
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
grafmoto
сообщение 27.4.2006, 12:44


ЯваМотоКодер
********

Группа: Почётные мотофаны
Сообщений: 2 003
Регистрация: 15.10.2004
Из: Северодвинск
Пользователь №: 16 752
Модель телефона: iPhone 3Gs
Прошивка: iOS 6.1.3

Рейтинг: 703



Цитата(wlcool @ Четверг, 27 Апреля 2006, 16:33)
Для таких нужно убирать галку "Deobfuscate" before decompile.
*


да, да. точно помогло. просто сразу не стал весь интерфейс изучать, поторопился с выводами :-) дома что-нить декомпильну :-)))
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Andy51
сообщение 27.4.2006, 12:58


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
сообщение 27.4.2006, 14:46


Опытный
***

Группа: Пользователи
Сообщений: 147
Регистрация: 2.11.2004
Из: П-П
Пользователь №: 19 313
Модель телефона: E398
Прошивка: MotoSymbian 1.4

Рейтинг: 85



«Deobfuscate» это да, хорошая штука :) Только вот jad и после такой обработки очень многие вещи не может нормально декомпилировать. Попробуйте декомпильнуть им приложение, пропущенное через Zelix KlassMaster — поймёте ;)

Цитата(wlcool @ Четверг, 27 Апреля 2006, 15:33)
Кроме того, у меня там есть файл except.lst, с названиями методов, которые не нужно переименовывать, так вот там в основном всё из MIDP2.0 и CLDC1.0, для разных сторонних библиотек и JSR нужно пополнять его вручную...
*

а ты сделай так, чтобы можно было к нему библиотеки подцеплять, а он, основываясь на них, решал, какие методы надо переименовывать, а какие нет.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
wl`
сообщение 27.4.2006, 15:13


Интересующийся
**

Группа: Пользователи
Сообщений: 49
Регистрация: 13.12.2005
Пользователь №: 61 943
Модель телефона: Nokia 6681
Прошивка: ??

Рейтинг: 7.5



идея здравая, но этой программе уже почти год и я всё в ней уже забыл.
наверное проще написать отдельный парсер, который except.lst будет формировать, однако - лень.. java на смартах хреново работает, так что я ей уже почти не занимаюсь - разве что так, иногда, чтобы не потерять сноровку.
Кстати у меня на сайте где-то была статья про взлом самого ZKM :о)
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Navigator
сообщение 27.4.2006, 16:28


Опытный
***

Группа: Пользователи
Сообщений: 147
Регистрация: 2.11.2004
Из: П-П
Пользователь №: 19 313
Модель телефона: E398
Прошивка: MotoSymbian 1.4

Рейтинг: 85



Цитата(wlcool @ Четверг, 27 Апреля 2006, 18:13)
Кстати у меня на сайте где-то была статья про взлом самого ZKM
*

ну так я ей и пользовался, когда у себя ZKM ломал :) Для тех, кому лень копаться — в com/zelix/zo.class надо поменять (в HEX) B203FE361E на 1201B00000 и всё, можно пользоваться :)
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Обратим Ли Процесс Компиляции Мидлета?, Вопрос начинающего. · Разработка Java-приложений · Forum
 

Ответ в темуСоздание новой темы
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 28.7.2025, 18:17

Форум живёт: