гуглю гуглю... ничо не вижу. спрошу тех кто не спит. под винду есть python decompiler? чтобы из pyc выплюнул DLL или что он там в память грузит?... pyd чтоли... забавно. есть вариант из pyc сделать читабальный питоний код? * оффтоп. неужто питон когда компилит .py -> делает .pyc -> компилит его в загружаемый в процесс DLL (.pyd) ? смотрю в олли на сей факт и балдею...
Decompyle, правда халявная версия уже не разрабатывается. А pyd - это питоновский плагин, пишутся такие штуки на С (см. C:\PythonNN\include).
В общем что не делаю всегда одну итуже ошибку выдаёт на разных дистрибах decompile Код (Text): Traceback (most recent call last): File "C:\tmp\decompile.py", line 1883, in <module> raise RuntimeError, 'unrecognised magic: %s' % `magic` RuntimeError: unrecognised magic: '\xb3\xf2\r\n' Может кто знает что оно хочет ..?? Это вот в этом куске кода в самом конце скрипта ... настроенно вроде всё правильно но не пашет ... Код (Text): else: out = open("C:\\TMP\\output.txt", "wt") try: stdout = sys.stdout sys.stdout = out if 1: import marshal m = open("C:\\TMP\\cgi.pyo", "rb") magic = m.read(4) if magic == '\207\306\015\012': version = (2, 0) elif magic == '\231N\015\012': version = (1, 5, 2) elif magic == '\x3B\xF2\r\n': version = (2, 3) else: raise RuntimeError, 'unrecognised magic: %s' % `magic` timestamp = m.read(4) s = m.read() code = marshal.loads(s) m.close() else: version = (2, 0) print f.func_code.co_names print f.func_code.co_varnames print f.func_code.co_consts code = f.func_code c = CodeCursor(code) d = Decompiler(version) d.decompile(c) lines = d.getsource(0) keys = lines.keys() keys.sort() for lineno in range(keys[0], keys[-1] + 1): print '%4d %s' % (lineno, lines.get(lineno, '')) print sys.stdout = stdout finally: out.close() sys.stderr.write('DONE\n')
crypto - спасибо ... блин до чего невнимательность доводит .. а веть в хексе специально pyo открывал сравнивал ... вроде сходилось После вышеобозначенного изменения decompile ~ 70кб выдаёт такую ошибку и ничего в выходной файл незаписывает ... Код (Text): Traceback (most recent call last): File "C:\tmp\decompiler.py", line 1896, in <module> d.decompile(c) File "C:\tmp\decompiler.py", line 291, in decompile lines = self.getsource(0) File "C:\tmp\decompiler.py", line 305, in getsource assert not self.stack, `self.stack` AssertionError: [Expression(-1, 24), Expression(-1, 24), Expression(-1, 24), Exp ression(-1, 24), Expression(-1, 24), Expression(-1, 24), Expression(-1, 24)] decompile ~ 50кб выдаёт ошибку Код (Text): Traceback (most recent call last): File "C:\tmp\0decompiler.py", line 1572, in <module> d.decompile(c) File "C:\tmp\0decompiler.py", line 242, in decompile apply(method, (code,)) File "C:\tmp\0decompiler.py", line 1098, in SETUP_EXCEPT self.addclause(lineno, "try:", d.getsource(1)) File "C:\tmp\0decompiler.py", line 253, in getsource assert not self.stack, `self.stack` AssertionError: [Expression(-1, 24)] И записывает в выходной файл следующее ... что на питон вроде непохоже ... больше на лог смахивает .. Код (Text): 31 0 LOAD_CONST 0 ('2.6') 3 STORE_NAME 0 (__version__) 37 6 LOAD_CONST 1 (-1) 9 LOAD_CONST 2 (('attrgetter',)) 12 IMPORT_NAME 1 (operator) 15 IMPORT_FROM 2 (attrgetter) 18 STORE_NAME 2 (attrgetter) 21 POP_TOP 38 22 LOAD_CONST 1 (-1) 25 LOAD_CONST 3 (None) 28 IMPORT_NAME 3 (sys) 31 STORE_NAME 3 (sys) 39 34 LOAD_CONST 1 (-1) 37 LOAD_CONST 3 (None) 40 IMPORT_NAME 4 (os) 43 STORE_NAME 4 (os) 40 46 LOAD_CONST 1 (-1) 49 LOAD_CONST 3 (None) 52 IMPORT_NAME 5 (urllib) 55 STORE_NAME 5 (urllib) 41 58 LOAD_CONST 1 (-1) 61 LOAD_CONST 3 (None) 64 IMPORT_NAME 6 (mimetools) 67 STORE_NAME 6 (mimetools) 42 70 LOAD_CONST 1 (-1) 73 LOAD_CONST 3 (None) 76 IMPORT_NAME 7 (rfc822) 79 STORE_NAME 7 (rfc822) 43 82 LOAD_CONST 1 (-1) 85 LOAD_CONST 3 (None) 88 IMPORT_NAME 8 (UserDict) 91 STORE_NAME 8 (UserDict) 44 94 SETUP_EXCEPT 20 (to 117) 45 97 LOAD_CONST 1 (-1) 100 LOAD_CONST 4 (('StringIO',)) 103 IMPORT_NAME 9 (cStringIO) 106 IMPORT_FROM 10 (StringIO) 109 STORE_NAME 10 (StringIO) 112 POP_TOP 113 POP_BLOCK 114 JUMP_FORWARD 35 (to 152) 46 >> 117 DUP_TOP 118 LOAD_NAME 11 (ImportError) 121 COMPARE_OP 10 (exception match) 124 JUMP_IF_FALSE 23 (to 150) 127 POP_TOP 128 POP_TOP 129 POP_TOP 130 POP_TOP 47 131 LOAD_CONST 1 (-1) 134 LOAD_CONST 4 (('StringIO',)) 137 IMPORT_NAME 10 (StringIO) 140 IMPORT_FROM 10 (StringIO) 143 STORE_NAME 10 (StringIO) 146 POP_TOP 147 JUMP_FORWARD 2 (to 152) >> 150 POP_TOP 151 END_FINALLY 49 >> 152 LOAD_CONST 5 ('MiniFieldStorage') 155 LOAD_CONST 6 ('FieldStorage') 158 LOAD_CONST 7 ('FormContentDict') 50 161 LOAD_CONST 8 ('SvFormContentDict') 164 LOAD_CONST 9 ('InterpFormContentDict') 167 LOAD_CONST 10 ('FormContent') 51 170 LOAD_CONST 11 ('parse') 173 LOAD_CONST 12 ('parse_qs') 176 LOAD_CONST 13 ('parse_qsl') 179 LOAD_CONST 14 ('parse_multipart') 52 182 LOAD_CONST 15 ('parse_header') 185 LOAD_CONST 16 ('print_exception') 188 LOAD_CONST 17 ('print_environ') 53 191 LOAD_CONST 18 ('print_form') 194 LOAD_CONST 19 ('print_directory') 197 LOAD_CONST 20 ('print_arguments') 54 200 LOAD_CONST 21 ('print_environ_usage') 203 LOAD_CONST 22 ('escape') 206 BUILD_LIST 18 209 STORE_NAME 12 (__all__) 59 212 LOAD_CONST 23 ('') 215 STORE_NAME 13 (logfile) 60 218 LOAD_NAME 14 (None) 221 STORE_GLOBAL 15 (logfp) 62 224 LOAD_CONST 24 (<code object initlog at 00AADBA8, file "cgi.pyo", line 62>) 227 MAKE_FUNCTION 0 230 STORE_NAME 16 (initlog) 97 233 LOAD_CONST 25 (<code object dolog at 00AAD020, file "cgi.pyo", line 97>) 236 MAKE_FUNCTION 0 239 STORE_NAME 17 (dolog) 101 242 LOAD_CONST 26 (<code object nolog at 00AAD140, file "cgi.pyo", line 101>) 245 MAKE_FUNCTION 0 248 STORE_NAME 18 (nolog) 105 251 LOAD_NAME 16 (initlog) 254 STORE_GLOBAL 19 (log) 113 257 LOAD_CONST 27 (0) 260 STORE_GLOBAL 20 (maxlen) 115 263 LOAD_NAME 14 (None) 266 LOAD_NAME 4 (os) 269 LOAD_ATTR 21 (environ) 272 LOAD_CONST 27 (0) 275 LOAD_CONST 27 (0) 278 LOAD_CONST 28 (<code object parse at 00AAD410, file "cgi.pyo", line 115>) 281 MAKE_FUNCTION 4 284 STORE_NAME 22 (parse) 168 287 LOAD_CONST 27 (0) 290 LOAD_CONST 27 (0) 293 LOAD_CONST 29 (<code object parse_qs at 00AADBF0, file "cgi.pyo", line 168>) 296 MAKE_FUNCTION 2 299 STORE_NAME 23 (parse_qs) 194 302 LOAD_CONST 27 (0) 305 LOAD_CONST 27 (0) 308 LOAD_CONST 30 (<code object parse_qsl at 00AADC80, file "cgi.pyo", line 194>) 311 MAKE_FUNCTION 2 314 STORE_NAME 24 (parse_qsl) 235 317 LOAD_CONST 31 (<code object parse_multipart at 00AADCC8, file "cgi.pyo", line 235>) 320 MAKE_FUNCTION 0 323 STORE_NAME 25 (parse_multipart) 333 326 LOAD_CONST 32 (<code object parse_header at 00AADDA0, file "cgi.pyo", line 333>) 329 MAKE_FUNCTION 0 332 STORE_NAME 26 (parse_header) 357 335 LOAD_CONST 5 ('MiniFieldStorage') 338 BUILD_TUPLE 0 341 LOAD_CONST 33 (<code object MiniFieldStorage at 00AADE78, file "cgi.pyo", line 357>) 344 MAKE_FUNCTION 0 347 CALL_FUNCTION 0 350 BUILD_CLASS 351 STORE_NAME 27 (MiniFieldStorage) 382 354 LOAD_CONST 6 ('FieldStorage') 357 BUILD_TUPLE 0 360 LOAD_CONST 34 (<code object FieldStorage at 00CBB608, file "cgi.pyo", line 382>) 363 MAKE_FUNCTION 0 366 CALL_FUNCTION 0 369 BUILD_CLASS 370 STORE_NAME 28 (FieldStorage) 797 373 LOAD_CONST 7 ('FormContentDict') 376 LOAD_NAME 8 (UserDict) 379 LOAD_ATTR 8 (UserDict) 382 BUILD_TUPLE 1 385 LOAD_CONST 35 (<code object FormContentDict at 00CBB6E0, file "cgi.pyo", line 797>) 388 MAKE_FUNCTION 0 391 CALL_FUNCTION 0 394 BUILD_CLASS 395 STORE_NAME 29 (FormContentDict) 815 398 LOAD_CONST 8 ('SvFormContentDict') 401 LOAD_NAME 29 (FormContentDict) 404 BUILD_TUPLE 1 407 LOAD_CONST 36 (<code object SvFormContentDict at 00CBB890, file "cgi.pyo", line 815>) 410 MAKE_FUNCTION 0 413 CALL_FUNCTION 0 416 BUILD_CLASS 417 STORE_NAME 30 (SvFormContentDict) 849 420 LOAD_CONST 9 ('InterpFormContentDict') 423 LOAD_NAME 30 (SvFormContentDict) 426 BUILD_TUPLE 1 429 LOAD_CONST 37 (<code object InterpFormContentDict at 00CBB9B0, file "cgi.pyo", line 849>) 432 MAKE_FUNCTION 0 435 CALL_FUNCTION 0 438 BUILD_CLASS 439 STORE_NAME 31 (InterpFormContentDict) 877 442 LOAD_CONST 10 ('FormContent') 445 LOAD_NAME 29 (FormContentDict) 448 BUILD_TUPLE 1 451 LOAD_CONST 38 (<code object FormContent at 00CBBBF0, file "cgi.pyo", line 877>) 454 MAKE_FUNCTION 0 457 CALL_FUNCTION 0 460 BUILD_CLASS 461 STORE_NAME 32 (FormContent) 903 464 LOAD_NAME 4 (os) 467 LOAD_ATTR 21 (environ) 470 LOAD_CONST 39 (<code object test at 00CBBDA0, file "cgi.pyo", line 903>) 473 MAKE_FUNCTION 1 476 STORE_NAME 33 (test) 942 479 LOAD_NAME 14 (None) 482 LOAD_NAME 14 (None) 485 LOAD_NAME 14 (None) 488 LOAD_NAME 14 (None) 491 LOAD_CONST 40 (<code object print_exception at 00CBBE30, file "cgi.pyo", line 942>) 494 MAKE_FUNCTION 4 497 STORE_NAME 34 (print_exception) 956 500 LOAD_NAME 4 (os) 503 LOAD_ATTR 21 (environ) 506 LOAD_CONST 41 (<code object print_environ at 00CBBE78, file "cgi.pyo", line 956>) 509 MAKE_FUNCTION 1 512 STORE_NAME 35 (print_environ) 968 515 LOAD_CONST 42 (<code object print_form at 00CBBF08, file "cgi.pyo", line 968>) 518 MAKE_FUNCTION 0 521 STORE_NAME 36 (print_form) 985 524 LOAD_CONST 43 (<code object print_directory at 00CBBF50, file "cgi.pyo", line 985>) 527 MAKE_FUNCTION 0 530 STORE_NAME 37 (print_directory) 997 533 LOAD_CONST 44 (<code object print_arguments at 00CBBF98, file "cgi.pyo", line 997>) 536 MAKE_FUNCTION 0 539 STORE_NAME 38 (print_arguments) 1004 542 LOAD_CONST 45 (<code object print_environ_usage at 00CBF020, file "cgi.pyo", line 1004>) 545 MAKE_FUNCTION 0 548 STORE_NAME 39 (print_environ_usage) 1051 551 LOAD_NAME 14 (None) 554 LOAD_CONST 46 (<code object escape at 00CBF068, file "cgi.pyo", line 1051>) 557 MAKE_FUNCTION 1 560 STORE_NAME 40 (escape) 1062 563 LOAD_CONST 47 ('^[ -~]{0,200}[!-~]$') 566 LOAD_CONST 48 (<code object valid_boundary at 00CBF0B0, file "cgi.pyo", line 1062>) 569 MAKE_FUNCTION 1 572 STORE_NAME 41 (valid_boundary) 1070 575 LOAD_NAME 42 (__name__) 578 LOAD_CONST 49 ('__main__') 581 COMPARE_OP 2 (==) 584 JUMP_IF_FALSE 11 (to 598) 587 POP_TOP 1071 588 LOAD_NAME 33 (test) 591 CALL_FUNCTION 0 594 POP_TOP 595 JUMP_FORWARD 1 (to 599) >> 598 POP_TOP >> 599 LOAD_CONST 3 (None) 602 RETURN_VALUE В чём на этот раз косяк неподскажеш ...??
Voodoo - ну наверно недорос я ещё до того чтобы мне такие вещи былибы очевидны ... ещё месяц назад кроме ollydbg скриптов к ней и распаковщиков ... невидел ... Ну вот жизня заставила питоном заняться ... у меня прога скомпилиная в exe ... распаковал тупо переименовав в zip а иам млин оказалась куча *.pyo и dll python вот и мучаюсь теперь... Тогда следующий вопрос .. и что с этим кодом делать ..?? нужно ещё чтото сделать чтобы в привычный вид скрипт привести ..?? я имею ввиду *.py файлы ...
o_nix А ты какие два декомпилятора запускал? Я тебе два кинул вроде, напомни мне их размеры. Там один вроде бы первоначальный (до моих правок), он может глюки давать, второй я дополнял под ЕВУ. По трэйсбэку вроде выходит, что во втором случае ты использовал первоначальный декомпилятор (ругнулся на конструкцию try). ЗЫ А чего ты никак не хочешь GUI-евый Питон закачать? С ним намного проще работать.
Да поставил я GUI питон ... такая иконка змиюка зелёная ... из удобств только редактор и возможность запустить пошагово... поскольку я к notepad++ привык то правлю в нём а запускаю через cmd команду из негоже чтобы ошибки видеть... Именно так как ты сказал ... твой тот что дополненый невыдаёт ничего кроме ошибки ... а оригинальный тот что был decompile.src тот выдаёт вышеозначенное ... Voodoo - говорит что выдаётся декомпиленный байт код ... тоесть pyc ... но веть pyo тоже байт код ... или это не так ..?? В любом случае русинтернет по поводу того что дальше делать с выдаваемым кодом молчит ... единственное обсуждение на wasm .. в первых строчках гугла .. Твоя добавка под eve - может это какраз она переделывает этот код в py ??? как её оптимизировать то там ..? чтото вроде задания смещений ?? как в распаковщике или как ..?? Общался с человеком создавшим сайт depython.net (team509.com) оттуда разработчик Китайцы кстате тоже через этотже скрипт раскомпилят ... отсылал им пару файлов распаковали без проблем ... Пытался с ними разговаривать по поводу настройки скрипта чтоб у меня работало и их недёргать но неответили .. толи мой googleанглийский плох толи нехотят наработками делится .. Я неуверен что вся защита в pyo файлах там ещё есть несколько pyd как к ним подступица ваше непредставляю ... Вопрос висит уже месяц ... нашёл прогу почти аналог но натолкнулся на asprotect 2.4 build 11 ... распаковывается aspr2.xx_unpacker_v1.14ae.osc но импорт сволоч не полностью восстанавливается ...неосилил .... даже имея валидный серийник (пробовал на другом продукте) слишком сложно для меня ... единственное что пока не пробовал это "по Внекрилов" с асспаком бороться ... но там пипец считай пол проги на асме переписать придётся ...
crypto в смысле - "гуевый питон"? О_о o_nix а разве этот байт-код для человека, знающего питон, не self-explaining? Оо
Voodoo - ты намекаеш на то что по этому коду можно изучать скрипт и переписывать заново или как ..?? Я лично к сожалению такими знаниями питона не обладаю ... хотя язык мне понравился ... даже коечто сам напрограмил уже ... но там детское всё ... типа форма для ввода которую я хотел прилепить к другому скрипту неимеющему интерфейса ... Интерфейс получился а вот слепить одно с другим пока нет ... Отправил crypto свой подопытный файл ... надеюсь у него получится раскомпиллер настроить...