outside Posted June 9, 2016 Share Posted June 9, 2016 (edited) Добрый день. Нужна помощь с декомпиляцией питон скриптов. Игрушка использует движок BigWorld (такой же, как у WoT). Структура файлов похожая (папки с такими же названиями, питон скрипты скомпилированы). Но сами скрипты - поставляются с обрезанными magic value и timestamp (первые 8 байт) Пробовал подставить magic от различных версий питона, но все попытки декомпиляции тщетны. Т.к. я неопытен в этом - ищу человека, кто сможет помочь декомпилировать эти скрипты. В случае успеха - с меня "подарок". Если кто готов - отпишите в теме, я скину файлы этих скриптов #upd1:1. Взял клиенский скомпилированный base64.o, добавил ему хедер (в архиве называется base64_ro.pyc)2. Нашел исходники в гугле. (в архиве называется base64.py)3. Скомпилировал из исходников base64 скрипт (в архиве base64.pyc)Они оба диззасемблируются, но если сравнить их в хекс редакторе - можно увидеть, что некоторые значения опкодов действительно отличаются (хотя код должен одно и тоже выполнять).Т.е. получается, что разработчики специально изменили некоторый айдишники опкодов. Как можно указать свой список (изменить дефолтные айди опкодов) для дизасемблера и декомпилятора? step2.zip Edited June 9, 2016 by outside @ Quote Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted June 9, 2016 Share Posted June 9, 2016 Но сами скрипты - поставляются с обрезанными magic value и timestamp (первые 8 байт) Немного сомнительно, скорее всего скрипты нативно шифруются как например в корабликах. Выложите сюда один скриптик, который там поменьше. @ Quote Link to comment Short link Share on other sites More sharing options...
outside Posted June 9, 2016 Author Share Posted June 9, 2016 (edited) (расширение .o у них по умолчанию, просто переименовать в .pyc если нужно) res\output\entities\common\const.o 150кб res\output\entities\common\lib\abc.o 7кб abc.zip Немного сомнительно, скорее всего скрипты нативно шифруются как например в корабликах. Выложите сюда один скриптик, который там поменьше. Возможно. Но я сравнивал в хекс эдиторе с тем, как выглядят обычные .pyc - там все похоже, за исключением первых 8 байт, которые вырезанны. Ну и дизасемблирование в PjOrion вроде показывает какие то данные, если вручную эти 8 байт добавить от какой либо версии. В любом случае, спасибо за помощь, что посмотрите, возможно вы увидите сразу то, что я не вижу Edited June 9, 2016 by outside @ Quote Link to comment Short link Share on other sites More sharing options...
GPCracker Posted June 9, 2016 Share Posted June 9, 2016 (edited) Но я сравнивал в хекс эдиторе с тем, как выглядят обычные .pyc - там все похоже, за исключением первых 8 байт, которые вырезанны.И правда, интересные файлики... Но меджики перепробовал многие, адекватного результата получить не удалось. Такое ощущение, что с байтами там тоже что-то намутили... Выборочно. Код-то вроде дизассемблится, только вот местами попадаются неадекватные инструкции, типа в стеке два объекта, а вызывают ROT_FOUR и в том же духе. Жаль маршал не имеет хеш-суммы :( Немного сомнительно, скорее всего скрипты нативно шифруются как например в корабликах.Кстати, корабли-то удалось расшифровать? Edited June 9, 2016 by GPCracker @ Quote Link to comment Short link Share on other sites More sharing options...
outside Posted June 9, 2016 Author Share Posted June 9, 2016 (edited) Такое ощущение, что с байтами там тоже что-то намутили #upd1: 1. Взял клиенский скомпилированный base64.o, добавил ему хедер (в архиве называется base64_ro.pyc) 2. Нашел исходники в гугле. (в архиве называется base64.py) 3. Скомпилировал из исходников base64 скрипт (в архиве base64.pyc) Они оба диззасемблируются, но если сравнить их в хекс редакторе - можно увидеть, что некоторые значения опкодов действительно отличаются (хотя код должен одно и тоже выполнять). Т.е. получается, что разработчики специально изменили некоторый айдишники опкодов. Как можно указать свой список (изменить дефолтные айди опкодов) для дизасемблера и декомпилятора? step2.zip Edited June 9, 2016 by outside @ Quote Link to comment Short link Share on other sites More sharing options...
fecell Posted June 10, 2016 Share Posted June 10, 2016 (edited) Они оба диззасемблируются 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 June 10, 2016 by fecell @ Quote Link to comment Short link Share on other sites More sharing options...
Recommended Posts
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.