Сейчас на форуме: -Sanchez- (+8 невидимых)

 eXeL@B —› Основной форум —› Хак обфускацированной (after obfuscate) проги на Java
Посл.ответ Сообщение

Ранг: 36.2 (посетитель), 1thx
Активность: 0.010
Статус: Участник

Создано: 18 января 2009 14:31
· Личное сообщение · #1

Исследую прогу PersonalBrain 5 (www.thebrain.com/downloadcenter/PersonalBrain_windows_5_0_1_6_lib.exe ), написана на java, применен обфускатор.
нашел класс (PersonalBrain.jar\com\thebrain\personal\f\a\a.class), отвечающий да регистрацию.
Декомпильнул его с помощью DJ Java Decompiler 3.10. Перекомпилять не получается (package com.thebrain.personal.f.a clashes with class of same name).
Хотел сделать битхак с JavaByte (с лоадером), но у нее названия методов совсем не такие, как в DJ Java Decompiler. Дальше пока не разбирался.

Собсвенно вопросы:
* возможно ли отдебажить эту прогу, учитывая, что она запускается екзешником ?
* какие существую нюансы и инструменты для исследования обфускацированных прог на java ?



Ранг: 36.2 (посетитель), 1thx
Активность: 0.010
Статус: Участник

Создано: 22 января 2009 22:15 · Поправил: alt76
· Личное сообщение · #2

ну раз все кулхацкеры видать в теплом австралийском акеяне серфингом и факингом на зимних каникулах занимаюцца, то сам себе отвечу : - )))) вдруг пригодится кому

* первый вопрос так и остался открытым.

*
самым полезным инструментом оказался JavaByte.
нашел у него баг: опкод 02 в нем iconst_null, а должен iconst_m1
лоадер выручает с обфускацированными классами у которых имена методов одинаковые есть. (правда в нем тоже баг попался )

хорошо показал себя DJ Java Decompiler 3.10 - у него есть как режим генерации исходников на java, так и на java-ассемблере - очень полезно код метода перед редактированием в JavaByte посмотреть.

еще полезный софт:
JavaDec 0.9b - декомпилятор со встроеным деобфускатором. www.wasm.ru/forum/viewtopic.php?pid=219151#p219151
JDO Java DeObfuscator 1.6b (www.softpedia.com/get/Programming/Debuggers-Decompilers-Dissasemblers/Java-DeObfuscator.shtml, там еще можно полезные вешчи найти)
живой и развивающийся Java Decompiler со своим ядром декомпиляции (не юзает jad) java.decompiler.free.fr
еще ссылки на софт: www.java-decompiler.com

ну и инфа по теме для начинающих
www.wasm.ru/article.php?article=1009005
www.xakep.ru/magazine/xa/088/074/1.asp
netgigg.livejournal.com/8631.html
www.steike.com/code/java-reverse-engineering/
hardline.ru/1/3/3307/
java-crack.narod.ru/




Ранг: 196.6 (ветеран), 11thx
Активность: 0.070.01
Статус: Участник

Создано: 22 января 2009 23:25
· Личное сообщение · #3

JavaDec 0.9b - моя прога, последняя версия тут: j2me.ucoz.ru/forum/2-45-1
кажется, исходники от неё я давно проепал...
я хотел ответить в данной теме, но сначала решил сам посмотреть на защиту, вроде там можно даже сделать кейген, но у меня не вышло с первого захода, поэтому я бросил, а тут ответить забыл.

в общем-то я хотел сказать следующее:
1) классы подписаны сертификатом, это может вызвать проблемы при патче.
2) кроме javabite есть еще одна прога для битхака классов: Class Construction Kit, в ней вроде меньше глюков.
3) про отладку без исходников ничего не могу вспомнить, но уже скомпилированные классы можно использовать в своей программе, иногда это правда нетривиально, если возникнет конфликт имен. Также декомпилированные методы (и даже классы) можно легко в своей программе.
-
ломать эту прогу я не буду, так как не вкурил зачем она, и после установки оказалось, что она лезет в автозагрузку, после чего при следующей загрузке моя винда xp x64 показала синий экран смерти. но кое-что могу подсказать, спрашивай



Ранг: 203.3 (наставник)
Активность: 0.220
Статус: Участник
UPX Killer -d

Создано: 22 января 2009 23:36
· Личное сообщение · #4

alt76 пишет:
Создано: 22 января 2009 22:15:02


