eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 10 декабря!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме:
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Программирование —› Декомпилирование python
. 1 . 2 . >>
Посл.ответ Сообщение

Ранг: 5.1 (гость)
Статус: Участник

Создано: 25 июля 2014 11:19 New!
Цитата · Личное сообщение · #1

Помогите пож декомпилировать pyc файлы см вложение, уже голову сломал с ошибкой
RuntimeError: Bad magic number in .pyc file


{ Атач доступен только для участников форума } - licensemanager.zip


Ранг: 534.6 (!)
Статус: Uploader
retired

Создано: 25 июля 2014 11:49 New!
Цитата · Личное сообщение · #2

Возможно это кастомная сборка питона 2 версии, т.к. последний magic number - 62211, а у вас 62216. если оно всё идет вместе с pythonXX.dll (или как там они могли ее переименовать) а по другому и быть не может скорей всего, то вам нужно ее отлаживать.


Ранг: 994.1 (! ! !)
Статус: Участник

Создано: 25 июля 2014 12:03 New!
Цитата · Личное сообщение · #3

62215 тоже есть
некастомная , но поддержки нет
фиксить самому декомпилер


Ранг: 534.6 (!)
Статус: Uploader
retired

Создано: 25 июля 2014 12:13 New!
Цитата · Личное сообщение · #4

reversecode пишет:
62215 тоже есть

Это что за версия?
У меня последняя 2.7.8 генерит с 62211.

Ранг: 5.1 (гость)
Статус: Участник

Создано: 25 июля 2014 12:14 New!
Цитата · Личное сообщение · #5

Есть полный доступ к серверу
На сервере скрипты отрабатывают корректно без ошибок
Версия

/ # python -V
Python 2.7.6

Под линуксом

но к себе переносил на версию 2.7 питона, ругается
Так что нужно запускать на севрере
декомпиляторы нашел:
1. EasyPythonDecompiler но он под виндой, и на сервере отработать его не могу
2. https://code.google.com/p/unpyc3/ но он под 3ю версию, под 2,7 пока не переделывал
3 unpyc там нет реаилазована декомпиляция, только дизасемблер, дизасемб проходит только на файле __init__.pyc на остальных ругается

на __init__.pyc вот показывает
/share/python/site-packages/ni/licensemanager # python /share/python/test/unpyc/UnPyc -d __init__.pyc
--== Disasm ==--
00000008 CODE:
argcount:
00000009 LONG: 0L (00 00 00 00)
nlocals:
0000000D LONG: 0L (00 00 00 00)
stacksize:
00000011 LONG: 1L (01 00 00 00)
flags:
00000015 LONG: 64L (40 00 00 00)
(NOFREE)
code:
00000019 STR: '/\x00\x00d' (04 00 00 00 2F 00 00 64)
00000000 2F
00000001 00 - STOP_CODE
00000002 00 - STOP_CODE
00000003 64 - LOAD_CONST None
consts:
00000022 TUPLE: (
00000027 None (4E)
)
names:
00000028 TUPLE: ()
varnames:
0000002D TUPLE: ()
freevars:
00000032 TUPLE: ()
cellvars:
00000037 TUPLE: ()
filename:
0000003C STR: '/share/python/site-packages/ni/lice...' (39 00 00 00 2F 73 68 61 72 65 2F 70...)
name:
0000007A STR: '<module>' (08 00 00 00 3C 6D 6F 64 75 6C 65 3E)
firslineno:
00000087 LONG: 1L (01 00 00 00)
lnotab:
0000008B STR: '' (00 00 00 00)


Куда можно еще комнуть?


Ранг: 994.1 (! ! !)
Статус: Участник

Создано: 25 июля 2014 12:19 New!
Цитата · Личное сообщение · #6

https://github.com/wibiti/uncompyle2/issues/23
я добавил 62215

