What's new
Runion

This is a sample guest message. Register a free account today to become a member! Once signed in, you'll be able to participate on this site by adding your own topics and posts, as well as connect with other members through your own private inbox!

Реверс-инжиниринг байткода. Нужна помощь.

Logmen

Midle Weight
Депозит
$0
Приветствую всех форумчан. У меня такой вопрос к специалистам по смарт контрактам и
реверс-инжинирингу байткода.

Речь идёт о контракте бота (естественно не верифицированный) в сети BSC

При декомпиляции кода на bscscan.com получается 1628 строчек читаемого кода, а потом сообщение
об ошибке # Decompilation aborted, sorry: ("decompilation didn't finish",)


Пробовал декомпилятор dedaub.com, но там получается всего 616 строчек кода.

Какие есть возможности декомпилировать байткод полностью с целью дальнейшего анализа.
Есть идея по дальнейшему сотрудничеству. Кто может помочь пишите в личку.
 
Logmen сказал(а):
# Decompilation aborted, sorry: ("decompilation didn't finish",)
Logmen сказал(а):
dedaub.com, но там получается всего 616 строчек кода.


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

Ну и ..получить не опкод, а просто дизассемблер можно. Но хз что там кроется за "unknow opcode"
Диззассемблер "проехал" ошибку - как вариант и что-то выдал.



Наверное самый интеллектуализированный декомпилятор, из тех пяти, что я просматрела. Лучше уже не будет, это момент бесспорный (в паблике, на сег. день).
А то что строк 600+ а не 1,6К - неважно)
Так как декомпиляция идет по разным алгоритмам. Например, в декомпилированном коде твоего контракта в одной версии 25 функций, а в другой - 38.
То есть код "вытянут", функции заменены ветвлениями и переходами.

Вывод один - работать с тем что есть, подбираясь с двух сторон.
Понимать как бы должен быть написан код контракта на solidity, т.е. сам алгоритм и параллельно исследовать те самые 600+ строк.
Конечно, подбирая реверс-инструменты.

Есть и другие подходы.
 
lisa99 сказал(а):
Наверное самый интеллектуализированный декомпилятор, из тех пяти, что я просматрела. Лучше уже не будет, это момент бесспорный (в паблике, на сег. день).
А то что строк 600+ а не 1,6К - неважно)
Так как декомпиляция идет по разным алгоритмам. Например, в декомпилированном коде твоего контракта в одной версии 25 функций, а в другой - 38.
То есть код "вытянут", функции заменены ветвлениями и переходами.

Вывод один - работать с тем что есть, подбираясь с двух сторон.
Понимать как бы должен быть написан код контракта на solidity, т.е. сам алгоритм и параллельно исследовать те самые 600+ строк.
Конечно, подбирая реверс-инструменты.

Есть и другие подходы.
Нажмите, чтобы раскрыть...

Каково мнение? Можно ли сделать что-то рабочее на этой основе?
 
Logmen сказал(а):
Приветствую всех форумчан. У меня такой вопрос к специалистам по смарт контрактам и
реверс-инжинирингу байткода.

Речь идёт о контракте бота (естественно не верифицированный) в сети BSC

При декомпиляции кода на bscscan.com получается 1628 строчек читаемого кода, а потом сообщение
об ошибке # Decompilation aborted, sorry: ("decompilation didn't finish",)


Пробовал декомпилятор dedaub.com, но там получается всего 616 строчек кода.

Какие есть возможности декомпилировать байткод полностью с целью дальнейшего анализа.
Есть идея по дальнейшему сотрудничеству. Кто может помочь пишите в личку.
Нажмите, чтобы раскрыть...

Тяжко тебе паря, если ты говоришь о коде солидити, то фокус в том что сам код исходный который ты хочешь декомпилировать должен быть написан по правильному для выбранного декомпилятора стандарта. Сталкивался с таким на etherscan и потратил пол жизни на выяснение того - почему? В итоге всё оказалось до преступного тупо и просто.
После использования функции flatten на файле с кодом он превратился в стандартизированный вид который был успешно декомпилирован.
Так же хочу добавить, что использование внешних файлов, контрактов, библиотек, аппликейшнов в коде иногда тоже мешает выполнению декомпиляции, и наоборот, какой-то закономерности я не обнаружил в этом, выход только один - тестировать всё подряд.

Если же ты имеешь в виду изначально байткод то во имя предотвращения обратного инжиниринга байткод обфусцируется или шифруется.
Другая возможная причина того, что на dedaub.com только 616 строк кода, заключается в том, что декомпилятор не может восстановить некоторые функции или переменные из байткода и пропускает или упрощает их. Можно попробовать сравнить код с байткодом и посмотреть, есть ли в нем пробелы или несоответствия.
 
Logmen сказал(а):
Можно ли сделать что-то рабочее на этой основе?

Другие реверсеры делают, на каких то контрактах.
Еще и есть автоматизация работы с опкодом для поиска багов\дыр.
То есть кто-то работает.
Получится ли конкретно у меня с конкретным контрактом - я не знаю.
В планах - внести изменения в адреса, перекомпилировать и каким-то образом потестировать без расходов- самый примитивный ход мысли.
 
Top