Jump to content
Korean Random
IzeBerg

Как и чем декомпилировать/компилировать питон?

Recommended Posts

1. Скачиваешь питон 2.7.http://www.python.org/ftp/python/2.7.5/python-2.7.5.msi

2. Устанавливаешь питон в папку скажем C:\Python27

3. Добавляешь папку с питоном в переменную среды Path

attachicon.gif1116.png

attachicon.gif1117.png

4. Скачиваешь uncompyle2 https://github.com/Mysterie/uncompyle2/archive/master.zip

5. Распаковываешь ее в скажем c:\uncompyle2

6. Открываешь командную строку и переходишь в папку с uncompyle2

cd c:\uncompyle2
7. устанавливаем утилиту выполнив в командной строке
python setup.py install
8. если все ок у нас должны появится папки build и в ней папка scripts-2.7 в которой лежит собственно сама утилита файл uncompyle2

9. берем интересующий нас скрипт например cameranode.pyc и кладем его в папку c:\uncompyle2\build\scripts-2.7\

10. открываем командную строку и переходим в ней в папку со скриптом

cd c:\uncompyle2\build\scripts-2.7\
11. переводим скрипт из бинарика в исходный вид:
python uncompyle2 -o cameranode.py cameranode.pyc
Вот собственно и вся декомпиляция слог у меня чугунный но вроде достаточно понятно изложил....

 

 

Теперь немного по поводу компиляции скриптов. В клиенте использована более ранняя версия 2.6 поэтому компилировать будем в нем, ранее установленная версия для этого не подойдет.

1. Скачиваем Python 2.6 http://www.python.org/download/releases/2.6/

2. Устанавливаем его в папку C:\Python26\

3.Выбираем скрипт который мы будем редактировать

attachicon.gif1112.png

4. Убеждаемся что скрипт открылся именно в версии 2.6

attachicon.gif1113.png

5. Вносим необходимые изменения в скрипт и пытаемся выполнить

attachicon.gif1114.png

6. Попадаем в окно интерпретатора, который должен жаловатся на отсутсвие модуля BigWorld других ошибок быть НЕ ДОЛЖНО иначе правим свой скрипт

attachicon.gif1115.png

7. В папке с исходным скриптом который мы редактировали должен появится компилированный скрипт с расширением pyc его можно закидывать в клиент

Что-то как-то все сложно с ручным вводом в командную строку... Не помню где скачал, но у меня ункомпиле2 разбирает/собирает при помощи батников: ункомпиле.бат/декомпиле.бат... Три папки: сорсы- лежат подопытные скрипты, ункомпиле- файлы которые разбираются после запуска ункомпиле.бат, компиле- уже готовые для использования скрипты. Для эксперимента разобрал/собрал скрипт ексель и еще что-то- работает. Если надо скину папку с батниками. Edited by SuperXcool

Share this post


Link to post

Short link
Share on other sites

1. Скачиваешь питон 2.7.http://www.python.org/ftp/python/2.7.5/python-2.7.5.msi

2. Устанавливаешь питон в папку скажем C:\Python27

3. Добавляешь папку с питоном в переменную среды Path

attachicon.gif1116.png

attachicon.gif1117.png

4. Скачиваешь uncompyle2 https://github.com/Mysterie/uncompyle2/archive/master.zip

5. Распаковываешь ее в скажем c:\uncompyle2

6. Открываешь командную строку и переходишь в папку с uncompyle2 



cd c:\uncompyle2

7. устанавливаем утилиту выполнив в командной строке



python setup.py install

8. если все ок у нас должны появится папки build и в ней папка scripts-2.7 в которой лежит собственно сама утилита файл uncompyle2

9. берем интересующий нас скрипт например cameranode.pyc и кладем его в папку c:\uncompyle2\build\scripts-2.7\

10. открываем командную строку и переходим в ней в папку со скриптом



cd c:\uncompyle2\build\scripts-2.7\

11. переводим скрипт из бинарика в исходный вид:



python uncompyle2 -o cameranode.py cameranode.pyc

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

 

 

Теперь немного по поводу компиляции скриптов. В клиенте использована  более ранняя версия 2.6 поэтому компилировать будем в нем, ранее установленная версия для этого не подойдет.

1. Скачиваем Python 2.6 http://www.python.org/download/releases/2.6/

2. Устанавливаем его в папку C:\Python26\

3.Выбираем скрипт который мы будем редактировать

attachicon.gif1112.png

4. Убеждаемся что скрипт открылся именно в версии 2.6

attachicon.gif1113.png

5. Вносим необходимые изменения в скрипт и пытаемся выполнить

attachicon.gif1114.png

6. Попадаем в окно интерпретатора, который должен жаловатся на отсутсвие модуля BigWorld других ошибок быть НЕ ДОЛЖНО иначе правим свой скрипт

attachicon.gif1115.png

7. В папке с исходным скриптом который мы редактировали должен появится компилированный скрипт с расширением pyc его можно закидывать в клиент

 

Под 0.8.11 какой пайтон использовать для компиляции ???

Share this post


Link to post

Short link
Share on other sites

Под 0.8.11 какой пайтон использовать для компиляции ???

2.7.6 с офсайта подойдёт, я им собирал скрипты для 0.8.11 Edited by evil_rrock

Share this post


Link to post

Short link
Share on other sites

Пробывал разными способами и ни в какую дэкомперироватся не хочет .

Может подскажите ?

Edited by o-0-0-0

Share this post


Link to post

Short link
Share on other sites

Пробывал разными способами и ни в какую дэкомперироватся не хочет .

Может подскажите ?

 

Конечно не хочет, он обработан скрамблером Мерца. Вам повезло, там старая версия скрамблера под питон 2.6, распаковал, держите исходник, иначе только на сайтах программистов и за бабки.

if '\n(c) Dellux 2013\n' is not '\n(c) Dellux 2013\n':
	pass
__doc__ = '\n(c) Dellux 2013\n'
import BigWorld
import GUI
import Keys
import weakref
import math
import Math
import CommandMapping
import AvatarInputHandler.control_modes
from Avatar import PlayerAvatar
from gui.Scaleform.Battle import Battle
from gui.Scaleform.Battle import _TimeInterval
from gui.Scaleform.Flash import Flash
from gui import DEPTH_OF_Aim
class CircleDeflection(Flash):
saved_afterCreate = Battle.afterCreate
def new_afterCreate(self):
	if None is not None:
		pass
	saved_afterCreate(self)
	self.__CircleDeflection = CircleDeflection(weakref.proxy(self))
	self.__CircleDeflection.start()

Battle.afterCreate = new_afterCreate
saved_beforeDelete = Battle.beforeDelete
def new_beforeDelete(self):
	if None is not None:
		pass
	saved_beforeDelete(self)
	self.__CircleDeflection.destroy()

Battle.beforeDelete = new_beforeDelete
saved_handleKey = PlayerAvatar.handleKey
def new_handleKey(self, isDown, key, mods):
	if None is not None:
		pass
	cmdMap = CommandMapping.g_instance
	if cmdMap.isFired(CommandMapping.CMD_TOGGLE_GUI, key) and isDown:
		isDown
	else:
		cmdMap.isFired(CommandMapping.CMD_TOGGLE_GUI, key)
	if key == Keys.KEY_0 and isDown:
		isDown
	return saved_handleKey(self, isDown, key, mods)

PlayerAvatar.handleKey = new_handleKey
И чуть не забыл, код может оказаться немного битым, распаковка не идеальная, увы... Edited by StranikS_Scan
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

подскажи пожалуйста как ты это сделал , какой командой , и как это после правки опять запечатать так же тока в 2.7


сам бы почитал но habrahabr упал (((

Share this post


Link to post

Short link
Share on other sites

подскажи пожалуйста как ты это сделал , какой командой , и как это после правки опять запечатать так же тока в 2.7

Вы наверно не поняли, на вашем скрипте установлена защита от декомпиляции. Ни какими штатными средствами или программам её не обойти и не снять. Я распаковку делаю вручную, используется спец. софт и свои самописные скрипты для этого. По сути это взлом.

 

"Запечатать" в 2.7 у вас не выйдет, код надо разбирать и переписывать, он битый, т.е. не все правильно распаковалось. Найдите любого мододела, кто пишет моды на питоне и согласиться вам помочь и попросите проверить и исправить код. Вот тогда можно будет в 2.7 "запечатывать" :))))

Edited by StranikS_Scan
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

 

"Запечатать" в 2.7 у вас не выйдет, код надо разбирать и переписывать, он битый, т.е. не все правильно распаковалось. Найдите любого мододела, кто пишет моды на питоне и согласиться вам помочь и попросите проверить и исправить код. Вот тогда можно будет в 2.7 "запечатывать" :))))

 

Понял спасибо .

Share this post


Link to post

Short link
Share on other sites

распаковка не идеальная

Спасибо и на этом. Иначе скоро мог бы родиться очередной "шыдевр" от мододела-гения лсдмакса... :( Edited by MakcT40

Share this post


Link to post

Short link
Share on other sites

Пробывал разными способами и ни в какую дэкомперироватся не хочет .

Может подскажите ?

 

Передаю привет подпольщику rf-chears с ником marchez.

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

@Dellux, так вот значит как пишется правильно его имя :))))

Скрамблер Marchez-а

 

Спасибо и на этом. Иначе скоро мог бы родиться очередной "шыдевр" от мододела-гения лсдмакса... :(


Ну один-два скрипта - это капля море. Главное чтобы какому-нибудь "гению" не пришло в голову декриптор в паблик бросить. И такое вполне реально.

Edited by StranikS_Scan

Share this post


Link to post

Short link
Share on other sites

мне дал его всем известный макс , но толку от него нет , за это спасибо Dellux , хорошо запечатал . :gawi:

Никто не когда его не взломает .

Edited by o-0-0-0

Share this post


Link to post

Short link
Share on other sites

Пробывал разными способами и ни в какую дэкомперироватся не хочет .

Может подскажите ?

Скинь в личку, попробую поковырять

Share this post


Link to post

Short link
Share on other sites

Никто не когда его не взломает .

 

Ну это вы конечно перебрали. Это всего лишь скраблер, это даже не протектор. Учитывая что это не exe, а самоинспектируемый питон, то тут скрамблеры как мера защиты слабы сами по себе. Для надежной защиты нужны гибридные протекторы

Share this post


Link to post

Short link
Share on other sites

может и так , но у меня толь куски получаются , да и вы тоже не смогли , не так ли .

Share this post


Link to post

Short link
Share on other sites

У меня вопрос к StranikS_Scan - а зачем?


может и так , но у меня толь куски получаются , да и вы тоже не смогли , не так ли .

Он то как раз смог.

Мерц кстати прочитал и искренне похвалил.

Edited by Sherman

Share this post


Link to post

Short link
Share on other sites

У меня вопрос к StranikS_Scan - а зачем?

Он то как раз смог.

Мерц кстати прочитал и искренне похвалил.

 

Зачем, что? Расковыривать? Ну мододелы часто расковыривают моды чтобы изучить. Если просят расковырять старый код, то я иногда расковыриваю, но его не чищу, мододелу и этого достаточно, если он только хотел что-то там глянуть. Новые моды я не расковыриваю.

Share this post


Link to post

Short link
Share on other sites

 

Для надежной защиты нужны гибридные протекторы

Можно поподробнее развить эту тему? Гибридность какого плана?

Share this post


Link to post

Short link
Share on other sites

Можно поподробнее развить эту тему? Гибридность какого плана?

 

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

 

и вот возникает вопрос, как её усилить? Можно продолжить накручивать код внутри pyc-контейнера, что Мерц и сделал в своей защите 3-поколения, использовал случайную последовательность, которая создает сложно-петлевую связь и тем самым затрудняет поиск мусорного кода (только лишь на первый взгляд :)))).... но это всего лишь усиливает защиту количественно, но ни как не качественно!

 

Можно поступить иначе... вынести часть алгоритма из питона вообще и поместить его например в exe. Назовем его активным модулем защиты. Такой активный модуль (его нужно написать компактным, например можно на ассме) следует помещать в pyc-контейнер вместе с защищаемым кодом и извлекать его и запускать при выполнении pyc-контейнера движком игры. В свою очередь активный модуль будет выполнять нужные операции с защищаемым питон-кодом, загруженным в память процесса игры. Таким образом, чтобы выполнять реверс кода надо реверсировать не только pyc-контейнер, но и дезассемблировать его активный модуль, чтобы понять какие операции он выполняет в памяти игры. Такой процесс взлома усложняется многократно и практически не реально будет найти человека кто за бесплатно будет ковырять такой мод. 

 

Понятно что итоговая защита должна совмещать в себе защищенный (то бишь скрамблированный pyc-контейнер) и активный модуль в нем, в результате мы получаем гибридный протектор. Взломать его реверсом весьма тяжелый труд, следовательно единственным актуальный способом его взлома, как в прочем и любого другого pyc-мода будет дамп памяти игры, из которого можно извлечь рабочий код мода. Ясно, что сделать это могут только юзверы имеющие соот. квалификацию. Но вот тут мы подходим к еще одному положительному аспекту гибридной защиты. В отличие от обычной защиты на питоне, активный модуль имеет гораздо больше возможностей по самозащите мода. Так как он является exe. В него можно поместить различные алгоритмы самозащиты, которые максимально препятствовали бы взлому и тому же получению дампа памяти игры с расшифрованным скриптом мода.

 

Вот вся концепция в двух абзацах. Я кое-какие моменты из этой технологии уже опробовал на Интрудере, сейчас работаю над таким гибридным протектором. Проект называется Орион. Я не стал писать в личку, так как в конечном итоге технология все равно станет известной. Мы же с вами знаем, что стойкость технологии не в её секретности, а в трудоемкости и сложности её преодоления. Не взламываются только те защиты, взлом которых не оправдывает ни средств ни денег ни времени, которые надо потратить на это :))))))

 

ЗЫ: Забыл спросить, Мерц реальный персонаж или "как всегда"?

ЗЫЗЫ: Да и еще вопрос, чем обязан такому вниманию, вроде тема давно висит и вроде не первый раз я в ней по просьбам трудящихся старые скрипты дешифрую, а тут раз и столько товарищей зараз тему посетило? Какие-то траблы что ли были с o-0-0-0 или какая подоплека была?

Edited by StranikS_Scan
  • Upvote 1

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...