Интересная информация по инструментам. Её бы в первый постинг перекинуть...

-----
Я медленно снимаю с неё UPX... *FF_User*




Ранг: 36.2 (посетитель), 1thx
Активность: 0.010
Статус: Участник

Создано: 23 января 2009 00:55
· Личное сообщение · #5

[wl] пишет:
1) классы подписаны сертификатом, это может вызвать проблемы при патче.

в данном конкретном случе сла богу *нужные* классы там не подписаны
существуют ли какие нить методы обхода этого нюанса ?

[wl] пишет:
кроме javabite есть еще одна прога для битхака классов: Class Construction Kit, в ней вроде меньше глюков.

класс, выглядит заметно круче и мощнее чем javabite. спасибо !!!

[wl] пишет:
3) про отладку без исходников ничего не могу вспомнить, но уже скомпилированные классы можно использовать в своей программе, иногда это правда нетривиально, если возникнет конфликт имен. Также декомпилированные методы (и даже классы) можно легко в своей программе.

в данном конкретном случае у меня это не вышло - толи я что-то не вкуриваю (я java знаю ооочень поверхностно и это первая прога на java что я "исследую"), толи они защищены так. например пробовал так:
public class test
{
public static void main(String[] args)
{
System.out.println("Hello " + com.thebrain.personal.f.a.a.a(1));
}
}
при компиляции дает:
[code]
test.java:5: cannot find symbol
symbol : variable a
location: class com.thebrain.personal.f.a
System.out.println("Hello " + com.thebrain.personal.f.a.a.a(1));
^
1 error
[/code]
если напишешь пример как поцепить этот класс будет клево - тогда можно дебажить

[wl] пишет:
ломать эту прогу я не буду, так как не вкурил зачем она, и после установки оказалось, что она лезет в автозагрузку, после чего при следующей загрузке моя винда xp x64 показала синий экран смерти. но кое-что могу подсказать, спрашивай

ломать я ее уже сломал. а прога очень даже ниче - по типу mind map, но ближе к концепции реального мозга/мышления - множественные связи, бла бла.
в автозагрузку она сама себя всталяет, убирается в опциях.


AlexZ пишет:
Интересная информация по инструментам. Её бы в первый постинг перекинуть...

ну если тема будет развиваться, то перекину потом



Ранг: 48.3 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 25 января 2009 03:25
· Личное сообщение · #6

alt76
нашел у него баг: опкод 02 в нем iconst_null, а должен iconst_m1

Это не баг, а опечатка автора. Можно конечно поправить, но не критично.

лоадер выручает с обфускацированными классами у которых имена методов одинаковые есть. (правда в нем тоже баг попался )

А ты последнюю версию использовал? Она тут лежит:
www.wasm.ru/forum/viewtopic.php?pid=219151#p219151
Если да, то шли мне багрепорт, посмотрю.

[wl]
2) кроме javabite есть еще одна прога для битхака классов: Class Construction Kit, в ней вроде меньше глюков.

Беда в том, что Class Construction Kit перестал обновляться за год до написания JavaBite'a... В частности он не отображает практически никакие аттрибуты (InnerClass из самых нужных), не отображает флаги доступа кроме самых простых и т.д. Для нормальной работы поэтому оказался непригоден. Да еще и код закрытый, так что не дописать самому.

У JavaBite недостаток по большому счету только один - дикие тормоза. [wl] в свое время предполагал:

>>по поводу скорости javabite - я так понял, при заполнении ListView не используются методы
>>BeginUpdate/EndUpdate, без них тормозит, так как винда пытается обновить этот компонент при
>>каждом добавлении в него элемента.

Вполне вероятно, что так и есть. Так может просто вставить нужные вызовы? Наверняка тут куча народу обретается, кто набил себе руку на исследовании и патче программ. Код ничем не защищен, изменения вроде небольшие - может кто-нибудь пропатчит? Сам браться не хочу, потому что знания в основном теоретические и не хватает практических навыков работы с инструментами. Буду ковыряться долго и малопродуктивно. Было бы здорово, если бы кто-то из профи пожертвовал немного времени на это дело.

1) классы подписаны сертификатом, это может вызвать проблемы при патче.

В смысле в манифесте подписаны? Ну так почистить манифест и все.

про отладку без исходников ничего не могу вспомнить

Есть отладчики байткода для Eclipse, но не совсем уверен, насколько они рабочие. Сам с ними не игрался.
andrei.gmxhome.de/bytecode/debugging.html
www.drgarbage.com/bytecode-visualizer-3-3.html#bytecode-debugger



Ранг: 36.2 (посетитель), 1thx
Активность: 0.010
Статус: Участник

Создано: 25 января 2009 15:55
· Личное сообщение · #7

Stiver пишет:
Если да, то шли мне багрепорт, посмотрю.

в прикрепленном файле класс который портится после "Unique names for overloaded functions" / "Restore overloaded function names"

Stiver пишет:
Это не баг, а опечатка автора. Можно конечно поправить, но не критично.

для меня это было довольно таки критично - не мог найти по коду метод. лечится простой заменой в екзешнике строки на нужную.

про инфу отладчики спасибо, как добуду eclipse, попробую поиграться.


[wl] пишет:
но кое-что могу подсказать, спрашивай

можешь привести пример подцепления/вызова любого класса/метода из package com.thebrain.personal.f.a ?
или вынести вердикт что они как-то как-то защищены от использования извне ?
у меня прикрутить их никак не получилось, а вот такой код из package com.thebrain.personal.f работает нормально:
String x1=com.thebrain.personal.f.a.a("1&23",true);
System.out.println("Hello " + x1);

f524_25.01.2009_CRACKLAB.rU.tgz - a.class




Ранг: 196.6 (ветеран), 11thx
Активность: 0.070.01
Статус: Участник

Создано: 25 января 2009 23:03
· Личное сообщение · #8

вероятно, без переименовывания классов не получится - возникают конфликты между именами классов и методов




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 15 октября 2009 09:39 · Поправил: Isaev
· Личное сообщение · #9

[wl] если на выходе твоей софтинки, получаем такого типа код:
Code:
  1.   l2 = (long)actionevent[j][(int)(l3 & 0xffffffffL)] & 65535L ^ l2 & 0xffffffffffff0000L;
  2.   l6 = (long)(<< -351) & 0xffffffffL ^ l6 & 0xffffffff00000000L;
  3.   l1 = (long)((int)(l6 & 0xffffffffL) + j) & 0xffffffffL ^ l1 & 0xffffffff00000000L;
  4.   l = (long)((int)(l1 & 0xffffffffL) + (int)(l3 & 0xffffffffL)) << 16 & 0xffffffff0000L ^ l & 0xffff00000000ffffL;
  5.   l = (long)ac[(int)((& 0xffffffff0000L) >> 16)] & 65535L ^ l & 0xffffffffffff0000L;
  6.     if((char)(int)(l2 & 65535L) != (char)(int)(& 65535L))
  7.   l = (long)m_IIII << 50 & 0x4000000000000L ^ l & 0xfffbffffffffffffL;

1. это обфускатор?
2. какой именно, если кто знает? // the Java ByteCode Obfuscator если я правильно понял... www.sable.mcgill.ca/JBCO/#download
3. И как можно "вернуть" к более человеческому виду?
т.е. можно конечно проанализировать всю эту попсу и многое сократится до констант нулей и единиц...
а деобфускаторы (хотя бы частичные) есть в природе?

попадается такая бяка уже не первый раз

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 69.8 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 15 октября 2009 21:31
· Личное сообщение · #10

Isaev,

а деобфускаторы (хотя бы частичные) есть в природе?

опенсорсный --> Java DeObfuscater <--



Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 16 октября 2009 00:20
· Личное сообщение · #11

userdom пишет:
опенсорсный --> Java DeObfuscater <--

там старые исходники - от Jul 06 2007

