Как декомпилировать файлы rpyc

Обновлено: 07.07.2024

Предисловие

Статья первоначально писалась для журнала СПЕЦ Xakep. И вышла в апрельском номере прошлого года, потому заранее извиняюсь за немного устаревшие данные. К примеру P32Dasm на данный момент уже довольно стабилен, а в VB Decompiler уже добавлено с того времени столько возможностей, что он является самым продвинутым средством для декомпиляции программ, написанных на Visual Basic.

Методика восстановления исходного кода

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

Dede by DaFixer

Если Вы используете Win32dasm в качестве ддизассемблера (о ужас) - программа может экспортировать данные в понятный ему формат. Вообще весьма позитивный продукт. Плюс ко всему программа может сгенерировать исходник, который можно открыть в Delphi. Главный минус - DeDe не может выдергивать из EXE компоненты используемые в программе, потому в исходнике будет множество нераспознанных типов данных.

SourceRescuer

Еще один декомпилятор Delphi, но попроще. Может восстанавливать только формы и генерировать заголовок pas файлов. Главное отличие от DeDe - работает мгновенно и имеет более эргономичный интерфейс. Чтож, одной программе дано иметь крутой интерфейс, другой - большие возможности. тут ничего не поделаешь. Из главных особенностей программы можно выделить то, что она генерирует шаблон исходника не только в формате Delphi, но и в формате C++ Builder. Думаю эта фишка не лишняя, так как после компиляции билдерские программы от дельфевых мало чем отличаются, а вот декомпилировать их только как Delphi код - не всегда разумно. Программа эта распространяется в друх видах: GUI и консольном и требует покупки лицензии.

REC by Giampiero Caprino

Полное название - the Reverse Engineering Compiler. Программа предназначена для декомпиляции файлов, написанных на языках использующих С++. Так как C++ очень мощный язык, который не приемлит виртуальных машин и огромных GUI библиотек, то можно сделать очень логичный вывод, что избыточной информации он в EXE практически не вставляет. Отсюда имейте ввиду, что данный декомпилятор всего лишь пытается распознать C++ код, а по большей части как бы конвертирует код с ассемблера на C++. Не удивляйтесь, если увидите в исходнике что нибудь типа:

CODE NOW! eax++; for(eax=1000;eax=0;eax--)

Это нормально. И поверте, лучше уж исследовать это, чем:

Хотя кому как. Некоторые знают ассемблер даже лучше чем ненормативную лексику.
Смею еще Вас предупредить, что программа пока работает не очень стабильно, по крайней мере версия 1.4. Потому остается только пожелать проекту его дальнейшее развитие, так как программа нужная и думаю пригодится не только исследователям, но и разработчикам.

DJ Java Decompiler

А это уже декомпилятор Java классов. Довольно удобен и прост в использовании. открываешь в нем класс и уже созерцаешь исходник. Имеется довольно мощная подсветка синтаксиса, поиск и настройки. Также есть браузер классов и объектов. В общем довольно мощный и интересный декомпилятор. Жаль только EXE файлы написанные на Java не декомпилирует.

ReFox by Jan Brebera

Со слов людей, работающих на FoxPro - довольно мощный декомпилятор кода, напинанного на фоксе. Причем версия фоксы не критична - декомпилятор берет и Dos и Windows версии. Декомпилятор поддерживает не только стандартные, но и закриптованные фоксой модули. Даже если код был скомпилирован под Macintosh - декомпилятор возмется его декомпилировать и даже портирует выходной вариант под DOS/Windows. В общем, если Вы долго разрабатывали экономическую программу для своего отдела 20 лет назад и ненароком держали исходники на стареньком винте, который приказал долго жить - скачайте ReFox - он сочтет за честь восстановить Ваш код.

Декомпиляторы Visual Basic’а

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

Один из самых стабильных декомпиляторов форм. Хотя, больше ничем и не примечателен. Объявления API функций делает без параметров, от чего пользы мало, код не декомпилирует вообще. Имеет довольно подробную документацию и просит за свое использование немало зеленых президентов. В общем, если Вам не жалко денег и нужно декомпилировать только элементы интерфейса - можно использовать.

VB Editor by HEXMAN

Абсолютно бесплатный редактор форм и лежащих на них объектах. Если Вы занимаетесь русификацией программ, но не можете ничего поделать с программами, написанными на VB (Restorator тут бессиллен) - смело используйте данную утилиту. Она просто рай для локализаторов интерфейса. Программа имеет двухязычный интесфейс (Французский и Английский), причем по дефолту почему-то грузится Французский. Причем поможет и сгенерировать форму, на основе сделанных изменений, так что вполне подойдет и как альтернатива уже упомянутого выше VBRezQ.

VBReFormer by Sylvain Bruyere

Еще одна работа французских программистов. Эта программа несколько помощнее предыдущей. Помимо просмотра и изменения форм предоставляет также возможность извлечь из EXE всякие изображения, которые обычно лежат в frx файлах. Trial версия позволяет только просматривать результаты. При этом не только запрещается сохранять результат, но и вообще программа постоянно обнуляет буфер обмена дабы исключить и возможность копирования. Отсюда прежде чем запускать данную утилиту - убедитесь, что в буфере нет нужных и еще не сохраненных данных. Помимо всего прочего программа предоставляет для обзора некоторые данные из заголовка EXE файла, потому адрес точки входа в программу и Image Base можно узнать прямо не отходя от VBReFormer’а. Еще один плюс софтины - она умеет распознавать используемые в декомпилируемой программе ActiveX файлы и позволяет просмотреть некоторые их свойства и методы. Жаль только что не использует эту информацию при генерации форм - там все ActiveX’ы выглядят немного убого, без свойств и присвоенных им данных. При желании эта тулза может обыскать весь Ваш жесткий диск в поисках программ, написанных на VB. Зачем это нужно - не знаю, наверное для тестирования возможностей программы на разных EXE’шниках.

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

exdec by josephco

Наверное самый известный на момент написания статьи декомпилятор пикода. Как говорится старенький, но рабочий. Возможность у программы всего одна - декомпилить p-code в том виде в каком он есть. То есть того кода который писал программист на VB Вы не увидите, а вот то что сгенерил компилятор - да, причем в довольно читабельном для профессионала виде. В комплекте с программой идут примеры и небольшой туториал. Туториал поможет хотя бы немного понять, что значит вся эта декомпилированная гора псевдокода и как ее читать, потому если Вы разбираетесь с P-Code’ом впервые - очень советую обратить на этот туториал внимание.

Почти полный аналог exdec, только написанный китайскими разработчиками. Результат своей работы не только выводит на экран, но и сохраняет в файле ParseVB.txt. На случай падения программы (а такое частенько случается) - этот файл здоровски помогает.

p32Dasm by DARKER

Лучшая альтернатива exdec’у и VBParser’у. Программа в отличии от двух предыдущих написана на VB (exdec и VBParser написаны на C++) и динамично развивается последнее время. Имеет подсветку синтаксиса, калькулятор адресов, умеет декомпилировать с определенного смещения в файле, а также подобно дизассемблерам способна представить все строки и функции используемые в программе удобным списком с возможностью мгновенно перейти на выбранную позицию. Главный недостаток - относительная нестабильность работы и медленная скорость, в остальном же программа стоит того, чтобы ее посмотреть. Распространяется бесплатно.

VBDE by iorior

Довольно неплохой декомпилятор, причем бесплатный. Декомпилит формы (правда без ActiveX’ов, если они присутствуют). Выдает адреса на все процедуры, а если это возможно, то выводит не только адрес процедуры, но и ее имя, что значительно упрощает анализ. Пытается декомпилировать Native Code, хотя в большинстве случаев кроме операторов сложения, вычитания и вывода MessageBox'а - ничего декомпилировать не может. Несмотря на это программа довольно удобная и стабильная, потому рекомендую всегда иметь под рукой.

Semi VB Decompiler by vbgamer45

Довольно интересный проект. До недавнего времени распространялся в исходниках на VB, а теперь стал коммерческим. Несмотря на некоторые баги в работе, бесплатная версия может довольно многое. Декомпилируются формы, содержащаяся в них графика и названия процедур. Также определяются используемые в программе API функции. Помимо этого, предоставляется информация из EXE заголовков. Есть даже попытки декомпилировать P-Code. Так что продукт создает довольно приятное впечатление. Огромный респект автору за открытость исходного кода - думаю многим полезно будет в них заглянуть, чтобы понять, как декомпилируется VB код. Честности ради скажу - исходник этот жутко неоптимизированно написан, и порой смотря на некоторые участки кода хочется плакать, хотя этот код и выполняет свои функции. Но повторюсь - это бесплатно, а бесплатное не обсуждается.

VB Decompiler by DotFix Software

