Jump to content
Korean Random
IzeBerg

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

Recommended Posts

Неверно. Питон - интерпретируемый язык, поэтому если даже дальше в коде есть ошибки, все равно это не отобразится.

а вы сами то пробывали? =)

post-16733-0-06300200-1381816393_thumb.png

 

 

Подскажите, не пойму как установить pycdc?
 

Устанавливаете Visual Studio 2008 открываете в ней проект и выполняете его построение

Edited by jeroohn
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

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

Edited by Axon555
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

 

 

Пробовал, простейшие синтаксические да, а где проблема с классом или функцией или что-то не объявлено, то фиг.
 

да я собственно и имел в виду синтаксические... остальные да не ловит ибо не положено ему этого делать =).

 

 

 

а чтоб люди не сильно полагались на сообщения питона, а сами проверяли свой код :)

золотые слова.

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Ребят, все (известные мне прицелы) которые используют MS.pyc в тесте 0.8.9 не работают... кто знает, что в них нужно подправить, чтобы зависания не происходили при загрузке боя?

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

 

'Код 1'

'\n(c) Dellux 2013\n'
import BigWorld
import GUI
import BattleReplay
from AvatarInputHandler.aims import Aim
from gui.IngameSoundNotifications import ComplexSoundNotifications
import gui.Scaleform.Flash
import thread
saved_setTarget = Aim.setTarget
saved_setAimingEnded = ComplexSoundNotifications.setAimingEnded

def heightSight():
class MultiController():
__module__ = __name__

def control(self):
import time
import AvatarInputHandler.control_modes
time.sleep(10.0)
while True:
try:
gui.Scaleform.Flash.GUI.roots()[1].movie.invoke(('call',
['Aim.heightSight',
int(round((BigWorld.camera().position.y - AvatarInputHandler.control_modes.getFocalPoint()[1])))]))
except:
pass
time.sleep(0.050000000000000003)




mca1 = MultiController()
mca1.control()


thread.start_new_thread(heightSight, ())

def new_setTarget(self, target):
typeDescr = target.typeDescriptor
speed = [typeDescr.physics['speedLimits'][0],
typeDescr.physics['speedLimits'][1]]
hullArmor = [typeDescr.hull['primaryArmor'][0],
typeDescr.hull['primaryArmor'][1],
typeDescr.hull['primaryArmor'][2]]
turretArmor = [typeDescr.turret['primaryArmor'][0],
typeDescr.turret['primaryArmor'][1],
typeDescr.turret['primaryArmor'][2]]
gunName = typeDescr.gun['shortUserString']
gunReload = typeDescr.gun['reloadTime']
visionRadius = typeDescr.turret['circularVisionRadius']
iconName = typeDescr.name.replace(':', '-')
shellDamage = [0,
0,
0]
i = 0
for element in target.typeDescriptor.gun['shots']:
shellDamage[i] = element['shell']['damage'][0]
i = (i + 1)

shellPower = [0,
0,
0]
j = 0
for element in target.typeDescriptor.gun['shots']:
shellPower[j] = element['piercingPower'][0]
j = (j + 1)

shellType = ['',
'',
'']
k = 0
for element in target.typeDescriptor.gun['shots']:
if (element['shell']['kind'] == 'ARMOR_PIERCING'):
shellType[k] = element['shell']['kind'].replace('ARMOR_PIERCING', 'AP')
elif (element['shell']['kind'] == 'HIGH_EXPLOSIVE'):
shellType[k] = element['shell']['kind'].replace('HIGH_EXPLOSIVE', 'HE')
elif (element['shell']['kind'] == 'ARMOR_PIERCING_CR'):
shellType[k] = element['shell']['kind'].replace('ARMOR_PIERCING_CR', 'CR')
else:
shellType[k] = element['shell']['kind'].replace('HOLLOW_CHARGE', 'HC')
k = (k + 1)

saved_setTarget(self, target)
self._flashCall('infoPanel', [speed[0],
speed[1],
gunName,
gunReload,
visionRadius,
iconName,
hullArmor[0],
hullArmor[1],
hullArmor[2],
turretArmor[0],
turretArmor[1],
turretArmor[2],
shellDamage[0],
shellDamage[1],
shellDamage[2],
shellPower[0],
shellPower[1],
shellPower[2],
shellType[0],
shellType[1],
shellType[2]])



