Hermes

Hermes - JS Engine. Перегоняет jS в байткод и от этого все работае быстрее

https://facebook.github.io/react-native/docs/hermesarrow-up-right release бинари: https://github.com/facebook/hermes/releasesarrow-up-right

О подключении в React Native проект https://facebook.github.io/react-native/docs/hermesarrow-up-right

Отличие от React Native в том, что index.android.bundle будет сериализован (бинарщина)

$ file index.android.bundle
index.android.bundle: Hermes JavaScript bytecode, version 62

$ hermes -b --dump-bytecode index.android.bundle
Error deserializing bytecode: Wrong bytecode version. Expected 74 but got 62%

$ hermes -version
74

Есть несколько релизов hermes:
v0.8.0 - 83
v0.5.0 - 74
v0.3.* - 72
v0.2.1 - 62

TODO: поресерчить

Предположение: можно сделать android (или ios, или web) приложение с инструментацией и в него переложить исследуемый index.android.bundle

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

Создать гибридное приложение для исследования можно с помощью фреймфорка Expoarrow-up-right.

Собираем проект в бандл (у меня получилось для android, для web — js бандл получился — todo глянуть)

При этом собирается именно hermes-проект (hbc — собранный бандл с байткодом)

Собрать проект в итоговый билд (с нативным приложением) и запустить:

Tools

оф бинари можно найти по ссылке: https://github.com/facebook/hermes/releasesarrow-up-right

Туда входят:

  • hbcdump

  • hdb

  • hermes

  • hermesc

  • hvm

hermes

hbcdump

hbcdumparrow-up-right — Hermes bytecode disassembler

Зная ID строк, инструкций, функций (через hbctool, например), мы можем изучать работу приложения

hdb

JavaScript command line debugger

hermesc

Standalone Hermes compiler. This can compile JavaScript to Hermes bytecode, but does not support executing it.

hvm

Standalone Hermes VM. This can execute Hermes bytecode, but does not support compiling it.

hbctool

hbctoolarrow-up-right Инструмент для более удобного дизассемблинга (в сравнении с hbcdump) и возможности патчинга.

После распаковки будет три файла: instruction.hasm (дизассемблированный код в виде функций листингом), metadata.json (содержит информацию, где находятся какие функции и тп), string.json (строки и их ID).

hermes-dec

Инструмент от P1sec: https://github.com/P1sec/hermes-dec/arrow-up-right

[Frida] Android

подключение к ядру, исполнить код не смог пока

Соответствующий код в приложении

Это была попытка добраться до jsFactory, однако, все равно не смог найти методы, чтобы что-то исполнить в этом контексте. Вариант далее - разобраться как работает React Debug, и попробовать что-то такое сделать из frida.

Last updated