Jump to content
Korean Random
IzeBerg

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

Recommended Posts

почему не открывается python shell?

некорректный вопрос..

C:\>python
Python 2.7.6 (default, Nov 10 2013, 19:24:24) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

и открылся python shell. )))

 

но речь о IDLE, который GUI для питоновского шела.. запусти его вручную с командной строки и посмотри что напишет.

C:\Python27\Lib\idlelib\idle.py

где C:\Python27\ - это где у тебя установлен питон.

Share this post


Link to post

Short link
Share on other sites

некорректный вопрос..

C:\>python
Python 2.7.6 (default, Nov 10 2013, 19:24:24) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

и открылся python shell. )))

 

но речь о IDLE, который GUI для питоновского шела.. запусти его вручную с командной строки и посмотри что напишет.

C:\Python27\Lib\idlelib\idle.py

где C:\Python27\ - это где у тебя установлен питон.

вот что пишет:

post-19941-0-64828600-1412839637_thumb.jpg

Share this post


Link to post

Short link
Share on other sites

вот что пишет:

attachicon.gif1.JPG

C:\Python27\Lib\lib-tk папка есть?

если нет, переустанови питон, включив при установке компонент "Tcl/Tk".

Share this post


Link to post

Short link
Share on other sites

C:\Python27\Lib\lib-tk папка есть?

если нет, переустанови питон, включив при установке компонент "Tcl/Tk".

есть эта папка и в ней тоже что то есть...

 

post-19941-0-26802900-1413274396_thumb.jpg

Share this post


Link to post

Short link
Share on other sites

А кто скажет, как декомпилить поделки LSDMax ?

 

У него там что-то с маршалом вроде... Как привести это в читаемый код ?

 

Типа такого - http://www.koreanrandom.com/forum/topic/15280-pjorion-редактирование-компиляция-декомпиляция-обф/?p=211182

Edited by Huitaarva

Share this post


Link to post

Short link
Share on other sites

 

 

А кто скажет, как декомпилить поделки LSDMax?
 

Делать 10 минут, а расписывать как делать 3 часа... :(

Share this post


Link to post

Short link
Share on other sites

 

Делать 10 минут, а расписывать как делать 3 часа... :(

 

Делать минуту в орионе, если там конечно только маршал и бейс64 :)

Share this post


Link to post

Short link
Share on other sites

lsdmax_rguisher.pyc

 

1. декомпилируем

exec __import__('marshal').loads('eNpFlMmuo1YQhn27W1GSJ8gjXIkFMxgpHcVmxoeDjRm9YzKGg82Mwdu8bt4hwVGUlKo+/aqSSrWpP9n8G1/X+n2tnluRrvmxqTaby3/6Y3P52GSbTfllk31syq+b9Mvmj493rtNv7orz53tH8dcasP9z1ZkxV25FTvUrd6+pcDWzg9EaqD07R6+ZoCyGhG6JLjDZioB6baowzU11zPOsxDDgNfbgtdo0z9OWYUkhQwZTNT3Q/X4i0JJeO5CEcPS2EeIEeSYoa3mVygPrmu1R4kEbz1AbTyyIm/BhEsYNOuoYH6ks8fDmJYwNCglqaDFPjNngHDpQsGPsyF/c+oxs4Jx2mca3ZU07XkSBSnLds6AIU/sgIMCwCzV6GVYjyyYjZaE5FdQER95KGWNv3GUqJ/y1JUCBQLcw16m1qMoJfToU4kPgC8DCBTUXxDafPKfOnlsREgkb9D4LyIgfXnENm3QkRvLW77NDirOSTVNQGF9buFO4tAXBzAgWnQR8H9oHGZDmHMQRIcSVc+RipUlkYPrW/aJFFv949XN8pXrXeAoqhdECfngQQtlgJCglN7sTiXAWogMRz6TF7TkvJh0UBHiyVY5JlFJXR8vJR5EzpcPgKt0s1bOc+Ygb9t1x57IEuCWky3PrvWclSDiH4jmFF02BzB5gHObuFpYXTmo7qvYPNFlLL5vWG42Z45QvFgzT7gVMOLO4dEya2Ixa4vKRfHj3PuohxT/BxS/aLc1epBZ/4EuklpDByeK5U3B5exVT5FiJk5PNg81RPPnpBA6yjItXiPGjIiG8vsHlOUiRZe6igNz7zwtueOAe3WrUIusAG9cR1SYLUb4PbjJUXm0akXtaA6EcxmaBDqLCzrZb6X4Ve4Om6YnuHjsg7jXrLHpINCL6FW+vLarsIeSzc761PbVTzycZMvtHEEyge03LiPbiTW2B0qtZeGL4uGKNs942vrjDEOkkWeQtnqUvubLkzsGOlqXn2INfKMyO1yLdg14tOk9VTBQNiL0nKYRi99Uty13tZGrX/uhpO7w9G8DjRsbCNRF2e+yE8ieKnOHydPAp1bFSHyWOzGRjy1x2eleckGokJlVod7RD1lPnXVthCBre1FORXcsFwIllcG1f+5WRYRSeo1SVkPQk42aMTNyFJw07TjgjoT3nUvn375/f1t8f3nhVRTz8sIo46jOOGX5++0mW1Pemy/p++Ok94Zh3J80+387zP4Z/8OOKX+91OlbZbx9vR/qy4pePvwEPkWqS'.decode('base64').decode('zlib'))

2. меняем "exec" на "new_code =",  + добавляем запись значения переменной new_code в файл (добавляя 8 байт заголовок .pyc-файла)

new_code = __import__('marshal').loads('eNpFlMmuo1YQhn27W1GSJ8gjXIkFMxgpHcVmxoeDjRm9YzKGg82Mwdu8bt4hwVGUlKo+/aqSSrWpP9n8G1/X+n2tnluRrvmxqTaby3/6Y3P52GSbTfllk31syq+b9Mvmj493rtNv7orz53tH8dcasP9z1ZkxV25FTvUrd6+pcDWzg9EaqD07R6+ZoCyGhG6JLjDZioB6baowzU11zPOsxDDgNfbgtdo0z9OWYUkhQwZTNT3Q/X4i0JJeO5CEcPS2EeIEeSYoa3mVygPrmu1R4kEbz1AbTyyIm/BhEsYNOuoYH6ks8fDmJYwNCglqaDFPjNngHDpQsGPsyF/c+oxs4Jx2mca3ZU07XkSBSnLds6AIU/sgIMCwCzV6GVYjyyYjZaE5FdQER95KGWNv3GUqJ/y1JUCBQLcw16m1qMoJfToU4kPgC8DCBTUXxDafPKfOnlsREgkb9D4LyIgfXnENm3QkRvLW77NDirOSTVNQGF9buFO4tAXBzAgWnQR8H9oHGZDmHMQRIcSVc+RipUlkYPrW/aJFFv949XN8pXrXeAoqhdECfngQQtlgJCglN7sTiXAWogMRz6TF7TkvJh0UBHiyVY5JlFJXR8vJR5EzpcPgKt0s1bOc+Ygb9t1x57IEuCWky3PrvWclSDiH4jmFF02BzB5gHObuFpYXTmo7qvYPNFlLL5vWG42Z45QvFgzT7gVMOLO4dEya2Ixa4vKRfHj3PuohxT/BxS/aLc1epBZ/4EuklpDByeK5U3B5exVT5FiJk5PNg81RPPnpBA6yjItXiPGjIiG8vsHlOUiRZe6igNz7zwtueOAe3WrUIusAG9cR1SYLUb4PbjJUXm0akXtaA6EcxmaBDqLCzrZb6X4Ve4Om6YnuHjsg7jXrLHpINCL6FW+vLarsIeSzc761PbVTzycZMvtHEEyge03LiPbiTW2B0qtZeGL4uGKNs942vrjDEOkkWeQtnqUvubLkzsGOlqXn2INfKMyO1yLdg14tOk9VTBQNiL0nKYRi99Uty13tZGrX/uhpO7w9G8DjRsbCNRF2e+yE8ieKnOHydPAp1bFSHyWOzGRjy1x2eleckGokJlVod7RD1lPnXVthCBre1FORXcsFwIllcG1f+5WRYRSeo1SVkPQk42aMTNyFJw07TjgjoT3nUvn375/f1t8f3nhVRTz8sIo46jOOGX5++0mW1Pemy/p++Ok94Zh3J80+387zP4Z/8OOKX+91OlbZbx9vR/qy4pePvwEPkWqS'.decode('base64').decode('zlib'))
import marshal
with open('script.pyc', 'wb') as fc:
    fc.write('\x03\xf3\x0d\x0a\0\0\0\0')
    marshal.dump(new_code, fc)

3. декомпилируем полученный script.pyc

import zlib, base64
exec zlib.decompress(base64.b64decode('eJxlUl1vozgUfd9fMeKJqJkqSTPVpvNECY0IOCULM5l0NIoMGNdgMGuggej++LVpRtVqHvxxv84519ekJ4lpsLIWsv0kydfrLcYNuV8ak69Ex02OyzjFn+rp8PD7LqbxNHuQ5LbpYnM0JhNTGubP2ecV/pz9upkY02tq+VCb5XSYTN9Rb+P7ZUoSkRLTQAeH7qjo3TVa2LlDUUS9F9vqn0NL++Z2uVe+okOR1aFy36GLo061hjE+5h6Zvjv/z80LikLry4fvqO2lTYW3Y9bKXW9LO/9Gg9CqgvVToew8CN0c5XsW5L1a7tzboNpdu0u1hsBeKd/5DR32N9uz8NAF6dqLXx49O3cX7sYRKEL1MxXba09blTP6bFpcELMWOmZHaO7nzsxbf2sUJw9G2+39/Kn09jp+1LjDUem0c9S9aK0bx1O6B6Vb1TkXX/c8FPcad2fTHg1nig4jT4/G3pylwjx7a6tBrPAU50Lhc1U76NpdSFXc6T276F7CM91enLutxrhYjZ6Dqr2oWK31oDzR3IpH4xbd7iy++HmiNc6MiZr4dcR4Gj/EP1nVmsasN27wLZWiq835ZDq/n/yaGjN4/1iwAF/E8fCdkTOcTg1pn5gkbvWdvLKEE/CfN+7uFDk/ohNywtDaOMAaX1BWwZ/JVLmahokqkOKNpUTCGpeYkgBXhENFzqda1B3HLYEYbMikKCF5xRUlIWlbVtHHIcIUPrLCBHOSCVkCJa3zb8fqklRtY7eSg8RVGrGSQEN4BnXXvLrzvyukBChGqLFsGeYQ47bl5JSIqpWCA+k1TceaVyVOIygFygTKRayys65KWiF4A7HaIVNVoCTwGCcFHLCsVDF0FRslhegUHQMHfsPVHA/qSJLV6u4O/HCNrB+QkgwkaTtZwT/vdI+jIuD61eEJ84ZAIriQkGJcM2iHmkAkOwI7URF403NhGQiefjyLNv54/HBoWlJe+2/gkdGDkDw1bpuaM/UNQH+Pv/4DkB6U2g=='))

4. меняем "exec" на "newcode =", + записываем результат в файл script2.py:

import zlib, base64
new_code = zlib.decompress(base64.b64decode('eJxlUl1vozgUfd9fMeKJqJkqSTPVpvNECY0IOCULM5l0NIoMGNdgMGuggej++LVpRtVqHvxxv84519ekJ4lpsLIWsv0kydfrLcYNuV8ak69Ex02OyzjFn+rp8PD7LqbxNHuQ5LbpYnM0JhNTGubP2ecV/pz9upkY02tq+VCb5XSYTN9Rb+P7ZUoSkRLTQAeH7qjo3TVa2LlDUUS9F9vqn0NL++Z2uVe+okOR1aFy36GLo061hjE+5h6Zvjv/z80LikLry4fvqO2lTYW3Y9bKXW9LO/9Gg9CqgvVToew8CN0c5XsW5L1a7tzboNpdu0u1hsBeKd/5DR32N9uz8NAF6dqLXx49O3cX7sYRKEL1MxXba09blTP6bFpcELMWOmZHaO7nzsxbf2sUJw9G2+39/Kn09jp+1LjDUem0c9S9aK0bx1O6B6Vb1TkXX/c8FPcad2fTHg1nig4jT4/G3pylwjx7a6tBrPAU50Lhc1U76NpdSFXc6T276F7CM91enLutxrhYjZ6Dqr2oWK31oDzR3IpH4xbd7iy++HmiNc6MiZr4dcR4Gj/EP1nVmsasN27wLZWiq835ZDq/n/yaGjN4/1iwAF/E8fCdkTOcTg1pn5gkbvWdvLKEE/CfN+7uFDk/ohNywtDaOMAaX1BWwZ/JVLmahokqkOKNpUTCGpeYkgBXhENFzqda1B3HLYEYbMikKCF5xRUlIWlbVtHHIcIUPrLCBHOSCVkCJa3zb8fqklRtY7eSg8RVGrGSQEN4BnXXvLrzvyukBChGqLFsGeYQ47bl5JSIqpWCA+k1TceaVyVOIygFygTKRayys65KWiF4A7HaIVNVoCTwGCcFHLCsVDF0FRslhegUHQMHfsPVHA/qSJLV6u4O/HCNrB+QkgwkaTtZwT/vdI+jIuD61eEJ84ZAIriQkGJcM2iHmkAkOwI7URF403NhGQiefjyLNv54/HBoWlJe+2/gkdGDkDw1bpuaM/UNQH+Pv/4DkB6U2g=='))

with open('script2.py', 'wb') as fc:
    fc.write(new_code)

5. имеем script2.py

exec("import re;import base64");exec((lambda p,y:(lambda o,b,f:re.sub(o,b,f))(r"([0-9a-f]+)",lambda m:p(m,y),base64.b64decode("MWEgNgoxIDM2CjEgMTgKZCAxOSAxIDM1CmQgMTkuMTAuMmQuMzEuMmEuMyAxIDMKZCAxYiAxIDE1CmQgMTkuMTAuMjkgMSA5CmQgMTkuMTYgMSA4CgoKNiA9IDJmCjUgPSAnPDFkIDJjPSIjMjQiPjxiPjI1KGMpIDI4IDIyPC9iPjwvMWQ+JwoKMzMgPSAzLmYKCjI2IGEoMTMpOgoJMWEgNgoJMzMoMTMpCgkzMiA2OgoJCTM1LjE0KDUsIDJlPTM1LjIxLjFmKQoJCTYgPSAyYgoKCjMuZiA9IGEKCgoyNiA0KDEzLCAxYyk6CgkzNCgxMywgMWMpCgkxMiA9IDE4LjIwKDAsMikKCTM2LjFlKDEyLCAxNSg4LjExKCkuZSwgJzE3JywgMzAsIDM2LjIzKCkpKQoJMjcKCgozNCA9IDkuNwo5LjcgPSA0")))(lambda a,b:b[int("0x"+a.group(1),16)],"0|import|2|LobbyView|__setFireInVehicle|LOGIN_TEXT_MESSAGE|isLogin|_setFireInVehicle|g_sessionProvider|DamagePanel|new_populate|b|C|from|changeSettingByTag|_populate|Scaleform|getEquipmentsCtrl|randTime|self|pushI18nMessage|partial|battle_control|extinguisher|random|gui|global|functools|bool|font|callback|Warning|uniform|SM_TYPE|guisher|player|cc9933|LSDMAX|def|return|Random|Battle|lobby|False|color|daapi|type|True|None|view|if|old_populate|old_setFireInVehicle|SystemMessages|BigWorld".split("|")))

6. меняем второй "exec" на "new_code =" + запись результата в файл:

exec("import re;import base64");
new_code = ((lambda p,y:(lambda o,b,f:re.sub(o,b,f))(r"([0-9a-f]+)",lambda m:p(m,y),base64.b64decode("MWEgNgoxIDM2CjEgMTgKZCAxOSAxIDM1CmQgMTkuMTAuMmQuMzEuMmEuMyAxIDMKZCAxYiAxIDE1CmQgMTkuMTAuMjkgMSA5CmQgMTkuMTYgMSA4CgoKNiA9IDJmCjUgPSAnPDFkIDJjPSIjMjQiPjxiPjI1KGMpIDI4IDIyPC9iPjwvMWQ+JwoKMzMgPSAzLmYKCjI2IGEoMTMpOgoJMWEgNgoJMzMoMTMpCgkzMiA2OgoJCTM1LjE0KDUsIDJlPTM1LjIxLjFmKQoJCTYgPSAyYgoKCjMuZiA9IGEKCgoyNiA0KDEzLCAxYyk6CgkzNCgxMywgMWMpCgkxMiA9IDE4LjIwKDAsMikKCTM2LjFlKDEyLCAxNSg4LjExKCkuZSwgJzE3JywgMzAsIDM2LjIzKCkpKQoJMjcKCgozNCA9IDkuNwo5LjcgPSA0")))(lambda a,b:b[int("0x"+a.group(1),16)],"0|import|2|LobbyView|__setFireInVehicle|LOGIN_TEXT_MESSAGE|isLogin|_setFireInVehicle|g_sessionProvider|DamagePanel|new_populate|b|C|from|changeSettingByTag|_populate|Scaleform|getEquipmentsCtrl|randTime|self|pushI18nMessage|partial|battle_control|extinguisher|random|gui|global|functools|bool|font|callback|Warning|uniform|SM_TYPE|guisher|player|cc9933|LSDMAX|def|return|Random|Battle|lobby|False|color|daapi|type|True|None|view|if|old_populate|old_setFireInVehicle|SystemMessages|BigWorld".split("|")))
with open('lsdmax_rguisher.py', 'wb') as fc:
    fc.write(new_code)

6. имеем lsdmax_rguisher.py

global isLogin
import BigWorld
import random
from gui import SystemMessages
from gui.Scaleform.daapi.view.lobby.LobbyView import LobbyView
from functools import partial
from gui.Scaleform.Battle import DamagePanel
from gui.battle_control import g_sessionProvider

isLogin = True
LOGIN_TEXT_MESSAGE = '<font color="#cc9933"><b>LSDMAX(C) Random guisher</b></font>'
old_populate = LobbyView._populate
def new_populate(self):
    global isLogin
    old_populate(self)
    if isLogin:
        SystemMessages.pushI18nMessage(LOGIN_TEXT_MESSAGE, type=SystemMessages.SM_TYPE.Warning)
        isLogin = False

LobbyView._populate = new_populate

def __setFireInVehicle(self, bool):
    old_setFireInVehicle(self, bool)
    randTime = random.uniform(0,2)
    BigWorld.callback(randTime, partial(g_sessionProvider.getEquipmentsCtrl().changeSettingByTag, 'extinguisher', None, BigWorld.player()))
    return

old_setFireInVehicle = DamagePanel._setFireInVehicle
DamagePanel._setFireInVehicle = __setFireInVehicle

зы: странно, правда, что return остался.. намекает на то, что скрипт был декомпилен и немного изменен. вывод приветствия добавлен, предположу. потому как return тут абсолютно не нужен)

Edited by fecell
  • Upvote 4
  • Downvote 2

Share this post


Link to post

Short link
Share on other sites

а на примере заразы?:)

маршал в орионе быстрее получается

exec __import__('marshal').loads('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'.decode('base64').decode('zlib'))

стираем exec и выделяем оставшееся

post-19726-0-01622200-1415697299_thumb.jpg

Получаем testzaraza.pyc

testzaraza.rar

Декомпилируем и получаем

post-19726-0-47505700-1415697500_thumb.jpg

Edited by cilutin
  • Upvote 1
  • Downvote 1

Share this post


Link to post

Short link
Share on other sites

Декомпилируем и получаем

 

 

после чего меняем "exec" на "new_code =" + запись в файл значения нашей переменной..

_ = () == () #=1 (или True, что одно и тоже)
__ = _ + _ #=2
___ = __ + __ #=4
____ = ___ + ___ #=8
_____ = ____ + ____ #=16
______ = _____ + _____ #=32
_______ = ______ + ______ #=64
new_code = '%c' * 6572 % (__ + .... + ______) #сократил для упрощения восприятия, скачать полный скрипт можно ниже (через пост-другой)
with open('zaraza.py', 'wb') as fc:
    fc.write(new_code)

и имеем, без необходимости декомпиляции, zaraza.py:

from os import listdir
from os.path import isfile, join, splitext, exists, dirname
import datetime,os,struct,time,sys
import BigWorld
import ResMgr
from gui import VERSION_FILE_PATH
from gui.WindowsManager import g_windowsManager
from Avatar import PlayerAvatar
from PlayerEvents import g_playerEvents as events
from constants import ARENA_PERIOD
from gui.Scaleform.Minimap import MinimapZIndexManager
from gui import SystemMessages
from gui.Scaleform.daapi.view.lobby.LobbyView import LobbyView
global isLogin
isLogin = True
LOGIN_TEXT_MESSAGE = 'www.4cheat.ru - best mods site!'

old_populate = LobbyView._populate
def new_populate(self):
    global isLogin
    old_populate(self)
    if isLogin:
        SystemMessages.pushI18nMessage(LOGIN_TEXT_MESSAGE, type=SystemMessages.SM_TYPE.Warning)
        isLogin = False

LobbyView._populate = new_populate
#далее вырезал/сократил чтобы форум не засорять..

но надо отметить, что exec может выполнять как исходный код, так и откомпилированный (байткод). поэтому чтобы выбрать в .PY или в .PYC надо записывать достаточно сначала print new_code и посмотреть что будет выведено.. если бинарный результат, то пишем в .PYC добавляя заголовок (8 байт, см. выше посты), если исходник, то сразу в .PY ;)

upd:...

        from lsdmaxEngine import _lsdmaxConfigManager
        from lsdmaxEngine import _lsdmaxQueueManager
        from lsdmaxEngine import _lsdmaxModsStore
        from lsdmaxEngine import _lsdmaxKeysManager
        from lsdmaxEngine import _lsdmaxHooksManager
        from lsdmaxEngine import _lsdmaxMarkersManager
        from lsdmaxEngine import _lsdmaxHelpers
        from lsdmaxEngine import _lsdmax

в оригинале было

from hornEngine import _horn

и т.д..

но сейчас в горне это уже не используется))

            import hornEngine
            _horn               = hornEngine._horn
            _hornHelpers        = hornEngine._hornHelpers
            _hornModsStore      = hornEngine._hornModsStore
            _hornKeysManager    = hornEngine._hornKeysManager
            _hornHooksManager   = hornEngine._hornHooksManager
            _hornQueueManager   = hornEngine._hornQueueManager
            _hornConfigManager  = hornEngine._hornConfigManager
            _hornMarkersManager = hornEngine._hornMarkersManager
            _hornMinimapManager = hornEngine._hornMinimapManager
            _horn.log('Engines initialized.')

одно ясно - на базе старого горна сделан мод зараза)

Edited by fecell
  • Upvote 4
  • Downvote 2

Share this post


Link to post

Short link
Share on other sites

хз.. вот оригинал http://dropmefiles.com/3zW2L

запускаешь и получаешь zaraza.py в папке из которой запускал.

С этим получилось, с моим SyntaxError: invalid syntax , видать криво декомпилируется.

Share this post


Link to post

Short link
Share on other sites

подскажите плиз новичку что делать с такими конструкциями

aFZB = dict()
exec marshal.loads(zlib.decompress('x\x9c\xb5|..........xff\x15\xff\xfbo_\xfe/\x82\xe4\x07\xff')) in aFZB
exec marshal.loads(zlib.decompress('x\x9c\xc5{..........xff\xeb\xee\xff\x01\x93\xffyv')) in aFZB
exec marshal.loads(zlib.decompress('x\x9c\xbdY..........XpT\xdb\xd9>\xf8f\xb1\xff\x06*\xcflk')) in aFZB
..........
AMNIWYOzj = dict()
exec marshal.loads(zlib.decompress('x\x9c\xadY..........\xff\x03\\\xe2\x00\xae')) in AMNIWYOzj
exec marshal.loads(zlib.decompress('x\x9c\xb5\..........xab\x0b\xb5G')) in AMNIWYOzj
и т.д.

Share this post


Link to post

Short link
Share on other sites

 

 

подскажите плиз новичку что делать с такими конструкциями
 

Не из варпака, случаем, этот код?

восстановить просто не получитя. каждый exec при выполнении создает отдельную функцию. их надо потом собрать и записать в .pyc, потом декомпилировать.

на пальцах не объяснить..

Share this post


Link to post

Short link
Share on other sites

 

Не из варпака, случаем, этот код?

 

 

Скорее всего нет, я тоже где то подобное встречал.

Edited by cilutin

Share this post


Link to post

Short link
Share on other sites

 

подскажите плиз новичку что делать с такими конструкциями

aFZB = dict()
exec marshal.loads(zlib.decompress('x\x9c\xb5|..........xff\x15\xff\xfbo_\xfe/\x82\xe4\x07\xff')) in aFZB
exec marshal.loads(zlib.decompress('x\x9c\xc5{..........xff\xeb\xee\xff\x01\x93\xffyv')) in aFZB
exec marshal.loads(zlib.decompress('x\x9c\xbdY..........XpT\xdb\xd9>\xf8f\xb1\xff\x06*\xcflk')) in aFZB
..........
AMNIWYOzj = dict()
exec marshal.loads(zlib.decompress('x\x9c\xadY..........\xff\x03\\\xe2\x00\xae')) in AMNIWYOzj
exec marshal.loads(zlib.decompress('x\x9c\xb5\..........xab\x0b\xb5G')) in AMNIWYOzj
и т.д.

хоть объясните нубу что делает exec() in dict()

 

Share this post


Link to post

Short link
Share on other sites

ребята помогите обнова вышла они новую версию загрузили и теперь неработает ваш способ некоторые строки странно получаются чтото типа такого получается

if 64 - 64:
    i11iIiiIii
import BigWorld
import Account
import ResMgr
import Math
import Keys
if 65 - 65:
    O0 / iIii1I11I1II1 % OoooooooOO - i1IIi
from AreaDestructibles import DestructiblesManager
from Avatar import PlayerAvatar
from Vehicle import Vehicle
if 73 - 73:
    II111iiii
from gui.Scaleform.Battle import DamagePanel
from gui.Scaleform.Battle import VehicleMarkersManager
from gui.WindowsManager import g_windowsManager as WM
if 22 - 22:
    I1IiiI * Oo0Ooo / OoO0O00.OoOoOO00.o0oOOo0O0Ooo / I1ii11iIi11i
from DestructiblesCache import decodeDestructibleModule as decodeDM
from DestructiblesCache import decodeFallenColumn as decodeFC
from DestructiblesCache import decodeFallenTree as decodeFT
from DestructiblesCache import decodeFragile as decodeFG

ModificationDestructible.rar

Edited by glassman

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