def new_setReloading(self, duration, startTime = None, isReloading = True, correction = None):
replayCtrl = BattleReplay.g_replayCtrl
if (replayCtrl.isPlaying and replayCtrl.replayContainsGunReloads):
replayCtrl.setGunReloadTime(startTime, duration)
if (replayCtrl.isRecording and replayCtrl.setGunReloadTime(startTime, duration)):
pass
if (correction is not ):
params = self._getCorrectionReloadingParams(correction)
if ((params is not ) and self._flashCall('setReloading', params)):
pass
else:
self._flashCall('setReloading', [duration,
startTime,
isReloading,
])
shotDescr = BigWorld.player().vehicleTypeDescriptor.shot
gunDescr = BigWorld.player().vehicleTypeDescriptor.gun
vehicleName = BigWorld.player().vehicleTypeDescriptor.type.userString
try:
shellSplash = shotDescr['shell']['explosionRadius']
except:
shellSplash = 0
if (shotDescr['shell']['kind'] == 'ARMOR_PIERCING'):
shellType = shotDescr['shell']['kind'].replace('ARMOR_PIERCING', 'AP')
elif (shotDescr['shell']['kind'] == 'HIGH_EXPLOSIVE'):
shellType = shotDescr['shell']['kind'].replace('HIGH_EXPLOSIVE', 'HE')
elif (shotDescr['shell']['kind'] == 'ARMOR_PIERCING_CR'):
shellType = shotDescr['shell']['kind'].replace('ARMOR_PIERCING_CR', 'CR')
else:
shellType = shotDescr['shell']['kind'].replace('HOLLOW_CHARGE', 'HC')
self._flashCall('vehicleParams', [gunDescr['shortUserString'],
shotDescr['speed'],
shotDescr['gravity'],
shotDescr['shell']['userString'],
shellSplash,
vehicleName,
shellType])



def new_setHealth(self, cur, max):
self._flashCall('setHealth', [(cur / max),
cur,
max])



def new_setAimingEnded(self, isEnded, isReloading):
saved_setAimingEnded(self, isEnded, isReloading)
gui.Scaleform.Flash.GUI.roots()[1].movie.invoke(('call',
['Aim.aimingEnded',
isEnded]))


Aim.setTarget = new_setTarget
Aim._setReloading = new_setReloading
Aim._setHealth = new_setHealth
ComplexSoundNotifications.setAimingEnded = new_setAimingEnded

#+++ okay decompyling
# decompiled 1 files: 1 okay, 0 failed, 0 verify failed

 

'Код 2'

--- This code section failed: ---
0 LOAD_CONST '\n(c) Dellux 2013\n'
3 STORE_NAME '__doc__'
6 LOAD_CONST -1
9 LOAD_CONST ''
12 IMPORT_NAME 'BigWorld'
15 STORE_NAME 'BigWorld'
18 LOAD_CONST -1
21 LOAD_CONST ''
24 IMPORT_NAME 'GUI'
27 STORE_NAME 'GUI'
30 LOAD_CONST -1
33 LOAD_CONST ''
36 IMPORT_NAME 'Math'
39 STORE_NAME 'Math'
42 LOAD_CONST -1
45 LOAD_CONST ''
48 IMPORT_NAME 'math'
51 STORE_NAME 'math'
54 LOAD_CONST -1
57 LOAD_CONST ''
60 IMPORT_NAME 'BattleReplay'
63 STORE_NAME 'BattleReplay'
66 LOAD_CONST -1
69 LOAD_CONST ''
72 IMPORT_NAME 'AvatarInputHandler.control_modes'
75 STORE_NAME 'AvatarInputHandler'
78 LOAD_CONST -1
81 LOAD_CONST ('degrees',)
84 IMPORT_NAME 'math'
87 IMPORT_FROM 'degrees'
90 STORE_NAME 'degrees'
93 POP_TOP ''
94 LOAD_CONST -1
97 LOAD_CONST ('Aim',)
100 IMPORT_NAME 'AvatarInputHandler.aims'
103 IMPORT_FROM 'Aim'
106 STORE_NAME 'Aim'
109 POP_TOP ''
110 LOAD_CONST -1
113 LOAD_CONST ('StrategicAim',)
116 IMPORT_NAME 'AvatarInputHandler.aims'
119 IMPORT_FROM 'StrategicAim'
122 STORE_NAME 'StrategicAim'
125 POP_TOP ''
126 LOAD_CONST -1
129 LOAD_CONST ('ArcadeAim',)
132 IMPORT_NAME 'AvatarInputHandler.aims'
135 IMPORT_FROM 'ArcadeAim'
138 STORE_NAME 'ArcadeAim'
141 POP_TOP ''
142 LOAD_CONST -1
145 LOAD_CONST ('clearState',)
148 IMPORT_NAME 'AvatarInputHandler.aims'
151 IMPORT_FROM 'clearState'
154 STORE_NAME 'clearState'
157 POP_TOP ''
158 LOAD_CONST -1
161 LOAD_CONST ('_FlashGunMarker',)
164 IMPORT_NAME 'AvatarInputHandler.control_modes'
167 IMPORT_FROM '_FlashGunMarker'
170 STORE_NAME '_FlashGunMarker'
173 POP_TOP ''
174 LOAD_CONST -1
177 LOAD_CONST ('ComplexSoundNotifications',)
180 IMPORT_NAME 'gui.IngameSoundNotifications'
183 IMPORT_FROM 'ComplexSoundNotifications'
186 STORE_NAME 'ComplexSoundNotifications'
189 POP_TOP ''
190 LOAD_NAME 'False'
193 STORE_GLOBAL 'isAimingEnded'
196 LOAD_CONST ''
199 MAKE_FUNCTION_0 ''
202 STORE_NAME 'new_update'
205 LOAD_NAME 'new_update'
208 LOAD_NAME 'Aim'
211 STORE_ATTR '_update'
214 LOAD_NAME 'Aim'
217 LOAD_ATTR '_setReloading'
220 STORE_NAME 'saved_setReloading'
223 LOAD_CONST ''
226 LOAD_NAME 'True'
229 LOAD_CONST ''
232 LOAD_CONST ''
235 MAKE_FUNCTION_3 ''
238 STORE_NAME 'new_setReloading'
241 LOAD_NAME 'new_setReloading'
244 LOAD_NAME 'Aim'
247 STORE_ATTR '_setReloading'
250 LOAD_CONST ''
253 MAKE_FUNCTION_0 ''
256 STORE_NAME 'new_setHealth'
259 LOAD_NAME 'new_setHealth'
262 LOAD_NAME 'Aim'
265 STORE_ATTR '_setHealth'
268 LOAD_CONST ''
271 MAKE_FUNCTION_0 ''
274 STORE_NAME 'new_setTarget'
277 LOAD_NAME 'new_setTarget'
280 LOAD_NAME 'Aim'
283 STORE_ATTR '_setTarget'
286 LOAD_NAME 'StrategicAim'
289 LOAD_ATTR '_enable'
292 STORE_NAME 'saved_strategic_enable'
295 LOAD_CONST ''
298 MAKE_FUNCTION_0 ''
301 STORE_NAME 'new_strategic_enable'
304 LOAD_NAME 'new_strategic_enable'
307 LOAD_NAME 'StrategicAim'
310 STORE_ATTR '_enable'
313 LOAD_NAME 'StrategicAim'
316 LOAD_ATTR '_update'
319 STORE_NAME 'saved_strategic_update'
322 LOAD_CONST ''
325 MAKE_FUNCTION_0 ''
328 STORE_NAME 'new_strategic_update'
331 LOAD_NAME 'new_strategic_update'
334 LOAD_NAME 'StrategicAim'
337 STORE_ATTR '_update'
340 LOAD_CONST ''
343 MAKE_FUNCTION_0 ''
346 STORE_NAME '_getAimDistanceMS'
349 LOAD_NAME '_getAimDistanceMS'
352 LOAD_NAME 'StrategicAim'
355 STORE_ATTR '_getAimDistanceMS'
358 LOAD_NAME 'ArcadeAim'
361 LOAD_ATTR '_enable'
364 STORE_NAME 'saved_arcade_enable'
367 LOAD_CONST ''
370 MAKE_FUNCTION_0 ''
373 STORE_NAME 'new_arcade_enable'
376 LOAD_NAME 'new_arcade_enable'
379 LOAD_NAME 'ArcadeAim'
382 STORE_ATTR '_enable'
385 LOAD_CONST ''
388 MAKE_FUNCTION_0 ''
391 STORE_NAME 'new_arcade_update'
394 LOAD_NAME 'new_arcade_update'
397 LOAD_NAME 'ArcadeAim'
400 STORE_ATTR '_update'
403 LOAD_NAME 'ComplexSoundNotifications'
406 LOAD_ATTR 'setAimingEnded'
409 STORE_NAME 'saved_setAimingEnded'
412 LOAD_CONST ''
415 MAKE_FUNCTION_0 ''
418 STORE_NAME 'new_setAimingEnded'
421 LOAD_NAME 'new_setAimingEnded'
424 LOAD_NAME 'ComplexSoundNotifications'
427 STORE_ATTR 'setAimingEnded'
430 LOAD_NAME '_FlashGunMarker'
433 LOAD_ATTR '_changeColor'
436 STORE_NAME 'saved_changeColor'
439 LOAD_CONST ''
442 MAKE_FUNCTION_0 ''
445 STORE_NAME 'new_changeColor'
448 LOAD_NAME 'new_changeColor'
451 LOAD_NAME '_FlashGunMarker'
454 STORE_ATTR '_changeColor'
457 LOAD_NAME '_FlashGunMarker'
460 LOAD_ATTR 'update'
463 STORE_NAME 'saved_gm_update'
466 LOAD_CONST ''
469 MAKE_FUNCTION_0 ''
472 STORE_NAME 'new_gm_update'
475 LOAD_NAME 'new_gm_update'
478 LOAD_NAME '_FlashGunMarker'
481 STORE_ATTR 'update'
484 LOAD_NAME 'BigWorld'
487 LOAD_NAME 'BigWorld'
490 POP_TOP ''
491 LOAD_CONST ''
494 RETURN_VALUE ''

