Конвертируйте файл CAP Java Applet в * .class для декомпиляции - PullRequest
0 голосов
/ 29 апреля 2018

Здесь возможен файл CAP, содержащий код вредоносного ПО без исходного кода, а также без файла экспорта.

Это файл CAP для старой версии платформы, т.е. GP211 .

У меня большой опыт реверс-инжиниринга Java в Classic JVM и Dalvik Но Java Card - менее популярная и более близкая платформа. Большинство инструментов предназначены для CLASS / JAR или DEX, а не CAP.

Я нашел несколько инструментов (включая некоторые виртуальные машины, которые имитируют JCOP), которые могли бы дизассемблировать файл CAP, но CAP довольно большой, а работа с ассемблерным кодом слишком сложна и медленна для меня .

И мы не можем просто сделать «CAP текстовый байт-код -> Notepad ++ -> некоторый редактор Java-байт-кода -> Java-байт-код».
Слишком много различий между байт-кодом CAP и байт-кодом Java. Не только таблица методов, но и большое количество различных кодов операций.
Просто декомпилируйте converter.jar Java Card Kit (это инструмент, который конвертирует CLASS -> CAP) и увидите, что преобразование является довольно сложным процессом.

Мне нужен какой-нибудь автоматический конвертер.

Между тем, я разрабатываю набор решений для смарт-карт, и «CAP-декомпилятор» будет хорошим элементом в списке.
Да, я напишу это.
Я планирую построить его поверх Javassist с одной стороны, какую-нибудь библиотеку CAP-дизассемблирования со второй и какой-нибудь стандартный декомпилятор (-ы) Java из третьей.

Но я должен быть уверен, что аналогов нет.

ВОПРОС ЗДЕСЬ:
Есть ли на Земле какой-нибудь инструмент, который может конвертировать Java Card * .cap в Java * .class (или декомпилировать * .cap напрямую) или нет?
Я не прошу библиотеку (я нашел библиотеки ), я прошу инструмент. Runnable.

(Также, если вы знаете некоторые подводные камни в этом преобразовании байт-кода, я буду признателен, если вы опишите их мне. Теперь я увидел, что это просто копирование одного списка кодов операций в другой с гигантским if...else if...else if...else if... или * 1042. * дерево (и некоторые разные сотрудники, т.е. преобразователи, поля и т. д.).

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Для тех, кто пытается выполнить обратный инжиниринг и получает ошибки ниже при работе нормализатора:

Не удается найти файл экспорта для импортированного пакета a0: 0: 0: 0: 62: 0: 1

Пожалуйста, предоставьте правильный файл экспорта

Отсутствуют файлы экспорта API Java Card JDK. -p /Users/user/etc/jcard-sdk-3.0.5u3/api_export_files/

Не удается найти файл экспорта для импортированного пакета a0: 0: 0: 0: 9: 0: 3: ff: ff: ff: ff: 89: 10: 71: 0: 2

Пожалуйста, предоставьте правильный файл экспорта

Отсутствуют файлы экспорта JDK Sim Toolkit -p /Users/user/etc/etc/43019-560/Annex_B_Export_Files

Здесь - это подробности установки Sim Toolkit JDK

Вот скрипт командной строки для запуска нормализатора на вариантах Linux:

java -server -Djc.home=/Users/user/etc/jcard-sdk-3.0.5u3 -cp .:../lib/* com.sun.javacard.normalizer.Main normalize -i /Users/user/test.cap -p /Users/user/etc/jcard-sdk-3.0.5u3/api_export_files/ -p /Users/user/etc/43019-560/Annex_B_Export_Files/

0 голосов
/ 09 мая 2018

Для генерации .class файлов из .cap файлов используйте нормализатор инструмент, который является частью недавнего Java Card SDK («Классик-3.0.4» работал для меня) .

Например, чтобы преобразовать helloworld.cap из источников gpshell, используйте следующую команду (вам нужно настроить путь api_export_files к соответствующему каталогу):

normalizer.bat normalize -i helloworld.cap -p /path/to/api_export_files

Затем вы можете декомпилировать выходной файл (net/sourceforge/globalplatform/jc/helloworld/AAA.class), используя ваш любимый Java-декомпилятор, например ::

package net.sourceforge.globalplatform.jc.helloworld;

import javacard.framework.APDU;
import javacard.framework.Applet;
import javacard.framework.Util;

public class AAA
  extends Applet
{
  private static final byte[] sfield_token255_descoff10_staticref0 = { 72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33 };

  public void process(APDU paramAPDU)
  {
    byte[] arrayOfByte = paramAPDU.getBuffer();
    paramAPDU.setIncomingAndReceive();
    Util.arrayCopyNonAtomic(sfield_token255_descoff10_staticref0, (short)0, arrayOfByte, (short)0, sfield_token255_descoff10_staticref0.length);
    paramAPDU.setOutgoingAndSend((short)0, sfield_token255_descoff10_staticref0.length);
  }

  public static void install(byte[] paramArrayOfByte, short paramShort, byte paramByte)
  {
    new AAA();
  }

  private AAA()
  {
    register();
  }
}

Некоторые дополнительные (случайные) заметки:

  • этот подход не работает напрямую для всех апплетов (некоторые выходные .class файлы для апплета, который я написал ранее, были отклонены декомпилятором как недействительные, но YMMV) * ​​1023 *

  • вам необходимо предоставить файлы экспорта для всех импортированных пакетов апплета, включая:

    • API Java Card (последняя версия всегда работала для меня, но YMMV) * ​​1031 *

    • Global Platform API, API-интерфейсы, связанные с SIM-инструментарием, расширения поставщиков карт или любые другие общедоступные пакеты (если они используются)

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

  • , чтобы получить список импортированных идентификаторов пакетов, вы можете либо проверить соответствующие структуры в файле CAP (я не знаю ни одного общедоступного инструмента для этого, извините), либо просто попробовать постепенно (нормализатор выдает сообщения об ошибках, такие как «Не удается» найти файл экспорта для импортированного пакета "для отсутствующих файлов экспорта)

  • экспорт пакета для самого .cap не нужен

  • вероятно, будет сложнее перекомпилировать апплет из реинжиниринговых источников, чем для настольного Java (частично зависит от используемых возможностей декомпилятора)

  • если все, что вам нужно, это проверить, не вводил ли кто-нибудь бэкдор в бинарный файл .cap, тогда будет намного проще создать чистый .cap файл из надежных источников (в идеале, используя тот же компилятор ) и сравните выходные данные декомпилятора для clean и подозрительных cap-файлов

  • проверка законности всего, что вы делаете

Удачи!

...