Сейчас на форуме: tyns777, cppasm, dutyfree (+8 невидимых)

 eXeL@B —› Вопросы новичков —› Декомпиляция и дебаг Java приложения
Посл.ответ Сообщение

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

Создано: 21 июня 2017 19:45 · Поправил: maddmaks
· Личное сообщение · #1

Доброго дня.

Есть обфусцированный код на яве. Деобфускаторы, что нашел в сети, ни один не подходит.
Пытаюсь хоть что-то узреть через дебаг в эклипсе. Понимаю, что без исходников там ничего не увидеть.
Посмотрел через Procmonitor. Ищет кучу JAR файлов при процессе дебага. Их имена вижу, но таких в комплекте к продукту нет. Возможно они есть (там целая папка jar файлов под названием oslib), но зовутся иначе.
Отсюда три вопроса:

1. Как выяснить реальные имена? Вот эклипс хочет подгрузить 000.jar. А такого в папке oslib нет. Но он откуда-то имя 000.jar выудил. как найти тот файл, который реально имеет название 000.jar, а лежит под другим именем?

2. Чем можно получить хоть какие-то исходники с JAR файла, чтобы их подключить к проекту эклипс?
И если без деобфускации, такого не сделать, то тогда ....

3. Как прикрутить отладку этого JAR файла к Иде? Может там получше будет видно ...

Что-то гуглил - ничего не нашел. все только по андрюше или ну очень старая и бестолковая инфа.

P.S. Прикреплю кусок, полученный с помощью jadx.
Сильно не ругайте. Впервые взялся за яву ...

9669_21.06.2017_EXELAB.rU.tgz - part.rar



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

Создано: 21 июня 2017 20:10
· Личное сообщение · #2

1. Может он его из ресурсов достал или вообще сгенерировал на лету.
2. Смотрите в сторону jeb, fernflow и других декомпилей. По отладке вообще глухо.
3. Никак?

-----
старый пень




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

Создано: 21 июня 2017 22:11 · Поправил: maddmaks
· Личное сообщение · #3

Ясно.
Тогда может подскажите еще ....

Вот кусок с дизассемблера :
Code:
  1. private final boolean jdMethod_do(byte[] paramArrayOfByte, boolean paramBoolean1, Connection paramConnection, boolean paramBoolean2)
  2.   {
  3.     boolean bool = false;
  4.     try
  5.     {
  6.       Cipher localCipher = Cipher.getInstance("AES/ECB/NoPadding");
  7.       localCipher.init(2, jdMethod_do());
  8.       byte[] arrayOfByte = localCipher.doFinal(Aux.jdMethod_do(new String(paramArrayOfByte)));
  9.       bool = jdMethod_do(arrayOfByte, paramArrayOfByte, paramBoolean1, paramConnection, paramBoolean2);
  10.     }
  11.     catch (CON localCON)
  12.     {
  13.       if (localCON.getErrorCode() != 23505) {
  14.         throw new RuntimeException(localCON);
  15.       }
  16.     }
  17.     catch (Exception localException)
  18.     {
  19.       System.err.println(" -> ERROR: ONE OR MORE INVALID LICENSE KEYS!");
  20.       return false;
  21.     }
  22.     return bool;


Вот он в Иде :

Code:
  1. ; Segment type: Pure code
  2.   .method private final do([BZLjava/sql/Connection;Z)Z
  3.   .limit stack 6
  4.   .limit locals 8
  5.   .line 779
  6.     iconst_0                                   ; CODE XREF: do_6+104P ...
  7.     istore 5
  8.   .line 781
  9.  
  10. met020_3:                                      ; DATA XREF: do_19+95i
  11.     ldc "AES/ECB/NoPadding"
  12.     invokestatic javax/crypto/Cipher.getInstance(Ljava/lang/String;)Ljavax/cr\
  13. ypto/Cipher;
  14.     astore 6
  15.   .line 782
  16.     aload 6
  17.     iconst_2
  18.     aload_0 ; met020_slot000
  19.     invokespecial com/oleamedical/lmtool/LmAdmin.do()Ljavax/crypto/spec/Secre\
  20. tKeySpec;
  21.     invokevirtual javax/crypto/Cipher.init(ILjava/security/Key;)V
  22.   .line 783
  23.     aload 6
  24.     new java/lang/String
  25.     dup
  26.     aload_1 ; met020_slot001
  27.     invokespecial java/lang/String.<init>([B)V
  28.     invokestatic com/oleamedical/aux/Aux.do(Ljava/lang/String;)[B
  29.     invokevirtual javax/crypto/Cipher.doFinal([B)[B
  30.     astore 7
  31.   .line 784
  32.     aload_0 ; met020_slot000
  33.     aload 7
  34.     aload_1 ; met020_slot001
  35.     iload_2 ; met020_slot002
  36.     aload_3 ; met020_slot003
  37.     iload 4
  38.     invokespecial com/oleamedical/lmtool/LmAdmin.do([B[BZLjava/sql/Connection\
  39. ;Z)Z
  40.     istore 5
  41.   .line 792
  42.  
  43. met020_51:                                     ; DATA XREF: do_19+95i
  44.     goto met020_92
  45.   .line 785
  46.  
  47. met020_54:                                     ; DATA XREF: do_19+95i
  48.     .stack
  49.       locals Top
  50.       locals Top
  51.       locals Top
  52.       locals Top
  53.       locals Top
  54.       locals Integer
  55.       stack Object org/h2/cOn/CON
  56.     .end stack
  57.     astore 6
  58.   .line 786
  59.     aload 6
  60.     invokevirtual org/h2/cOn/CON.getErrorCode()I
  61.     sipush 23505
  62.     if_icmpeq met020_77                                   <b>---->   вот тут</b>
  63.   .line 787
  64.     new java/lang/RuntimeException
  65.     dup
  66.     aload 6
  67.     invokespecial java/lang/RuntimeException.<init>(Ljava/lang/Throwable;)V
  68.     athrow
  69.   .line 792
  70.  
  71. met020_77:                                     ; CODE XREF: do_19+64j
  72.     .stack use locals
  73.     .end stack
  74.     goto met020_92
  75.   .line 789
  76.  
  77. met020_80:                                     ; DATA XREF: do_19+95i
  78.     .stack
  79.       stack Object java/lang/Exception
  80.     .end stack
  81.     astore 6
  82.   .line 790
  83.     getstatic java/lang/System.err Ljava/io/PrintStream;
  84.     ldc " -> ERROR: ONE OR MORE INVALID LICENSE KEYS!"
  85.     invokevirtual java/io/PrintStream.println(Ljava/lang/String;)V
  86.   .line 791
  87.     iconst_0
  88.     ireturn
  89.   .line 793
  90.  
  91. met020_92:                                     ; CODE XREF: do_19:met020_51j ...
  92.     .stack
  93.       locals Top
  94.       locals Top
  95.       locals Top
  96.       locals Top
  97.       locals Top
  98.       locals Integer
  99.     .end stack
  100.     iload 5
  101.     ireturn


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

И чуть выше - invokevirtual javax/crypto/Cipher.doFinal([B)[B
Где концы найти? Может там пропатчить? я в смысле - это относится к системной Ява либе?



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

Создано: 21 июня 2017 22:39
· Личное сообщение · #4

Что мешает подправить java файл, скомпилировать его и подсунуть программе?



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

Создано: 21 июня 2017 23:17
· Личное сообщение · #5

А такое получится? Я аттач прикрепил к первому сообщению. Там ошибки декомпиляции. Код не восстановлен.
Или можно кусок прикрутить?



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

Создано: 21 июня 2017 23:58
· Личное сообщение · #6

maddmaks пишет:
А такое получится? Я аттач прикрепил к первому сообщению. Там ошибки декомпиляции. Код не восстановлен.
Или можно кусок прикрутить?


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



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

Создано: 22 июня 2017 08:31
· Личное сообщение · #7

еще можно патчить ява байт-код (если мало байтов и по размеру 1 в 1)
например через такую http://prntscr.com/fmpe18

| Сообщение посчитали полезным: sefkrd

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

Создано: 22 июня 2017 08:36 · Поправил: maddmaks
· Личное сообщение · #8

sendersu пишет:
еще можно патчить ява байт-код

ну я так и делаю, ибо он нормально не разбирается-собирается. Только и тут геморрой. Это ж блин не асм.

Спасибо за наводку на тулзу. Эта намного лучше и удобнее, чем та что использую я.


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


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