Вот мы и дошли до моего декомпилятора Visual Basic. При его создании я пытался внести как можно больше возможностей, при этом не загромождая интерфейс тем, что никогда не пригодится. В итоге имеем декомпилятор форм, с поддержкой ActiveX’ов лежащих на них, декомпилятор P-Code’а (причем если в бесплатной Lite вресии он напоминает p32Dasm’овский, то в коммерческой версии программа восстанавливает более 85% исходного кода, что часто помогает востанновить нужные потерянные куски), декомпилятор Native Code (да да - полное дизассемблирование, а также восстановление до 60% исходных инструкций) и декомпилятор ссылок на API (при этом они записываются уже в объявленном виде со всем списком параметров). Ясное дело, что подсветка синтаксиса тоже есть и она имеет очень высокую скорость обработки текста. Для каждого модуля с кодом свой список встречающихся там строк с возможностью мгновненно перейти на участок кода, где используется выделенная строка. Присутствует также и поиск, помогающий найти нужный код в активном окне. Резульат своей работы программа может сохранить, причем вместе с кодом и формами сохраняются и frx файлы с графикой и корректно прописываются ссылки на эти графические объекты в формах. В общем, если Вам требуется наиболее современное и продвинутое средство для частичной, но максимально возможной декомпиляции Native Code и P-Code - предлагаю рассмотреть приобретение коммерческой лицензии на VB Decompiler Pro. Если же декомпиляция в понятный VB код не нужна, а достаточно дизассемблирования Native Code и P-Code - вполне можете ограничиться бесплатной Lite версией VB Decompiler.

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

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

1. Качаем vendor_utils.zip, распаковываем во временную папку (например, Katawa Shoujo_temp)

2. Туда же копируем интересующие файлы. Например, script-a1-monday-RU.rpyc

3. Запускаем GetText.bat, получаем два файла: script-a1-monday-RU.TXT и script-a1-monday-RU.BIN

4. Глумимся над полученным файлом с расширением TXT (в BIN не лезем. )

5. Запускаем InsertText.bat, получаем новый вариант файла script-a1-monday-RU.rpyc

6. Перемещаем (это важно, если временную папку вы создали вложенной в главную папку игры, иначе игра будет ругаться на дубликаты, т.к. она найдёт ваш забытый во временной папке rpyc-файл и попытается его подключить к проекту) новый script-a1-monday-RU.rpyc обратно.

7. Запускаем игру…

:(

Ссылку на первоисточник, к сожалению, найти не смог

Эта утилита позволяет получить исходники всех скриптов, включая системные, и подойдёт для любого уровня проекта, лишь бы справилась…

1. Качаем lolbot_decompile.zip, распаковываем в папку с игрой (в результате файл decompile.rpy из архива должен оказаться в папке game, например Katawa Shoujogame)

:)

2. Запускаем игру и некоторое время ждём, пока игра не начнётся. Всё, из игры можно выходить. Наигрались

4. После внесения изменений вспоминаем, что движок RenPy сам генерит этот файл rpyc из rpy. Итак, в папку игры копируем уже исправленный файл (например, _Users_delta_Documents_ks svn_Katawa Shoujo Act 1_game_RU_ui_strings-RU.rpy.txt) и приводим его название в нормальный вид (например, ui_strings-RU.rpy)

5. Запускаем игру…

6. После запуска получаем свежесгенерённый rpyc-файл, а rpy-файл можно стирать

Очевидно, что описанные выше операции можно проделывать и над другими файлами, например над script-a1-monday-RU.rpyc.

1. В папке game (например, Sugars Delightgame) переименовываем файлы script.rpyc и (если есть) script.rpy в script.rpyc_ и script.rpy_, соответственно.

2. В папке game (например, Sugars Delightgame) создаём файл script.rpy со следующим содержимым:

3. Запускаем игру, жмём «Начать» и ждём, пока снова не появится меню (т.е. игра не запустится), после чего выходим из игры.

4. В новой папке cted (например, Sugars Delightcted) получаем всё, кроме самих скриптов, т.е. видео, музыку, аудио, шрифты.

5. Удаляем наш script.rpy, переименовываем описанные в п.1 файлы script.rpyc_ и script.rpy_ обратно в script.rpyc и script.rpy.

0. Перво-наперво нам понадобятся исходники скриптов, которые можно получить методом 2.

1. Находим файл, содержащий метку label start:. Меняем расширение оригинальному файлу (например, ui_labels.rpyc переименовываем в ui_labels.rpyc_)

2. Копируем полученный по 2-му методу в эту папку одноимённый файл (например, ui_labels.rpy), в котором удаляем блок, начинающийся с label start:.

3. В папке game (например, Katawa Shoujogame) создаём файл script.rpy со следующим содержимым:

4. Запускаем игру, жмём «Начать» и ждём, пока снова не появится меню (т.е. игра не запустится), после чего выходим из игры.

