Jump to content
Korean Random
outside

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

Recommended Posts

Добрый день.

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

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

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

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

 

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

 

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

 

step2.zip

Edited by outside

Share this post


Link to post

Short link
Share on other sites

 

 

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

 

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

Share this post


Link to post

Short link
Share on other sites

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

 

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

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

 

abc.zip

 

 

 

 

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

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

 

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

Edited by outside

Share this post


Link to post

Short link
Share on other sites

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

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

Жаль маршал не имеет хеш-суммы :(

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

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

Share this post


Link to post

Short link
Share on other sites
Такое ощущение, что с байтами там тоже что-то намутили

 

 

#upd1:

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

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

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

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

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

 

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

 

step2.zip

Edited by outside

Share this post


Link to post

Short link
Share on other sites
Они оба диззасемблируются
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.хх (примерно, так).

Edited by fecell

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...