Автор статьи:kiriman
Самые известные из них XOR и вычитание числа с кода символа.
Второй был замечен мной в aNMPWR 2.0 beta by annimon в те времена,когда я еще осваивал Mobile Basic и не знал java 2 me.
Само приложение —движок для журналов,был тогда весьма востребован,но автор сделал его платным 19.03.2010,что привело пользователей к новым более функциональным бесплатным аналогам. Проект забросили.
Прошло 2 года…
Я стал шарить в яве. Разработчик движка намного усилил защиту,продал несколько копий. Но та лакомая бетка спокойно лежала на просторах интернета.. пока за нее не взялся kiriman
Знаете,если бы я захотел —давно бы написал декодер текстов,меня остановило ограничение на кол-во запусков мидлета,что протеворечит определению выше,хех
Разбираемся!
Достаем из архива(*.jar = *.zip) папки xml и txt
1. Настройки журнала
2. Статьи
Открываем FAQ.txt,заранее известно —кодировка win 1251
В запущенном приложении в факе первый символ «F»,а в нашем файле «?». Невооруженным глазом видно,одинаковые буквы заменены одним и тем же. Либо юзается таблица,либо прибавление/вычитание числа с кода символа. Проверим:
F —70
? —63
70 —63 = 7
Таким образом смотрим 2ую,3юю и т.д. букву,все сходится,для шифрования используется вычитание 7.
Теперь легко можно убрать его.
Думаю на данном этапе вы напишите декодер сами.
Переводим файлы в нормальный вид.
Окей,надо заставить читать anmpwr это дело.
Декомпилируем классы,ищем число 7. Находим в a.a.a.class,j.class,b.class,i.class
Скачиваем любой редактор байт-кода. Открываем их. Заменяем a.a.a.a = 7 на a.a.a.a = 0
Т.е bipush 7 на 0
Лучше,конечно,исправить:
Чтение байта + 7 на Чтение байта,но я не хотел заморачиваться,поскорей бы закончить работу)

ByteCodeEditor.jar,a.class
А сейчас приступим к убийству.. ограничения
Открыв класс Main в декомпиляторе,видим:
public void startApp()
{
k.b();
if (k.a >= a.a.a.a)
destroyApp(true);
this.cnv = new d();
this.cnv.setFullScreenMode(true);
if ((Main.name = a.a(getClass().getResourceAsStream(«/xml/name.ini»))) == null)
name = «Default»;
a.a(«/xml/skin.ini»);
this.dsp = Display.getDisplay(this);
this.dsp.setCurrent(this.cnv);
}
Опачки! Первая проверка! destroyApp(true);—метод для выхода из приложения,а переменная a.a.a.a(Где-то мы видели?))) юзается как максимальное кол-во запусков.
Хм,но она стала равна 0,следовательно надо снести это условие к чертям,т.е.
k.b();
this.cnv = new d();
this.cnv.setFullScreenMode(true); ….

ДО

ПОСЛЕ
Преверефицируем,пробуем запустить.. не помогло(
destroy вызывается еще в классах j,h. Нас интересуют условия с a.a.a.a.
j.class, здесь поступаем также как и с прошлым классом
Main.midlet.destroyApp(true);
h.class
public final void run()
{
while (true)
{
if (this.jdField_c_of_type_Boolean)
{
if (this.k >-(this.j —this.f))
this.k -= 2;
else
this.jdField_c_of_type_Boolean = (!this.jdField_c_of_type_Boolean);
}
else if (this.k <0)
{
this.k += 2;
if (k.a >= a.a.a.a)
Main.midlet.destroyApp(true);
}
else
{
this.jdField_c_of_type_Boolean = (!this.jdField_c_of_type_Boolean);
}
try
{
Thread.sleep(100L);
}
catch (Exception localException)
{
}
repaint();
}
}
С такой конструкции я не смог вырезать нужное,знания асмы слабы,делаю все наугад,почти
Поэтому,изменил логику условия
if (k.a != k.a)
Main.midlet.destroyApp(true);

ДО

ПОСЛЕ
Осталось преверефицировать и собрать! Но я сделал уже все за вас,качайте:
aNMPWR 2.0 no BETA - Полностью рабочая версия
З.Ы. Скриншоты мобильного редактора байт-кода представлены для уменьшения веса страницы,на ПК есть JavaByte.exe
Оригинал взят с http://kiriman808.blogspot.com/2012/01/anmwpr-20-no-beta.html



640×360 RUS [1,1 Мб]
Жизнь идёт своим чередом. Наука,спорт,культура. Однако один австралиец,далёкий от всего этого,сделал открытие,которое изменило все наши понятия и теории —антигравитация,а точнее,антигравитационное вещество,найденное в гидросфере Земли. Однако ничто не могло сравниться с нарастающей опасностью с этим открытием. Земля влилась в Аккилианский Союз,мощнейшую планетную федерацию.
Свежие комментарии