в свое время когда реверсил один картежный софт хороший, перелопатил его (JDO) основательно (когда он еще и не был отдан на опен сорс ))
перелопатил почти всю логику кода его (он на С#)

С уверенностью могу сказать что такого изврата как писал Isaev он не обрабатывает
у него задача попроще....




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 16 октября 2009 18:12
· Личное сообщение · #12

userdom пишет:
опенсорсный --> Java DeObfuscater <--

я пробовал его, он сказал, что проект обработан, но что-то я вообще не заметил разницы
видимо у него другая цель и он совсем не эту радость ищет

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 16 октября 2009 21:02
· Личное сообщение · #13

Isaev пишет:
видимо у него другая цель и он совсем не эту радость ищет


да, он читает бинар ява-классов и анализирует функции, классы, интерфейсы + гнрит удобоварим↨е имена (а то есть такие извратские обфускаторы которые пишут юникод и нон-принтбл символы в названия оных...



Ранг: 36.2 (посетитель), 1thx
Активность: 0.010
Статус: Участник

Создано: 07 сентября 2010 13:18 · Поправил: alt76
· Личное сообщение · #14

недавно исследовал очередную обфускацированную яву, открыл пару полезностей:

Вывод стека java процесса: jstack -l [PID java процесса]
--------------------------------------------------------------------------------

bin patch 2 add Thread.dumpStack();

JavaByte
add 2 "Constant Pool":

x1 UTF8 java/lang/Thread
x2 Class [x1]
x3 UFT8 dumpStack
x4 UFT8 ()V
x5 NameAndType name=[x3] desc=[x4]
x6 Methodref class=[x2] name&type=[x5]

в метод:
B8.[00.X6] = invokestatic - CONSTANT_POOL_INDEX=[X6]
B1 = return (это по желанию)

запускать через:
java -jar xxx.jar
=> откроется консоль, куда будет выводится Thread.dumpStack();
если запускать через explorer (или javaw) то консоли не будет и вывода соответственно тоже
--------------------------------------------------------------------------------

Выполнение своего кода MyClass.myMethod() из xxx.jar/anypath/any.class

import javax.swing.JOptionPane;
public class MyClass{
public static void myMethod(){
JOptionPane.showMessageDialog (null, "Message:\nHi ","Caption",JOptionPane.INFORMATION_MESSAGE);
}
}

JavaByte
add 2 "Constant Pool":

x1 UTF8 MyClass
x2 UTF8 myMethod
x3 UTF8 ()V
x4 Class [x1]
x5 NameAndType name:[x2] desc:[x3]
x6 Methodreg class:[x4] name & type:[x5]

ложим файл MyClass.class туда же куда и xxx.jar
и в xxx.jar\META-INF\MANIFEST.MF добавляем строку:
Class-Path: .

вызов метода из any.class:
B8.[00.X6] = invokestatic - CONSTANT_POOL_INDEX=[X6]
--------------------------------------------------------------------------------




Ранг: 127.3 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 20 сентября 2010 08:14 · Поправил: stahh
· Личное сообщение · #15

Не буду пока создавать новую тему... Кто ковырялся в яве, подскажите, как может быть реализована проверка файлов? Типа crc32, прога при запуске проверяет все jar, и если есть изменение - качает с сайта новый архив. Куда хоть смотреть? Больше 100 классов, как найти - хз

ЗЫ:Поиск по форуму вообще не работает



Ранг: 137.9 (ветеран), 45thx
Активность: 0.080
Статус: Участник

Создано: 20 сентября 2010 09:57
· Личное сообщение · #16

stahh
смотри ссылки, по каких качает обновление, в классах, где-то близко и будет проверка.




Ранг: 127.3 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 20 сентября 2010 10:10
· Личное сообщение · #17

нету в классах ссылок. все строки вынесены *.properties

operation.loadChangeList.name=Загрузка списка изменений
operation.loadUpdates.name=Загрузка обновлений



Ранг: 137.9 (ветеран), 45thx
Активность: 0.080
Статус: Участник

Создано: 20 сентября 2010 11:46
· Личное сообщение · #18

stahh
выложи программу, может и поможет кто.




Ранг: 127.3 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 20 сентября 2010 12:54
· Личное сообщение · #19

ммм, уточню вопрос - какими методами в яве можно проверить оригинал файла? =))

yanus0
Когда мне нужно будет ее сломать - я обращусь в "запросы на взлом". По теме есть что сказать?




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 20 сентября 2010 15:19
· Личное сообщение · #20

stahh пишет:
в яве можно проверить оригинал файла

Да как обычно, там могут юзаться классы типа java.util.zip.CRC32, если не обфусцирована - поищи поиском что-нить вроде CRC, MD5 и т.д.

А при скачивании файлов в яве могут юзать всякие io и net классы, например
java.io.FileOutputStream
java.io.BufferedOutputStream
java.net.URL
java.net.URLConnection

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.





Ранг: 127.3 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 20 сентября 2010 16:52 · Поправил: stahh
· Личное сообщение · #21

4kusNick
О, сенкс, нашел проверку, но нифига я в этой яве не пойму Вот код, чо тут надо сделать, чтоб похерить проверку?
package com.agilemind.commons.io;

import java.io.IOException;
import java.io.InputStream;
import java.util.zip.CRC32;
import java.util.zip.Checksum;

public class CRC32SumChecker extends SumChecker
{
public long getChecksumValue(InputStream paramInputStream)
throws IOException
{
int j = IOUtils.c; CRC32 localCRC32 = new CRC32();

byte[] arrayOfByte = new byte[1024];
do
{
int i;
if ((i = paramInputStream.read(arrayOfByte)) < 0)
break;
localCRC32.update(arrayOfByte, 0, i); } while (j == 0);

return localCRC32.getValue();
}
}

И еще такой вопрос, как отключить нах вызов метода? Если просто занопить ф-цию, то прога не стартует.

Да, и вызова проверки напрямую не нашел. Есть вот такое -

private static final SumChecker a = new CRC32SumChecker();
public static final int ENTRY_TYPE_FOLDER = 0;
public static final int ENTRY_TYPE_FILE = 1;
private RepositoryEntry b;
private int c;
public static int d;

Я так понимаю, переменной присваивается значение полученное из CRC32SumChecker() ?




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 20 сентября 2010 17:58 · Поправил: 4kusNick
· Личное сообщение · #22

stahh пишет:
нашел проверку

stahh пишет:
getChecksumValue

По названию метода понятно, что это не сама проверка, а лишь получения чексуммы - посмотри, где юзается класс CRC32SumChecker вообще во всей проге - и там и ищи проверки.

stahh пишет:
Я так понимаю, переменной присваивается значение полученное из CRC32SumChecker() ?

Не, это просто инициализация перемнной, теперь переменная a - это экземпляр класса CRC32SumChecker.
Ищи a.getChecksumValue(...) там в коде дальше.

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.





Ранг: 127.3 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 20 сентября 2010 18:28 · Поправил: stahh
· Личное сообщение · #23

Юзается только в еще одном классе class RepositoryEntry, там где переменная, дальше по коду есть только это

public FileEntry(RepositoryEntry paramRepositoryEntry, File paramFile)
throws IOException
{
super(1);

this.e = paramFile.getName();

this.f = RepositoryEntry.a.getChecksumValue(paramFile);
}

муть, короче =)) киньте в меня книжкой толковой по яве, взгляд со стороны декомпиля, так сказать =)) а то нашел только какие-то минимумы для чайников =)) и описание байткодов, типа lreturn - blabla, ireturn - blablabla
Все-таки хочу сам сломать =))




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 20 сентября 2010 18:58
· Личное сообщение · #24

stahh пишет:
this.f = RepositoryEntry.a.getChecksumValue(paramFile);

Ну значит где-то потом сравнивается поле f класса, где находится приведенный код с каким-то либо вшитым значением, либо с получаемым извне.

Спека по байткоду и вм:
java.sun.com/docs/books/jvms/second_edition/html/VMSpecIX.fm.html

stahh пишет:
киньте в меня книжкой толковой по яве

Я лично ничего посоветовать не могу, т.к. сам ничего не читал.

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




Ранг: 137.9 (ветеран), 45thx
Активность: 0.080
Статус: Участник

Создано: 20 сентября 2010 19:40
· Личное сообщение · #25

stahh пишет:
киньте в меня книжкой толковой по яве, взгляд со стороны декомпиля

www.google.com.ua/search?sourceid=chrome&ie=UTF-8&q=Covert+Java+Techniques+for+Decompiling+Patching+and+Reverse+Engineering.pdf



Ранг: 6.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 03 декабря 2010 03:21
· Личное сообщение · #26

Скажите пожалуйста, где найти Class Construction Kit? Я нашёл только --> это <--.



Ранг: 137.9 (ветеран), 45thx
Активность: 0.080
Статус: Участник

Создано: 03 декабря 2010 11:53
· Личное сообщение · #27

IDOL 1234
bcel.sourceforge.net/cck.html



Ранг: 6.1 (гость)
Активность: 0.010
Статус: Участник

Создано: 07 сентября 2012 05:46
· Личное сообщение · #28

Не знаю, нужно ли кому еще – я пользовал недавно для андроидных прог:
http://code.google.com/p/dex2jar/wiki/DeObfuscateJarWithDexTool
Неплохо, да и сравнить то не с чем


 eXeL@B —› Основной форум —› Хак обфускацированной (after obfuscate) проги на Java
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати