outside 0 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 Share this post Link to post Short link Share on other sites
StranikS_Scan 4,203 #332191 Posted June 9, 2016 Но сами скрипты - поставляются с обрезанными magic value и timestamp (первые 8 байт) Немного сомнительно, скорее всего скрипты нативно шифруются как например в корабликах. Выложите сюда один скриптик, который там поменьше. Quote Share this post Link to post Short link Share on other sites
outside 0 #332193 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 Share this post Link to post Short link Share on other sites
GPCracker 2,088 #332201 Posted June 9, 2016 (edited) Но я сравнивал в хекс эдиторе с тем, как выглядят обычные .pyc - там все похоже, за исключением первых 8 байт, которые вырезанны.И правда, интересные файлики... Но меджики перепробовал многие, адекватного результата получить не удалось. Такое ощущение, что с байтами там тоже что-то намутили... Выборочно. Код-то вроде дизассемблится, только вот местами попадаются неадекватные инструкции, типа в стеке два объекта, а вызывают ROT_FOUR и в том же духе. Жаль маршал не имеет хеш-суммы :( Немного сомнительно, скорее всего скрипты нативно шифруются как например в корабликах.Кстати, корабли-то удалось расшифровать? Edited June 9, 2016 by GPCracker Quote Share this post Link to post Short link Share on other sites
outside 0 #332206 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 Share this post Link to post Short link Share on other sites
fecell 125 #332224 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 Share this post Link to post Short link Share on other sites