Сейчас на форуме: Rio, YDS (+10 невидимых)

 eXeL@B —› Основной форум —› py2exe или ???( продолжение закрытой темы rC)
Посл.ответ Сообщение

Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 19 апреля 2006 12:38
· Личное сообщение · #1

www.renaigames.net/dev_renpy6.html
Долго и упорно я бился с py2exe и стало доходить, что здесь что-то не так.
Ну нет секции pythonscript в генерируемых им файлах.
Тогда забрасываем поиск pythonscript +"exe file"
Видим, что тут совсем другая метода работы с питоном.
Как говорят математики ч.т.д.




Ранг: 282.8 (наставник), 24thx
Активность: 0.260
Статус: Участник
win32.org.ru

Создано: 19 апреля 2006 13:13
· Личное сообщение · #2

сори за оффтоп кнечно, но вроде запрещается открывать когда-то закрытый топ, или я не прав?

-----
may all your PUSHes be POPed!




Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 19 апреля 2006 14:48
· Личное сообщение · #3

Guru_eXe
Все могут ошибаться. Впрочем я заранее к бан-у готов - за принудительную помощь




Ранг: 50.7 (постоянный)
Активность: 0.050
Статус: Участник

Создано: 19 апреля 2006 15:29
· Личное сообщение · #4

Имхо секция pythonscript встречается для 2.2/2.3 версий питонского кода,обработаных py2exe. Откомпилил парочку разных hello, world -> получил дичайшее количество мусора до реального кода в том месиве, что вставляется в exe. Т.е. все таки заголовок там покоцан нормально. Но! Вместе с тем когда этот код скармливается интерпретатору прямо из экзешника - тот даже не думает давиться....



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 19 апреля 2006 16:02 · Поправил: tundra37
· Личное сообщение · #5

Использовал py2exe-0.3.3.win32-py2.2.exe и python 2.2
Задавал такой файл
# setup-h.py
from distutils.core import setup
import py2exe
setup(name="server",scripts=["helloapp.py"])

и соотвественно python setup-h.py py2exe - никаких нестандартных секций в helloapp.exe
Блин, ну нет у меня док по py2exe для 2.2 То что написано на офсайте не годится для
старых версий, а у меня оказывается получился zip внутри. Там куча .py и helloapp.py нету
Ткни носом неразумного. Почитаю, тогда смогу помочь. Просто охота хоть чуть понять
в этом питоне. И кто его только придумал. Без ящика водки не осилишь.
+++++++++++++++++++++++++++++++++++
Так - в новом py2exe действительно строится секция pithonscript. Придется версию 2.4
ставить или поискать py2exe с этой опцией.



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 19 апреля 2006 18:03
· Личное сообщение · #6

Горячо!!!
Скачал я питон 2.3.5 и поставил вместе со "свеженьким" py2exe. Секцию мне конечно получить пока не удалось, но зато после "второго взгляда" нашел вот это в build_exe.py
Твой "покоцанный" заголовок, как на ладони :

si = struct.pack("iiii",
0x78563412, # a magic value,
self.optimize,
self.unbuffered,
len(code_bytes),
) + relative_arcname + "\000"

script_bytes = si + code_bytes + '\000\000'
self.announce("add script resource, %d bytes" % len(script_bytes))
if not self.dry_run:
add_resource(unicode(exe_path), script_bytes, u"PYTHONSCRIPT", 1, True)

code_bytes - это тело скрипта, там где я и говорил.
Все-таки я ковыряюсь в хексе не один десяток лет



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 20 апреля 2006 11:30
· Личное сообщение · #7

Подводим итог:
1. Это был py2exe
2. py2exe (поздние версии) пишет в ресурсы "секцию" PYTHONSCRIPT, в которую записывает
0x78563412 + два слова + длина + название файла библиотеки + boot-code + script
Дополнительные файлы компилируются и зипуются в файл библиотеки.
3. На wasm.ru лежат тексты декомпилятора питона, но без питона они бесполезны.
Декомпиляторы для версий 2.0, 2.2 и 2.3 разные и в версии wasm для 2.3 нет или неполный.
4. Нарыл тексты декомпилятора для 2.3 и выкладываю. В каталоге test убрал файл на 980 кило,
я думаю не сильно он нужен.

d31c_20.04.2006_CRACKLAB.rU.tgz - decompyle-2.3.rar




Ранг: 50.7 (постоянный)
Активность: 0.050
Статус: Участник

Создано: 20 апреля 2006 11:39
· Личное сообщение · #8

Декомпиль уже давно есть под нужные версии, равно как и компилера несколько версий лежит
Длина чего? По чём конец буткода определял?



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 20 апреля 2006 12:38 · Поправил: tundra37
· Личное сообщение · #9

rC пишет:
Длина чего?

бут-код+скрипт

rC пишет:
По чём конец буткода определял?

Вообще-то это твоя задача - я инфу дал. А так, эвристика :
ищем последнее boot_common.pys , несколько мусорных байт
и любимый 0х63 - это начало нашего кода. А вообще-то декомпилер должен и бут-код
декомпилить. На всякий случай - вот препарированный фук.
Сигнатура в 2.2 - другая. Здесь для 2.3
+++++++++++++++++++++
Кстати, не сообразил, что могу запустить. Пашет "кролик".

Traceback (most recent call last):
File "app.py", line 10, in ?
ImportError: No module named qsim.model.qlogging




Ранг: 50.7 (постоянный)
Активность: 0.050
Статус: Участник

Создано: 20 апреля 2006 12:54
· Личное сообщение · #10

Оки ... сеньк за research ;) Буду копаться



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 21 апреля 2006 11:16 · Поправил: tundra37
· Личное сообщение · #11

Все-таки дурной этот питон. Нашел в нем функцию dis() и она мою обрезанную версию не хочет.
Сделал вместе с boot-code - выдает что-то осмысленное, но без операндов.
Зато понял, что хранится в 5-ти байтах, перед boot-code - это длина в строках boot-code.
Т.е. можно декомпилировать все и потом отсечь boot-code.
Новый "кролик" прилагается.
+++++++++++++++++++++++++
Нашел причину. Jump-ы в питоне делаются по номерам строк и функция append тупо их
сдвигает. Поэтому без boot-code низзя :

File "dis1.py", line 188, in findlabels
oparg = ord(code[i]) + ord(code[i+1])*256
IndexError: string index out of range

Да, забыл конечно - dys.py компилит и потом вызывает dis(code). Я сделал dis1.py ,
убрав строчку code = compile(source, fn, "exec")
Вообщем - этот кролик будет жить.

a0de_21.04.2006_CRACKLAB.rU.tgz - fuck.zip



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 25 апреля 2006 19:18
· Личное сообщение · #12

tundra37 пишет:
Вообщем - этот кролик будет жить.

Оказалось, что первый вариант лучше. Поставил я декомпилер в Линуксе и нормальный текст программы выдался. Т.к. атач уже испарился - повторяю.

c72d_25.04.2006_CRACKLAB.rU.tgz - fuck0.zip


 eXeL@B —› Основной форум —› py2exe или ???( продолжение закрытой темы rC)
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати