• XSS.stack #1 – первый литературный журнал от юзеров форума

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

Logmen

RAM
Пользователь
Регистрация
19.05.2023
Сообщения
106
Реакции
32
Приветствую всех форумчан. У меня такой вопрос к специалистам по смарт контрактам и
реверс-инжинирингу байткода.

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

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


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

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

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

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


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

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

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

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

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

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

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


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

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

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


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх