[ Добавить в "Избранное" ]    [ Сделать стартовой ]
Ваш IP:

Сегодня займемся тем, о чем еще не писалось (на русском языке точно, а на английском я нашел аж 1). Будем ломать Java аплеты.

Что нам для этого понадобится:
Softice, Ida 4.15 (полный естественно), hex редактор, procdump.

Сначала о теории.
Виртуальные машины это что-то типа интерпретаторов, но по-круче. Это программы которые имитируют выполнение программы на программной модели какого-нить процессора. Т.е. прога строится на командах этого виртуального процессора. Таким образом стандартные апи отлетают в далекие края. Потому что команды этого процессора выглядят хз как. Там могут быть какие-угодно опкоды, которые интерпритируются в команды виртуального процессора. Это жеж какой ужас будет если все проги будут делаться на виртуальных машинах... Вот так все сложно и страшно. Никто переходить на виртуальные машины пока не собирается, потому что все виртуальные машины страшно тормозят. Естественно, пока туда-сюда код интерпритируется, потом его надо выполнить в системе команд нашего реального проца и преобразовать результаты для передачи виртуальному. Вот так от. Зачем они тогда ваще нужны? Тока изза мультиплатформенности. Т.е. пишется тока виртуальная машина под нужную ось, а проги для нее везде одинаковые. Ща у нас есть виртуальные машины Java и VB.

Итак я покажу самый примитив, тошо явы я не знаю, на скока получилось смарите сами.

Будем ломать ABCMenuMan от Wyka-Warzecha (http://www.wyka-warzecha.com). Там куча ограничений на нем, но пока, что я покажу как ломать самый явный из них - задержку при загрузке.

Приступим. Открываем ABCMenuMan.class в Ida. Задержка должна быть на 100% в самом аплете. Нужно тока ее найти... Для начала не плохо бы узнать какой функцией она реализуется. Должно быть что-то связанное с временем. Но еще вопрос : Где искать имя этой функции? Запускаем sample.htm чтобы аплет запустился. Берем процдамп и смотрим чо там у нас использует explorer...
Кучу DLL связаных с java. Но нам пока важна тока msjava.dll. Поики среди функции в этой dll не привели ни к чему - функций связаных с задержкой, типа delay не было :(. Но зато была задержка для потока java_lang_thread_sleep. Но ведь аплет-то и есть поток explorer'a созданый виртуальной машиной... Ставим bрx на java_lang_thread_sleep (экспорт из msjava.dll загрузить не забудьте). Теперь запускаем sample.htm. Сработает айс. Жмем F11 и видим(адрес не буду совпадать):

015F:01DC5B6B PUSH DWORD PTR [EBP+14]
015F:01DC5B6E PUSH DWORD PTR [EBP+10]
015F:01DC5B71 PUSH 00000000
015F:01DC5B76 CALL [EDX+24] - call java_lang_thread_sleep

Ставим bpx на 01DC5B6B и делаем bd* , потому что будет будет куча вызовов. Закрываем sample.htm, be* и снова запускаем.
Айс сработает на 01DC5B6B теперь смотрим чо загоняется в стек перед call.
PUSH DWORD PTR [EBP+14] - тут ноли
PUSH DWORD PTR [EBP+10] - тут число 17EB (нормальный вид, а не так как в памяти).

Теперь смотрим в IDA ищем java.lang.thread.sleep. Находи вот это:

met006_83:
ldc2w 6123
invokestatic void java.lang.Thread.sleep(long)

Хм, чо это за 6123... А скока это в hex? 6123=17EB! Круто. Это и есть задержка.
Теперь все что нам остается это открыть ABCMenuMan.class в Hex редакторе, найти EB 17 и заменить на 00 00.

А теперь когда мы все так прочувствовали, даю второй , гораздо более простой метод: Берем DJ Java Decompiler и декомпилим этот class файл. Потом правим код и в нем же перекомпиливаем обратно юзая Jbuilder
Этот способ хорош, но это уже другой аплет выходит, а не крэк.

Автор: Hex

 


Сайт создан в системе uCoz