Syntax error at or near `POP_TOP' token at offset 490

Share this post


Link to post

Short link
Share on other sites

Ребят, все (известные мне прицелы) которые используют MS.pyc в тесте 0.8.9 не работают...

Автор скрипта выложит обновление после релиза 0.8.9.

Share this post


Link to post

Short link
Share on other sites

а вы сами то пробывали? =)

 

 

 

 

Устанавливаете Visual Studio 2008 открываете в ней проект и выполняете его построение

 

при компиляции вываливается с ошибкой

fatal error C1083: Cannot open source file: '.\bytes\python_33.cpp': No such file or directory

начиная с _10 файла.

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

Edited by Dmitry81

Share this post


Link to post

Short link
Share on other sites

 

 

fatal error C1083: Cannot open source file: '.\bytes\python_33.cpp': No such file or directory начиная с _10 файла.
 

в папке bytes выполни

python comp_map.py

Share this post


Link to post

Short link
Share on other sites

Собственно вопрос припёк меня давно. Есть-ли какие-то утилиты/способы декомпилировать и компилировать *.pyc файлы?

P.s. Гугл не помог, кидал в какие-то онлайн-декомпиляторы, но там ограничение 10кб.

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

 

после пары ошибок с указанной причиной, нужные русы, были задекомпилены

 

на всё ушло не больше часа

  • Downvote 3

Share this post


Link to post

Short link
Share on other sites

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

Все так и делаю... даже питон 2.6.4 поставил (как на скрине)... лишних ошибок нет (пробовал даже не трогать исходный файл = не править)... все как на скринах выводит, но скомпилированный файл не появляется? Может это быть из-за Win 7 x64?

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 его можно закидывать в клиент

Скажите пожалуйста,пробовал компилировать как в инструкции,установил 2.6,после пункта №3 выскакивает это (скрин№1),в журнале событий вот это (скрин №2).В чем может быть проблема?Вин7х64Макс

post-4302-0-05122800-1383411374_thumb.jpg

post-4302-0-73531400-1383411380_thumb.jpg

Share this post


Link to post

Short link
Share on other sites
Я уже поставил виртуальную машину.... там собрал.

Проблема решена на виртуальной машине.

Все получилось.

Блин такой же косяк, не появляется файл.

А на виртуалку ты какую ОС закатал, а то у меня на втором компе x86, но тоже файлик не появился.

Пишет вот такую ошибку.

Traceback (most recent call last):
  File "C:\1\111\currentvehicle.py", line 2, in <module>
    import BigWorld
ImportError: No module named BigWorld

Файл не создаётся.

Edited by NikolayHAOS

Share this post


Link to post

Short link
Share on other sites

Я закатал Хрюшу на 32х...полет нормальный. Даже ничего не закрываю... просто гибернирую виртуалку... а потом раз... и даже редактор уже открыт.

Share this post


Link to post

Short link
Share on other sites

 

 

Скажите пожалуйста,пробовал компилировать как в инструкции,установил 2.6,после пункта №3 выскакивает это (скрин№1),в журнале событий вот это (скрин №2).В чем может быть проблема?Вин7х64Макс
 

side by Side ошибка самая неприятная из всех что мне встречалась раньше, конкретного решения не подскажу лишь скажу что мне помогло установка подходящего под операционку vcredist.exe и обновление NETFramework


 

 

Traceback (most recent call last):   File "C:\1\111\currentvehicle.py", line 2, in     import BigWorld ImportError: No module named BigWorld Файл не создаётся.

 

Это не ошибка, точнее не совсем ошибка, так и должно быть. файл при этом должен создаваться. 

Share this post


Link to post

Short link
Share on other sites

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

 

 

не получается собрать обратно в pyc

всё вроде-бы правильно делал. ошибок не выскакивало, просто не собирается и всё

 

 

Вот до чего я докопался.

создал скрипт compile.py и закинул в директорию C:\Python26
в ту-же директорию закинул и нужный файл currentvehicle.py
в консоли открыл директорию питона командой <cd c:\Python26>
командой  <python.exe compile.py -c currentvehicle.py>  выполнил скрипт
и вуаля, скомпилировался файл currentvehicle.pyc

 

вот сам скрипт компилятора

# compile.py
import sys
import getopt

from compiler import compileFile, visitor

import profile

def main():
    VERBOSE = 0
    DISPLAY = 0
    PROFILE = 0
    CONTINUE = 0
    opts, args = getopt.getopt(sys.argv[1:], 'vqdcp')
    for k, v in opts:
        if k == '-v':
            VERBOSE = 1
            visitor.ASTVisitor.VERBOSE = visitor.ASTVisitor.VERBOSE + 1
        if k == '-q':
            if sys.platform[:3]=="win":
                f = open('nul', 'wb') # /dev/null fails on Windows...
            else:
                f = open('/dev/null', 'wb')
            sys.stdout = f
        if k == '-d':
            DISPLAY = 1
        if k == '-c':
            CONTINUE = 1
        if k == '-p':
            PROFILE = 1
    if not args:
        print "no files to compile"
    else:
        for filename in args:
            if VERBOSE:
                print filename
            try:
                if PROFILE:
                    profile.run('compileFile(%r, %r)' % (filename, DISPLAY),
                                filename + ".prof")
                else:
                    compileFile(filename, DISPLAY)

            except SyntaxError, err:
                print err
                if err.lineno is not None:
                    print err.lineno
                if not CONTINUE:
                    sys.exit(-1)

if __name__ == "__main__":
    main()

кто подскажет, всё-ли верно. а так вроде всё работает

 

вот файл получившийся на выходе

https://www.dropbox.com/s/1eq1nqpy9ik9nvo/currentvehicle.pyc

 

так как в пайтоне не рублю, поэтому и интересуюсь мнением тех, кто понимает

Edited by evil_rrock
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

командой  <python.exe compile.py -c currentvehicle.py>  выполнил скрипт

Раз до CMD дошли, тогда можно сразу пачку скриптов даже делать... кидаем все в 1 папку.... например C:/1

Пишем:

python - m compileall c:/1/

Если лень работать с ком. строкой... то создаете фаил: compile.py

 

В него пишете:

import py_compile
py_compile.compile("currentvehicle.py")

и запускаете этот фаил через F5 (Run Module).

 

Если currentvehicle.py лежит в папке Papka, то пишете

import py_compile
py_compile.compile("papka/currentvehicle.py")

Ох... чую сейчас повалит куча "модификаций" всех скриптов :)

Edited by Yusha
  • Upvote 3
  • Downvote 1

Share this post


Link to post

Short link
Share on other sites

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

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