надо дальше декомпиль фиксить
Code:
  1. ### Can't uncompyle licensemanager/licensemanagerservermain.pyc
  2. Traceback (most recent call last):
  3.   File "/usr/local/lib/python2.7/dist-packages/uncompyle2/__init__.py", line 197, in main
  4.     uncompyle_file(infile, outstream, showasm, showast, deob)
  5.   File "/usr/local/lib/python2.7/dist-packages/uncompyle2/__init__.py", line 130, in uncompyle_file
  6.     uncompyle(version, co, outstream, showasm, showast, deob)
  7.   File "/usr/local/lib/python2.7/dist-packages/uncompyle2/__init__.py", line 93, in uncompyle
  8.     tokens, customize = scanner.disassemble(co, deob=deob)
  9.   File "/usr/local/lib/python2.7/dist-packages/uncompyle2/Scanner.py", line 214, in disassemble
  10.     cf = self.find_jump_targets(code)
  11.   File "/usr/local/lib/python2.7/dist-packages/uncompyle2/Scanner.py", line 930, in find_jump_targets
  12.     oparg = code[i+1] + code[i+2] * 256
  13. IndexError: array index out of range


Добавлено спустя 2 минуты
BoRoV на маршал не ругается, значит 50/50 что не кастомная

Добавлено спустя 3 минуты
можешь попробовать челу пульнуть на гитхаб, может пофиксит

Ранг: 5.1 (гость)
Статус: Участник

Создано: 28 июля 2014 08:26 New!
Цитата · Личное сообщение · #7

reversecode

А можешь глянуть вот с этим https://github.com/Mysterie/uncompyle2 декомпилятором у тебя тоже самое будет?


Ранг: 534.6 (!)
Статус: Uploader
retired

Создано: 28 июля 2014 11:23 New!
Цитата · Личное сообщение · #8

avtrosty пишет:
А можешь глянуть вот с этим https://github.com/Mysterie/uncompyle2 декомпилятором у тебя тоже самое будет?

А ты сам не можешь глянуть? Если нет, то тебе в запросы.

Ранг: 5.1 (гость)
Статус: Участник

Создано: 28 июля 2014 12:52 New!
Цитата · Личное сообщение · #9

BoRoV
Могу, просто он писал, что у него на маршал не ругается, вот хотел узнать будет ли на сам декомпилятор ругатся или нет
а у меня, что в том, что в этом на маршал ругается


Статус: Пришелец

Создано: 5 февраля 2015 16:30 New!
Цитата #10

С pyc все вроде бы понятно, но как бороться с бинарными библиотеками? Файлы .so в линуксе. Кто-нибудь работал в этом направлении?

Вот такие обрезки кода (кода ли?) встречаются в файле:
Code:
  1. db 9,9,'¦¬TА¦-¦-¦¦TАTП¦¦TВ ¦-¦- TД¦¬¦-¦¦ thread_stopped',0Ah
  2. db 9,9,'@return true/false',0Ah
  3. db 9,9,0


Ранг: 994.1 (! ! !)
Статус: Участник

Создано: 5 февраля 2015 16:49 New!
Цитата · Личное сообщение · #11

китайская кодировка видимо
поиграйся и найдешь


Статус: Пришелец

Создано: 5 февраля 2015 17:00 New!
Цитата #12

Да, это русский текст и UTF-8. Но это ведь получается всего лишь строки, а вот байткода нет. Есть только ассемблерный код с вызовами функций питона. Это второй Visual Basic что ли?


Ранг: 994.1 (! ! !)
Статус: Участник

Создано: 5 февраля 2015 17:07 New!
Цитата · Личное сообщение · #13

int пишет:
Это второй Visual Basic что ли?

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

Ранг: 488.4 (мудрец)
Статус: Участник

Создано: 5 февраля 2015 17:15 · Поправил: VodoleY New!
Цитата · Личное сообщение · #14

ну с русским то разобрались.
>>проверяет на флаг thread_stopped

Инт.. это ж в секции ресурсов все лежит. имхо нет там кода

Добавлено спустя 2 минуты
reversecode пишет:
да есть такой компилируемый питон

на скок я помню, питон ток в байткод компилируется.. включая стайклес питон.. ну типа получаются РУС РУО файлы...


Статус: Пришелец

Создано: 5 февраля 2015 17:29 New!
Цитата #15

VodoleY пишет:
ну типа получаются РУС РУО файлы...

Такие там тоже есть, но это не оно. Я уже опробовал HexRays:
Code:
  1. if ( PyDict_SetItem(_pyx_d, _pyx_n_s__os, v103) < 0 )
  2. {
  3.     v3 = 7725;
  4.     v9 = 1;
  5.     v107 = 0LL;
  6.     goto LABEL_207;
  7. }

_pyx_n_s__os - объект строки

Короче фу такое реверсить, мне в свое время Visual Basic хватило, все апи его знал(


Ранг: 994.1 (! ! !)
Статус: Участник

Создано: 5 февраля 2015 17:33 New!
Цитата · Личное сообщение · #16

VodoleY пишет:
на скок я помню, питон ток в байткод компилируется..

ну теперь будешь знать что не только байт код


Статус: Пришелец

Создано: 5 февраля 2015 18:04 New!
Цитата #17

int пишет: Короче фу такое реверсить, мне в свое время Visual Basic хватило, все апи его знал

Там ничего общего с васиком, никто же не кричит фу Qt, фу boost, просто питоновские типы данных.
Собиралось скорее всего GCC, стало быть эти же сигнатуры накладывать, тогда читается довольно просто, сами типы можно посмотреть в исходниках питона.
Код полностью нативный, там нет байткода, питоновский исходник переводится в c++ и потом собирается со всеми зависимостями.


Ранг: 994.1 (! ! !)
Статус: Участник

Создано: 5 февраля 2015 18:12 New!
Цитата · Личное сообщение · #18

F_a_u_s_t пишет:
Там ничего общего с васиком

аналог с васиком корректен


Статус: Пришелец

Создано: 5 февраля 2015 20:09 New!
Цитата #19

reversecode пишет: аналог с васиком корректен

Нет, наиболее корректный вариант, это сравнение с бустом, никто же не говорит, что шаблоны это пикод.
При компиляции получается 100% нативный код, никакой интерпретации, просто используются питоновские типы, например tuple, dict, но это реализуется в сишке и без питона, при компиляции берется просто питоновская реализация, иначе любое использование чужих классов уже становится васиком.
К слову, это далеко не все компиляторы делают и в данном случае не могу со 100 процентной уверенностью сказать, что и у инта так же.
Компиляторов прилично наплодили.


Ранг: 994.1 (! ! !)
Статус: Участник

Создано: 5 февраля 2015 20:10 New!
Цитата · Личное сообщение · #20

вижуал бейсик тоже самое дает в нейтиве
так что я с тобой не согласен


Статус: Пришелец

Создано: 5 февраля 2015 22:01 New!
Цитата #21

reversecode пишет: я с тобой не согласен

Есть язык, есть разные реализации языка и его рантайма, причем разница может быть столь существенная, что общего кроме языка ничего и нет.
Например сравнить visual basic и purebasic, у последнего фрондет FASM, полностью нативный и прозрачный код.
Сравнить тип tuple, независимо от реализации, будь она на с++ или pascal, tuple, всегда будет tuple и единственным отличием будет язык с реализацией.
Для того же питона 100500 реализаций, на базе java vm, .net vm, фронтед gcc, jit на базе llvm.
Один язык, разная реализация, разный рантайм.


Ранг: 994.1 (! ! !)
Статус: Участник

Создано: 5 февраля 2015 22:11 · Поправил: reversecode New!
Цитата · Личное сообщение · #22

я не знаю в чем ты меня пытаешься убедить
если аналогия нейтивного васика == аналогия нейтивного питона
и тот и тот я декомпилил
пытаешься объяснить что у всех разные основы? ну у каждого языка свои разные основы,

а вот с нейтивным хаскелем у нейтивного питона почему то ничего общего нет


Статус: Пришелец

Создано: 5 февраля 2015 23:12 New!
Цитата #23

reversecode пишет: если аналогия нейтивного васика == аналогия нейтивного питона

В данном случае нативный питон == GCC с реализацией словарей, строк и прочей мишурой.
boost::spirit яркий пример, что не все измеряется васиками, используя спирит, запилив питоновские типы, бинарь станет васиком?
PythonImplementations список реализаций, теперь вопрос, в чем заключается васик не васик, дабы из списка васики сразу отсеять и оставить тру компили.
По поводу хаскеля, то язык функциональный и естественно типы будут другие, будет другой код на выхлопе, но опять же, там ничего васикоподобного нет, тот же linq прекрасно реализовывается в плюсах, недавно на хабре статья была с монадами на плюсах, естественно и нативный выхлоп алгоритмически будет похож.)


Ранг: 994.1 (! ! !)
Статус: Участник

Создано: 5 февраля 2015 23:16 New!
Цитата · Личное сообщение · #24

F_a_u_s_t пишет:
В данном случае нативный питон == GCC с реализацией словарей, строк и прочей мишурой.

что такое в данном случае GCC? GNU C Compiler? если да, то ты знак перепутал, надо != ставить


Статус: Пришелец

Создано: 6 февраля 2015 01:29 New!
Цитата #25

reversecode пишет: то ты знак перепутал, надо != ставить

Ничего не перепутал, питоновский код транслируется в pure c\c++ код, а тот в свою очередь собирается GCC, а это уже никак не васик, а вполне себе с\с++ компилятор, который опять же повторюсь, собирает именно сишный исходник, следовательно ни о каком васике тут речи нет, иначе любой слой абстракции в рамках с\с++ это васик.
Полученный после транслятора код соответствует стандарту, там нет никаких сторонних препроцессоров и прочих костылей, есть лишь pure c, который собирается GCC или той же студией.
Или же записываем все сторонние библиотеки в васик, например тот же Poco, который ни разу не стандартный набор классов.


Статус: Пришелец

Создано: 6 февраля 2015 03:00 New!
Цитата #26

Бредовый какой-то спор у вас...

F_a_u_s_t
По твоей логике вот это что?
Code:
  1. extern:0000000000226634                 extrn PyDict_Items      ; DATA XREF: .got.plt:off_220AB0o
  2. extern:0000000000226638                 extrn PyUnicode_FromString
  3. extern:0000000000226638                                         ; DATA XREF: .got.plt:off_220AB8o
  4. extern:000000000022663C                 extrn PyObject_GC_Del   ; DATA XREF: .got.plt:off_220AC0o
  5. extern:0000000000226640                 extrn PyErr_NoMemory    ; DATA XREF: .got.plt:off_220AC8o
  6. extern:0000000000226644                 extrn PyList_Type       ; DATA XREF: .got:PyList_Type_ptro
  7. extern:0000000000226648                 extrn PyObject_GC_UnTrack
  8. extern:0000000000226648                                         ; DATA XREF: .got.plt:off_220AD0o
  9. extern:000000000022664C                 extrn PyObject_CallFunctionObjArgs
  10. extern:000000000022664C                                         ; DATA XREF: .got.plt:off_220AD8o
  11. extern:0000000000226650                 extrn PyObject_IsTrue   ; DATA XREF: .got.plt:off_220AE0o
  12. extern:0000000000226654                 extrn PyExc_TypeError   ; DATA XREF: .got:PyExc_TypeError_ptro
  13. extern:0000000000226658                 extrn PyMem_Realloc     ; DATA XREF: .got.plt:off_220AE8o
  14. extern:000000000022665C                 extrn PyDict_Type       ; DATA XREF: .got:PyDict_Type_ptro
  15. extern:0000000000226660                 extrn PyErr_GivenExceptionMatches
  16. extern:0000000000226660                                         ; DATA XREF: .got.plt:off_220AF0o
  17. extern:0000000000226664                 extrn PyDict_GetItemWithError

Вызоы из стандартной библиотеки си++? Оно все равно взаимодействует с питоновским кодом и живет в своих рантаймах. Статическую сборку можно сделать без всей этой мишуры? Нет, т.к. нет это не pure си\си++ ни разу.


Ранг: 994.1 (! ! !)
Статус: Участник

Создано: 6 февраля 2015 03:04 New!
Цитата · Личное сообщение · #27

F_a_u_s_t
у тебя все перемешалось, люди, кони,.. еще и кроликов втянул сюда
ты даже не понял к чему там сравнение с васиком было зацеплено


Статус: Пришелец

Создано: 6 февраля 2015 21:09 · Поправил: F_a_u_s_t New!
Цитата #28

int пишет: Вызоы из стандартной библиотеки си++?

Динамическая линковка буста это вызов из стандартной библиотеки с++, а компиляция delphi с динамическим рантаймом это что?
чем отличается state_t call_objetc_ref( py_object* _object ) от state_t call_objetc_ref( cpp_object* _object )?
Если crt линковать динамически, то она станет васиком, верно?
int пишет: Статическую сборку можно сделать без всей этой мишуры? Нет, т.к. нет это не pure си\си++ ни разу.
Сначала вопрос, затем предвосхищение, типичная логическая ошибка.
Вообще то можно, как можно и сам питон собрать статически, собственно как и пых.
В данном случае у тебя просто частный случай, миксед код.

reversecode пишет:
у тебя все перемешалось, люди, кони,.. еще и кроликов втянул сюда
ты даже не понял к чему там сравнение с васиком было зацеплено


Вообще то я уже пару раз спроси где именно там васик, вместо прямого ответа, появились какие то пространные мысли, которые я вовсе не озвучивал.
Опять же, vcl тебе в пример, линкуется динамически, чем TObject отличается от Py_Object?
Покажи мне в коде таблицу байткода или плайн текст питоновского кода, при учете что там eval не используется.
Началось сравнение рантаймов, это апишечку из crt я знаю, а вот эта из vcl мне не знакома и стало быть васик.
С такой логикой только на фронт.
shedskin это чИто такое?
nuitka а это?
А если еще немного подумать и представить, что это так же можно и статически линковать.
static-python собираем и можем хоть облинковаться.
Или взять ipython и собрать один бинарь со всем .net окружением.
Собирается динамически по одной простой причине, реальный мир это настоящий ужас для перфекциониста и баг может оказаться в любой из библиотек, проще же обновить одну библиотеку, чем пересоберать все окружение.
В обще жду конструктивные аргументы в духе это васик, потому что потому и следовательно это васик, а не какие то вбросы фраз.


Статус: Пришелец

Создано: 6 февраля 2015 21:36 New!
Цитата #29

F_a_u_s_t
Хочешь конструктивно? 20 файлов .so. Цена вопроса?

F_a_u_s_t пишет:
В данном случае у тебя просто частный случай, миксед код.

Я не энциклопедия форматов и компиляторов питона. И я говорю про конкретный увиденный код, к чему все эти примеры даны?


Статус: Пришелец

Создано: 6 февраля 2015 21:54 New!
Цитата #30

int пишет: Хочешь конструктивно? 20 файлов .so. Цена вопроса?

Нет, спасибо, там сущий ад, у питона довольно мозгодробительная эмуляция ООП.
Тут только делать сигнатуры для IDA и смотреть исходники питона.

int пишет:
Я не энциклопедия форматов и компиляторов питона. И я говорю про конкретный увиденный код, к чему все эти примеры даны?


Примеры были даны на восклицание reversecode python == basic, хотя там ничего общего, с таким успехом и stuxnet написан на basic, собственно в этом весь сыр бор, все сугубо для истины и дзена из любви к искусству.
. 1 . 2 . >>
 eXeL@B —› Программирование —› Декомпилирование python

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS