Перейти к содержимому

Фото

Нужна помощь с декомпиляцией питон скриптов. BigWorld китайская ММО.


  • Чтобы отвечать, сперва войдите на форум
5 ответов в теме

#1 outside

outside
  • Пользователь
  • 4 сообщений
  • WoT Server:RU (Русский)

Опубликовано 09 Июнь 2016 - 17:18

Добрый день.

Нужна помощь с декомпиляцией питон скриптов. Игрушка использует движок BigWorld (такой же, как у WoT). Структура файлов похожая (папки с такими же названиями, питон скрипты скомпилированы).

Но сами скрипты - поставляются с обрезанными magic value и timestamp (первые 8 байт)

Пробовал подставить magic от различных версий питона, но все попытки декомпиляции тщетны. Т.к. я неопытен в этом - ищу человека, кто сможет помочь декомпилировать эти скрипты. В случае успеха - с меня "подарок".

Если кто готов - отпишите в теме, я скину файлы этих скриптов

 

#upd1:
1. Взял клиенский скомпилированный base64.o, добавил ему хедер (в архиве называется base64_ro.pyc)
2. Нашел исходники в гугле. (в архиве называется base64.py)
3. Скомпилировал из исходников base64 скрипт (в архиве base64.pyc)
Они оба диззасемблируются, но если сравнить их в хекс редакторе - можно увидеть, что некоторые значения опкодов действительно отличаются (хотя код должен одно и тоже выполнять).
Т.е. получается, что разработчики специально изменили некоторый айдишники опкодов.

 

Как можно указать свой список (изменить дефолтные айди опкодов) для дизасемблера и декомпилятора?

 

Прикрепленный файл  step2.zip   12,35 Кб   7 раз скачано


Изменено: outside, 09 Июнь 2016 - 22:08

  • 0

#2 StranikS_Scan

StranikS_Scan

    Теоретик WorldOfTanks

  • Premium Member
  • 5 705 сообщений
  • WoT Server:RU (Русский)

Опубликовано 09 Июнь 2016 - 17:52

Но сами скрипты - поставляются с обрезанными magic value и timestamp (первые 8 байт)

 

Немного сомнительно, скорее всего скрипты нативно шифруются как например в корабликах. Выложите сюда один скриптик, который там поменьше. 


  • 0

#3 outside

outside
  • Пользователь
  • 4 сообщений
  • WoT Server:RU (Русский)

Опубликовано 09 Июнь 2016 - 17:57

(расширение .o у них по умолчанию, просто переименовать в .pyc если нужно)

 

res\output\entities\common\const.o 150кб 

res\output\entities\common\lib\abc.o 7кб 

 

Прикрепленный файл  abc.zip   56,29 Кб   6 раз скачано

 

 

 

 

Немного сомнительно, скорее всего скрипты нативно шифруются как например в корабликах. Выложите сюда один скриптик, который там поменьше. 

Возможно. Но я сравнивал в хекс эдиторе с тем, как выглядят обычные .pyc - там все похоже, за исключением первых 8 байт, которые вырезанны. Ну и дизасемблирование в PjOrion вроде показывает какие то данные, если вручную эти 8 байт добавить от какой либо версии. 

 

В любом случае, спасибо за помощь, что посмотрите, возможно вы увидите сразу то, что я не вижу


Изменено: outside, 09 Июнь 2016 - 18:01

  • 0

#4 GPCracker

GPCracker

    Piranhas Team

  • Пользователь
  • 1 997 сообщений
  • WoT Server:RU (Русский)
  • Город: Москва

Опубликовано 09 Июнь 2016 - 18:50

Но я сравнивал в хекс эдиторе с тем, как выглядят обычные .pyc - там все похоже, за исключением первых 8 байт, которые вырезанны.

И правда, интересные файлики... Но меджики перепробовал многие, адекватного результата получить не удалось. Такое ощущение, что с байтами там тоже что-то намутили... Выборочно. Код-то вроде дизассемблится, только вот местами попадаются неадекватные инструкции, типа в стеке два объекта, а вызывают ROT_FOUR и в том же духе.
Жаль маршал не имеет хеш-суммы :(

Немного сомнительно, скорее всего скрипты нативно шифруются как например в корабликах.

Кстати, корабли-то удалось расшифровать?

Изменено: GPCracker, 09 Июнь 2016 - 18:50

  • 0

#5 outside

outside
  • Пользователь
  • 4 сообщений
  • WoT Server:RU (Русский)

Опубликовано 09 Июнь 2016 - 21:17

Такое ощущение, что с байтами там тоже что-то намутили

 

 

#upd1:

1. Взял клиенский скомпилированный base64.o, добавил ему хедер (в архиве называется base64_ro.pyc)

2. Нашел исходники в гугле. (в архиве называется base64.py)

3. Скомпилировал из исходников base64 скрипт (в архиве base64.pyc)

Они оба диззасемблируются, но если сравнить их в хекс редакторе - можно увидеть, что некоторые значения опкодов действительно отличаются (хотя код должен одно и тоже выполнять). 

Т.е. получается, что разработчики специально изменили некоторый айдишники опкодов. 

 

Как можно указать свой список (изменить дефолтные айди опкодов) для дизасемблера и декомпилятора?

 

Прикрепленный файл  step2.zip   12,35 Кб   7 раз скачано


Изменено: outside, 09 Июнь 2016 - 22:08

  • 0

#6 fecell

fecell
  • Пользователь
  • 277 сообщений
  • Nick:fecell

Опубликовано 10 Июнь 2016 - 06:22

Они оба диззасемблируются
33           0 LOAD_GLOBAL              0 (_translation)
              3 SLICE+0            
              4 SETUP_EXCEPT             2 (to 9)
34           7 LOAD_FAST               42 --ERR--

где-же они оба диззасемблируются..

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

79 -> 7d 
78 -> 7c 
4c -> 53 

но наверное есть и другие. менять поиском/заменой нельзя - только значения команд, а не параметров надо менять. трассировкой или вручную вообщем.

 

Кстати, корабли-то удалось расшифровать?

давно уже, насколько знаю.


Как можно указать свой список (изменить дефолтные айди опкодов) для дизасемблера и декомпилятора?

их куча разных. каждый по своему реализует. разбирайся в исходном коде того ПО которым пользуешься для этих целей.

Дело в том, что разные версии питона имеют свои особенности в байткоде, поэтому в C:\Python27\Lib\opcode.py содержаться актуальные для текущей версии.

А дизасемблеры и декомпиляторы имеют как правило свои таблицы для каждой версии питона - 2.5, 2.6, 2.7, 3.хх (примерно, так).


Изменено: fecell, 10 Июнь 2016 - 02:48

  • 0





0 пользователей читают эту тему

0 зарегистрированных, 0 гостей, 0 невидимых

© Mr 13