Сейчас на форуме: -Sanchez- (+8 невидимых) |
eXeL@B —› Основной форум —› Хак обфускацированной (after obfuscate) проги на Java |
Посл.ответ | Сообщение |
|
Создано: 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 ? |
|
Создано: 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/ |
|
Создано: 22 января 2009 23:25 · Личное сообщение · #3 JavaDec 0.9b - моя прога, последняя версия тут: j2me.ucoz.ru/forum/2-45-1 кажется, исходники от неё я давно проепал... я хотел ответить в данной теме, но сначала решил сам посмотреть на защиту, вроде там можно даже сделать кейген, но у меня не вышло с первого захода, поэтому я бросил, а тут ответить забыл. в общем-то я хотел сказать следующее: 1) классы подписаны сертификатом, это может вызвать проблемы при патче. 2) кроме javabite есть еще одна прога для битхака классов: Class Construction Kit, в ней вроде меньше глюков. 3) про отладку без исходников ничего не могу вспомнить, но уже скомпилированные классы можно использовать в своей программе, иногда это правда нетривиально, если возникнет конфликт имен. Также декомпилированные методы (и даже классы) можно легко в своей программе. - ломать эту прогу я не буду, так как не вкурил зачем она, и после установки оказалось, что она лезет в автозагрузку, после чего при следующей загрузке моя винда xp x64 показала синий экран смерти. но кое-что могу подсказать, спрашивай |
|
Создано: 22 января 2009 23:36 · Личное сообщение · #4 |
|
Создано: 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 пишет: Интересная информация по инструментам. Её бы в первый постинг перекинуть... ну если тема будет развиваться, то перекину потом |
|
Создано: 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 |
|
Создано: 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 |
|
Создано: 25 января 2009 23:03 · Личное сообщение · #8 |
|
Создано: 15 октября 2009 09:39 · Поправил: Isaev · Личное сообщение · #9 [wl] если на выходе твоей софтинки, получаем такого типа код: Code:
1. это обфускатор? 2. какой именно, если кто знает? // the Java ByteCode Obfuscator если я правильно понял... www.sable.mcgill.ca/JBCO/#download 3. И как можно "вернуть" к более человеческому виду? т.е. можно конечно проанализировать всю эту попсу и многое сократится до констант нулей и единиц... а деобфускаторы (хотя бы частичные) есть в природе? попадается такая бяка уже не первый раз ----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh |
|
Создано: 15 октября 2009 21:31 · Личное сообщение · #10 |
|
Создано: 16 октября 2009 00:20 · Личное сообщение · #11 userdom пишет: опенсорсный --> Java DeObfuscater <-- там старые исходники - от Jul 06 2007 в свое время когда реверсил один картежный софт хороший, перелопатил его (JDO) основательно (когда он еще и не был отдан на опен сорс )) перелопатил почти всю логику кода его (он на С#) С уверенностью могу сказать что такого изврата как писал Isaev он не обрабатывает у него задача попроще.... |
|
Создано: 16 октября 2009 18:12 · Личное сообщение · #12 |
|
Создано: 16 октября 2009 21:02 · Личное сообщение · #13 |
|
Создано: 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] -------------------------------------------------------------------------------- |
|
Создано: 20 сентября 2010 08:14 · Поправил: stahh · Личное сообщение · #15 Не буду пока создавать новую тему... Кто ковырялся в яве, подскажите, как может быть реализована проверка файлов? Типа crc32, прога при запуске проверяет все jar, и если есть изменение - качает с сайта новый архив. Куда хоть смотреть? Больше 100 классов, как найти - хз ЗЫ:Поиск по форуму вообще не работает |
|
Создано: 20 сентября 2010 09:57 · Личное сообщение · #16 |
|
Создано: 20 сентября 2010 10:10 · Личное сообщение · #17 |
|
Создано: 20 сентября 2010 11:46 · Личное сообщение · #18 |
|
Создано: 20 сентября 2010 12:54 · Личное сообщение · #19 |
|
Создано: 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 на закуску. |
|
Создано: 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() ? |
|
Создано: 20 сентября 2010 17:58 · Поправил: 4kusNick · Личное сообщение · #22 stahh пишет: нашел проверку stahh пишет: getChecksumValue По названию метода понятно, что это не сама проверка, а лишь получения чексуммы - посмотри, где юзается класс CRC32SumChecker вообще во всей проге - и там и ищи проверки. stahh пишет: Я так понимаю, переменной присваивается значение полученное из CRC32SumChecker() ? Не, это просто инициализация перемнной, теперь переменная a - это экземпляр класса CRC32SumChecker. Ищи a.getChecksumValue(...) там в коде дальше. ----- Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску. |
|
Создано: 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 Все-таки хочу сам сломать =)) |
|
Создано: 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 на закуску. |
|
Создано: 20 сентября 2010 19:40 · Личное сообщение · #25 |
|
Создано: 03 декабря 2010 03:21 · Личное сообщение · #26 |
|
Создано: 03 декабря 2010 11:53 · Личное сообщение · #27 |
|
Создано: 07 сентября 2012 05:46 · Личное сообщение · #28 |
eXeL@B —› Основной форум —› Хак обфускацированной (after obfuscate) проги на Java |