5. В новой папке cted (например, Katawa Shoujocted) получаем всё, кроме самих скриптов, т.е. видео, музыку, аудио, шрифты.

6. Удаляем изменённые файлы, в которых мы удаляли блок (например, ui_labels.rpy, ui_labels.rpyc), а также и сам script.rpy, меняем расширение файла оригинальным файлам (например, ui_labels.rpyc_ обратно в ui_labels.rpyc).

Как я визуальную новеллу препарировал

Долистаем до конца PNG:

Про начало и конец PNG

Пишем код

Итак, что же конкретно должна делать программа? Вот это:

  1. Считать файл
  2. Разбить его на файлы ресурсов
  3. Записать файлы ресурсов в папку, определенную пользователем
  4. Приделать каждому файлу соответствующее расширение

Разбиваем на части

Начнем, пожалуй, с функции разбиения на файлы:

module ctor where import qualified Data.ByteString.Lazy as B import Data.List.Split ctRes :: B.ByteString -> [B.ByteString] ctRes bs = map B.pack $ splitOn magicSep $ B.unpack bs magicSep = [0x4d, 0x61, 0x64, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x52, 0x65, 0x6e, 0x27, 0x50, 0x79, 0x2e]

Устанавливаем расширение

Остался наш дорогой Main.hs:

Что же здесь? Функция main просто проверяет количество аргументов, и если их два, то делегирует грязную работу (тоже не шибко чистой) функции ctToFolder, в противном случае посылает нас курить мануал читать usage.

Ну вот и все, набираем в терминале заветные команды:

И наслаждаемся ловко стыренным искусно добытым контентом!

Skaz Games Studio и партнеры

Создать проект с интерфейсом GUI. Заменить в папке guibar соответствующие файлы (4 шт. по Вашей ссылке).

Подскажите пожалуйста новичку, вопрос вроде несложный должен быть, но пока нигде не нашёл информацию.

Предположим, у меня есть переменная $ Money.

И как расположить на экране кнопку с картинкой, и чтобы по её нажатию что-нибудь происходило?

Код: Выбрать все

define Money = 100

show screen txt_but

C:Usersварса1DesktopRPA ctor for Windows>rpactor -x .rpa -o mndsn12

Traceback (most recent call last):

zlib.error: Error -3 while decompressing data: incorrect er check

По описанию ошибки не исключено, что используемый вами распаковщик не работает с версией RenPy, в которой собран дистрибутив игры.

1. Попробуйте использовать другой метод распаковки. Первый из предложенных здесь:

2. Если устанавливаете на компьютер дистрибутив игры на RenPy, в пути к дистрибутиву не должно быть кириллических символов, иначе игра будет работать с ошибками. Возможно, для распаковщика это неважно, но я бы не пренебрегал этим правилом.

смог разобрать .rpa в 3 играх(это просто замечательно)

но, в 4 игре разобрал .rpa ,переместил все в папку game, и удалил .rpa, и при запуски игры выскочило вот это(((

не поможете решить эту проблему?

Emas писал(а):смог разобрать .rpa в 3 играх(это просто замечательно)

но, в 4 игре разобрал .rpa ,переместил все в папку game, и удалил .rpa, и при запуски игры выскочило вот это(((

не поможете решить эту проблему?

Ошибка про отсутствие метки start. В файле scripts.rpy должна быть вот такая строка:

Если ее нет, и вы не стирали лишнего, возможно, утилита не сумела полностью распаковать .rpa .

Частенько после де компиляции скрипты сбывают с ошибками. Скорее всего у Вас label start: с отступом и по этому не находится.

Также может быть пропущены init: init python: и прочее. Иногда не распознаётся трансформация и прочее идущая через питон.

Emas писал(а):смог разобрать .rpa в 3 играх(это просто замечательно)

но, в 4 игре разобрал .rpa ,переместил все в папку game, и удалил .rpa, и при запуски игры выскочило вот это(((

не поможете решить эту проблему?

Ошибка про отсутствие метки start. В файле scripts.rpy должна быть вот такая строка:

Если ее нет, и вы не стирали лишнего, возможно, утилита не сумела полностью распаковать .rpa .

а он может иметь другое название или может scripts.ry? потому что именно scripts.rpy нет у меня такого вообще файла

Файл script.py входит в сам движок renpy, его не надо трогать. А метка start может быть в любом файле скрипта игры. Для питона и соответственно renpy деление скрипта на файлы чисто для удобства программиста. Все скрипты могут быть в одном файле или в разных, но загрузятся они все вместе.

Здравствуйте, я уже несколько дней мучаюсь с одной проблемой.

Мне нужно,чтобы персонаж переходил из текущей локации(holl(это название самого изображения)) в локацию слева(klass).

На одном из сайтов нашла урок, но ничего не поняла. Может быть есть какой-то другой способ? Либо может есть пример.

Желательно чтобы код был на питоне

akatsyksan писал(а):Здравствуйте, я уже несколько дней мучаюсь с одной проблемой.

Мне нужно,чтобы персонаж переходил из текущей локации(holl(это название самого изображения)) в локацию слева(klass).

На одном из сайтов нашла урок, но ничего не поняла. Может быть есть какой-то другой способ? Либо может есть пример.

Программы для декомпиляции скриптов Python


Программы для декомпиляции скриптов Python

Python - это один из наиболее популярных современных языков программирования. Его поддерживают в качестве скриптового языка различные программы, на нем написано огромное количество различных модулей, плагинов и тому подобное. Исходные тексты на Python можно компилировать в файлы с расширением .pyc, после компиляции они превращаются в нечитаемые бинарные данные. Это далеко не текстовый файл, поэтому, чтобы внести изменения или изучить алгоритм работы такого скрипта, потребуется привести его к исходному виду, то есть декомпилировать. Как ни странно, при всей популярности языка Python, инструментов для реверсинга .pyc-файлов создано не так уж и много.

Все декомпиляторы для Python, которые я встречал, написаны на нем же самом. С одной стороны, это облегчает понимание их работы, дает возможность доработки. Но с другой стороны, ничего не будет работать "из коробки", для запуска потребуется немало напрячься. Все перечисленные в статье инструменты представляют собой оболочки для автоматизации работы с готовыми декомпиляторами.

Скриншот программы Easy Python Decompiler


Скриншот программы Easy Python Decompiler

Easy Python Decompiler 1.3.2

Скриншот программы PjOrion


Скриншот программы PjOrion

Скриншот программы Py2Exe Binary Editor


Скриншот программы Py2Exe Binary Editor

Py2Exe Binary Editor не совсем относится к декомпиляторам, но используется как вспомогательная утилита для извлечения всех компонентов из исполняемых файлов, созданных при помощи py2exe. С помощью Py2Exe Binary Editor можно легко извлечь Python-скрипт для дальнейшего анализа. Как и сам py2exe, редактор работает только со 2-й версией Python.

Py2Exe Binary Editor 0.1

На этом заканчивается и без того скромный список декомпиляторов для Python. Если у вас есть что-нибудь для этих же задач, то большая просьба поделиться. Особенно интересуют рабочие декомпиляторы для Python 3.x.

Цель: восстановить exe, сгенерированный pyinstaller, в файл .py

1. Извлеките файл .pyc из сгенерированного exe

Здесь есть много способов. , , Можно использоватьpyinstxtractor. , Вы также можете использовать официальный archive_viewer.py (скачать в конце статьи)

Я использую официальный archive_viewer.py здесь. ,

Приведенный здесь пример - это программа (написанная на python), отправленная неким братом. , , Интерфейс выглядит так


(1) Откройте cmd в том же каталоге, что и программа. , Выполнить python archive_viewer.py qiangke.exe (здесь указано название программы)


Здесь доступны четыре команды:

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


x (имя программы) Введите имя файла pyc, который будет создан после возврата каретки

Пока что , Первый шаг завершен. , ,

2. Декомпилировать файлы pyc

Поскольку у каждого файла pyc есть волшебная голова, pyinstaller удалит волшебную часть pyc, когда он генерирует exe, и его необходимо завершить самостоятельно во время декомпиляции. Для python2 необходимо дополнить 8 байтов, следующие 4 байта являются временными метками, а первые 4 байта являются скомпилированными версиями Python. ,

Конечно, здесь есть небольшая хитрость

Первые 4 байта можно получить через файл структуры


Таким образом, предыдущий \ x03 \ xf3 \ x0d \ x0a. , Более поздние временные метки также можно заменить на 00 00 00 00

Затем используйте редактор 010 или winhex, чтобы открыть файл pyc. , Добавьте восемь байтов и сохраните


3. Восстановить py файлы

(1) Вы можете использовать веб-сайт для прямой загрузки и восстановления. ,

(2) Используйте uncompyle. , ,

Decompile:

uncompyle6 -o .pyc имя файла

Описание:

-o может сопровождаться путем к файлу, который представляет местоположение вывода декомпилированного файла, «.» означает вывод в текущую папку

Читайте также: