Сейчас на форуме: asfa, Rio, _MBK_, Adler (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Декомпилляция питона (самосборка вроде)
Посл.ответ Сообщение

Ранг: 11.4 (новичок), 2thx
Активность: 0.020
Статус: Участник

Создано: 05 мая 2013 21:25
· Личное сообщение · #1

Привет всем!
Всех с праздником, удачи и здоровья!

Есть питоновский exe`шник (pyinstall). Выковыривать оттуда .pyc научился, хотя и нудное это дело по одному файлику. Попытка декомпилляции тем, что нашел в сети (uncompyle2, еще что-то) приводит к ошибке - Unknown magic number - xx. Почитал про это дело - судя по всему, самосборный питон с переназначенными мнемониками. Версия питона - 2.7.1. Тестовые скрипты декомпилятся нормально.

Вопрос: каким образом можно декомпилировать это чудо. как найти соответствие мнемоник байт коду? На что обратить внимание?

Вопрос №2 (оффтопный): exe`шник сразу запихнул в оллю (из любопытства), запускается все ок. Но! Прога вызывает сама себя из командной строки (я так понял) поэтому когда нажимаю ,допустим, "ок" - в олли терминируется и запускает свою свежую копию. Вроде как параметры передает. Как дебажить вторую копию? Атач не канает - терминируется.

Всем спасибо

З.Ы. с питоном столкнулся вчера ))



Ранг: 262.5 (наставник), 337thx
Активность: 0.340.25
Статус: Участник

Создано: 05 мая 2013 21:46
· Личное сообщение · #2

sapog93 пишет:
Вопрос №2 (оффтопный): exe`шник сразу запихнул в оллю (из любопытства), запускается все ок. Но! Прога вызывает сама себя из командной строки (я так понял) поэтому когда нажимаю ,допустим, "ок" - в олли терминируется и запускает свою свежую копию. Вроде как параметры передает. Как дебажить вторую копию? Атач не канает - терминируется.

Ставь бряки на CreateProcessA, ShellExecuteA, WinExec и смотри с какими параметрами создается вторая копия. Потом в ольке File-Open и вписывай параметры в строку Arguments

| Сообщение посчитали полезным: sapog93


Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 05 мая 2013 21:49
· Личное сообщение · #3

sapog93 пишет:
Unknown magic number

по magic number многие программы опознают файлы, пригодные для обработки.
то, что мэджик не сошёлся - еще не означает, что это
sapog93 пишет:
самосборный питон с переназначенными мнемониками

кинь файл, там проверим

sapog93 пишет:
Вроде как параметры передает. Как дебажить вторую копию?

подсмотри параметры в Process Explorer и запусти файло в ольке, указав те параметры в качестве командной строки.

| Сообщение посчитали полезным: sapog93

Ранг: 11.4 (новичок), 2thx
Активность: 0.020
Статус: Участник

Создано: 05 мая 2013 22:15 · Поправил: sapog93
· Личное сообщение · #4

Ребя!! Респект. Сам не допер.. А вот файло из екзешника (там их много). Точнее из outPYZ1.pyz выдернул. Почти со всеми ошибка выскакивает. Остальные видать стандартные библиотеки. и в хекс редакторе у нормальных по первым двум байтам можно вычислить версию питона. А в этом.. борода.

Еще вспомнил, что у файликов (выдирал ArchiveViewer.py) расширение на .pyc ручками менял. А еще есть какое-то .pyo вроде.. Еще подменял python27.dll. Брал из system32. С подменой вообще ничего не работает. Поэтому сделал вывод, что самопис

40a6_05.05.2013_EXELAB.rU.tgz - 1.rar




Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 05 мая 2013 22:46 · Поправил: -=AkaBOSS=-
· Личное сообщение · #5

sapog93
выложенному файлу не хватает заголовка:

magic db 0xB3, 0xF2, 0x0D, 0x0A
timestamp dd ?

/ADD:
timestamp - время/дата компиляции, очевидно же
вопросительный знак я поставил просто по привычке ассемблерщика)
ставь в ноль, не ошибёшься.

sapog93 пишет:
как вы поняли чего не хватает?

питон у меня установлен, скомпилил простой скрипт и сравнил

sapog93 пишет:
Но появился вопрос - можно взять начало из рабочего и вставить?

можно и нужно.



Ранг: 11.4 (новичок), 2thx
Активность: 0.020
Статус: Участник

Создано: 05 мая 2013 23:00 · Поправил: sapog93
· Личное сообщение · #6

-=AkaBOSS=-

знать бы еще, что это такое - timestamp dd.. они почти все такие. а не такие декомпилятся.
я так понял нужно добавить это в начало файла и он декомпильнется? и если да, то как вы поняли чего не хватает?

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




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 05 мая 2013 23:04 · Поправил: reversecode
· Личное сообщение · #7

sapog93 пишет:
и если да, то как вы поняли чего не хватает?

опыт

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

можете
так и делается
можете вообще сами числа дописать

| Сообщение посчитали полезным: sapog93

Ранг: 11.4 (новичок), 2thx
Активность: 0.020
Статус: Участник

Создано: 05 мая 2013 23:26
· Личное сообщение · #8

-=AkaBOSS=-
все получилось! спасибо огромное

reversecode
спасибо

тему, если можно, пока не закрываю - вдруг вопросы появятся



Ранг: 11.4 (новичок), 2thx
Активность: 0.020
Статус: Участник

Создано: 06 мая 2013 00:34
· Личное сообщение · #9

-=AkaBOSS=-

а вот как раз вопрос возник - чем дизасмить байткод? вот чтоб так было

magic db 0xB3, 0xF2, 0x0D, 0x0A
timestamp dd ?






Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 06 мая 2013 00:45
· Личное сообщение · #10

sapog93 пишет:
а вот как раз вопрос возник - чем дизасмить байткод? вот чтоб так было

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



Ранг: 11.4 (новичок), 2thx
Активность: 0.020
Статус: Участник

Создано: 06 мая 2013 01:16
· Личное сообщение · #11

-=AkaBOSS=- пишет:
а к ассемблерному виду я его привёл вручную, ибо так понятнее, имхо


по моему тоже.. ) пока поковыряюсь в командной - там видно будет. thx




Ранг: 88.2 (постоянный), 111thx
Активность: 0.070.01
Статус: Участник

Создано: 06 мая 2013 11:02
· Личное сообщение · #12

Добавляешь заголовок к нужным файлам и в uncompyle2



Ранг: 11.4 (новичок), 2thx
Активность: 0.020
Статус: Участник

Создано: 06 мая 2013 11:50 · Поправил: sapog93
· Личное сообщение · #13

Airenikus

да, так и делаю... ) А можно как-нибудь распаковать сразу все файлы? В ArchiveViewer.py что-то не нашел как это сделать

upd. Не нашел как распаковать сразу все, точнее нашел, но не работает. Пришлось ручками, но все оказалось проще - ключевых файлов было мало.. Так что, можно сказать, все получилось.
Всем спасибо



Ранг: 11.4 (новичок), 2thx
Активность: 0.020
Статус: Участник

Создано: 13 мая 2013 16:51
· Личное сообщение · #14

Возник еще вопрос: есть ли техническая возможность подменить скрипт прямо в архиве? допустим у меня есть pyinstall exe`шник, я выдернул из него скрипт, немножко переделал и как теперь заменить оригинал на измененный прямо в екзе?


 eXeL@B —› Вопросы новичков —› Декомпилляция питона (самосборка вроде)
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати