{"id":672,"date":"2011-01-06T20:21:42","date_gmt":"2011-01-06T18:21:42","guid":{"rendered":"http:\/\/www.binaryvision.org.il\/?p=672"},"modified":"2011-01-06T20:54:18","modified_gmt":"2011-01-06T18:54:18","slug":"reversing-python-bytecode","status":"publish","type":"post","link":"https:\/\/www.binaryvision.co.il\/2011\/01\/reversing-python-bytecode\/","title":{"rendered":"Reversing Python Bytecode"},"content":{"rendered":"

\u05de\u05d1\u05d5\u05d0<\/h2>\n

\u05de\u05ea\u05d7\u05d9\u05dc \u05dc\u05d4\u05d9\u05d5\u05ea \u05e0\u05e4\u05d5\u05e5 \u05e0\u05d5\u05e9\u05d0 \u05d4\u05e9\u05d9\u05de\u05d5\u05e9 \u05d1\u05e9\u05e4\u05d5\u05ea \u05e1\u05e7\u05e8\u05d9\u05e4\u05d8 \u05dc\u05db\u05ea\u05d9\u05d1\u05ea \u05e7\u05d1\u05e6\u05d9 EXE.
\n\u05d1\u05de\u05d9\u05d5\u05d7\u05d3 \u05d1\u05d7\u05d1\u05e8\u05d5\u05ea Outsourcing \u05e9\u05db\u05dc \u05d4\u05de\u05d8\u05e8\u05d4 \u05e9\u05dc\u05d4\u05df \u05dc\u05db\u05ea\u05d5\u05d1 \u05de\u05d4\u05e8 \u05d5\u05e7\u05dc.
\n\u05d0\u05d7\u05e8\u05d9 \u05e9\u05d4\u05d7\u05d1\u05e8\u05d4 \u05de\u05e1\u05d9\u05d9\u05de\u05ea \u05dc\u05db\u05ea\u05d5\u05d1, \u05de\u05d1\u05d9\u05d0\u05d4 \u05de\u05d5\u05e6\u05e8, \u05e6\u05e8\u05d9\u05da \u05dc\u05d4\u05d1\u05d9\u05df \u05de\u05d4 \u05dc\u05e2\u05d6\u05d0\u05d6\u05dc \u05d4\u05dd \u05e2\u05e9\u05d5 \u05e9\u05dd.
\nReversing \u05e7\u05dc\u05d0\u05e1\u05d9 \u05dc\u05e7\u05d5\u05d1\u05e5 EXE \u05e9\u05d4\u05d5\u05d0 \u05d1\u05e2\u05e6\u05dd Py2EXE, \u05dc\u05d0 \u05db\u05dc\u05db\u05da \u05e2\u05d5\u05d1\u05d3.
\n\u05d0\u05d6 \u05de\u05d4 \u05e2\u05d5\u05e9\u05d9\u05dd?<\/p>\n

\u05de\u05d5\u05d3\u05d5\u05dc Dis<\/h2>\n

\u05de\u05d7\u05d9\u05e4\u05d5\u05e9\u05d9\u05dd \u05d1\u05d0\u05d9\u05e0\u05d8\u05e8\u05e0\u05d8 \u05d3\u05d1\u05e8 \u05e8\u05d0\u05e9\u05d5\u05df \u05e9\u05e0\u05ea\u05e7\u05dc\u05ea\u05d9 \u05d1\u05d5,
\n\u05d6\u05d4 \u05e9\u05d9\u05e9 \u05de\u05d5\u05d3\u05d5\u05dc \u05de\u05d5\u05d1\u05e0\u05d4 \u05d1Python \u05dc\u05d4\u05e6\u05d2\u05ea \u05d4Bytecode \u05d1\u05e6\u05d5\u05e8\u05d4 \u05d9\u05d5\u05ea\u05e8 \u05d1\u05e8\u05d5\u05e8\u05d4, \u05d5\u05e9\u05de\u05d5 Dis.
\nhttp:\/\/docs.python.org\/library\/dis.html<\/a>
\n\u05d4\u05d5\u05d0 \u05d9\u05d5\u05d3\u05e2 \u05dc\u05e7\u05d1\u05dc code object, \u05d5\u05dc\u05e4\u05ea\u05d5\u05d7 \u05d0\u05d5\u05ea\u05d5 \u05dc\u05de\u05e9\u05d4\u05d5 \u05e7\u05e6\u05ea \u05d9\u05d5\u05ea\u05e8 \u05e7\u05e8\u05d9\u05d0.
\n\u05d6\u05d4 \u05dc\u05d0 \u05e0\u05d5\u05ea\u05df \u05d0\u05ea \u05d4\u05de\u05e7\u05d5\u05e8, \u05d0\u05d1\u05dc \u05d6\u05d4 \u05de\u05e4\u05ea\u05d9\u05e2 \u05db\u05de\u05d4 \u05d6\u05d4 \u05e7\u05e8\u05d5\u05d1.
\n\u05d1\u05d5\u05d0\u05d5 \u05e0\u05e0\u05e1\u05d4:<\/p>\n

\ndef test():\n a = 5\n b = 6\n if a == 5:\n  b = 7\n return b\n<\/pre>\n

\u05e2\u05db\u05e9\u05d9\u05d5 \u05e0\u05e4\u05e8\u05e7 \u05d0\u05ea \u05d6\u05d4 \u05d1\u05e2\u05d6\u05e8\u05ea Dis<\/p>\n

\n>>> import dis\n>>> dis.dis(test.func_code)\n 2           0 LOAD_CONST               1 (5)\n           3 STORE_FAST               0 (a)\n\n 3           6 LOAD_CONST               2 (6)\n           9 STORE_FAST               1 (b)\n\n 4          12 LOAD_FAST                0 (a)\n          15 LOAD_CONST               1 (5)\n          18 COMPARE_OP               2 (==)\n          21 JUMP_IF_FALSE           10 (to 34)\n          24 POP_TOP\n\n 5          25 LOAD_CONST               3 (7)\n          28 STORE_FAST               1 (b)\n          31 JUMP_FORWARD             1 (to 35)\n      >>   34 POP_TOP\n\n 6     >>   35 LOAD_FAST                1 (b)\n          38 RETURN_VALUE\n<\/pre>\n

\u05d6\u05d4 \u05de\u05d3\u05d4\u05d9\u05dd \u05e2\u05d3 \u05db\u05de\u05d4 \u05d6\u05d4 \u05de\u05d3\u05d5\u05d9\u05d9\u05e7, \u05db\u05d5\u05dc\u05dc \u05e9\u05de\u05d5\u05ea \u05de\u05e9\u05ea\u05e0\u05d9\u05dd \u05d5\u05d4\u05db\u05dc.
\n\u05d4\u05de\u05e1\u05e4\u05e8 \u05d4\u05e8\u05d0\u05e9\u05d5\u05df \u05d6\u05d4 \u05de\u05e1\u05e4\u05e8 \u05d4\u05e9\u05d5\u05e8\u05d4 \u05d1\u05e7\u05d5\u05d3 \u05de\u05e7\u05d5\u05e8…
\n\u05d4\u05de\u05e1\u05e4\u05e8 \u05e9\u05de\u05d5\u05e4\u05d9\u05e2 \u05dc\u05e4\u05e0\u05d9 \u05db\u05dc \u05de\u05d9\u05dc\u05d4 \u05d6\u05d4 \u05de\u05e1\u05e4\u05e8 \u05d4Byte
\n\u05d4\u05de\u05d9\u05dc\u05d4, \u05d6\u05d4 \u05d4\u05e4\u05e2\u05d5\u05dc\u05d4 (\u05dc\u05d3\u05d5\u05d2\u05de\u05d4 LOAD_CONST)
\n\u05d4\u05de\u05e1\u05e4\u05e8 \u05d0\u05d7\u05e8\u05d9\u05d4 \u05d6\u05d4 \u05e4\u05e8\u05de\u05d8\u05e8, \u05d5\u05d1\u05e1\u05d5\u05d2\u05e8\u05d9\u05d9\u05dd \u05d6\u05d4 \u05d4\u05e4\u05d9\u05db\u05ea \u05d4\u05e4\u05e8\u05de\u05d8\u05e8 \u05dc\u05de\u05e9\u05d4\u05d5 \u05de\u05e9\u05de\u05e2\u05d5\u05ea\u05d9 \u05d0\u05dd \u05d0\u05e4\u05e9\u05e8.<\/p>\n

\u05e0\u05e2\u05d1\u05d5\u05e8 \u05dc\u05e4\u05d9 \u05d4\u05e1\u05d3\u05e8, \u05d5\u05e0\u05e8\u05d0\u05d4 \u05db\u05de\u05d4 \u05e7\u05dc \u05d6\u05d4 \u05dc\u05d1\u05e0\u05d5\u05ea \u05d7\u05d6\u05e8\u05d4 \u05d0\u05ea \u05d4\u05e7\u05d5\u05d3:
\n\u05e9\u05d5\u05e8\u05d4 2, LOAD_CONST \u05d8\u05d5\u05e2\u05df \u05e7\u05d1\u05d5\u05e2 \u05dc\u05de\u05d7\u05e1\u05e0\u05d9\u05ea, \u05d4\u05e7\u05d1\u05d5\u05e2 \u05d4\u05d5\u05d0 \u05d1\u05d0\u05d9\u05e0\u05d3\u05e7\u05e1 1, \u05d0\u05d1\u05dc \u05d4\u05e2\u05e8\u05da \u05e9\u05dc\u05d5 \u05d4\u05d5\u05d0 5.
\n\u05d5\u05d0\u05d6 STORE_FAST \u05e9\u05d5\u05de\u05e8 \u05d0\u05ea \u05d4\u05e2\u05e8\u05da \u05de\u05d4\u05de\u05d7\u05e1\u05e0\u05d9\u05ea \u05dc\u05ea\u05d5\u05da \u05d4\u05de\u05e9\u05ea\u05e0\u05d4 \u05d1\u05d0\u05d9\u05e0\u05d3\u05e7\u05e1 0, \u05e9\u05e9\u05de\u05d5 a.
\n\u05de\u05d4 \u05db\u05dc \u05e4\u05e2\u05d5\u05dc\u05d4 \u05e2\u05d5\u05e9\u05d4 \u05de\u05ea\u05d5\u05e2\u05d3 \u05d4\u05d9\u05d8\u05d1 \u05d1\u05e7\u05d9\u05e9\u05d5\u05e8 \u05dc\u05de\u05d5\u05d3\u05d5\u05dc DIS, \u05d5\u05de\u05d4 \u05e9\u05e0\u05e9\u05d0\u05e8 \u05d6\u05d4 \u05dc\u05d4\u05d1\u05d9\u05df \u05e9\u05d4\u05e4\u05e7\u05d5\u05d3\u05d4 \u05d4\u05d9\u05d0:<\/p>\n

\na = 5\n<\/pre>\n

\u05e9\u05d5\u05e8\u05d4 3, \u05d0\u05d5\u05ea\u05d5 \u05d3\u05d1\u05e8, \u05e0\u05e2\u05d1\u05d5\u05e8 \u05dc\u05e9\u05d5\u05e8\u05d4 4.
\n\u05d8\u05d5\u05e2\u05e0\u05d9\u05dd \u05d0\u05ea a \u05dc\u05de\u05d7\u05e1\u05e0\u05d9\u05ea, \u05d8\u05d5\u05e2\u05e0\u05d9\u05dd 5, \u05d5\u05e2\u05d5\u05e9\u05d9\u05dd COMPARE_OP \u05e2\u05dd ==.
\n\u05d4\u05e4\u05e2\u05d5\u05dc\u05d4 \u05de\u05e9\u05d5\u05d5\u05d4 \u05d1\u05d9\u05df \u05d4\u05e9\u05e0\u05d9\u05d9\u05dd \u05d4\u05d0\u05d7\u05e8\u05d5\u05e0\u05d9\u05dd \u05d1\u05de\u05d7\u05e1\u05e0\u05d9\u05ea \u05d1\u05de\u05d7\u05d6\u05d9\u05e8\u05d4 \u05d0\u05ea \u05d4\u05ea\u05e9\u05d5\u05d1\u05d4 \u05dc\u05de\u05d7\u05e1\u05e0\u05d9\u05ea.
\n\u05e2\u05d3 \u05db\u05d4 \u05d9\u05e9 \u05dc\u05e0\u05d5 a == 5.
\nJUMP_IF_FALSE \u05d1\u05d5\u05d3\u05e7 \u05d0\u05ea \u05d4\u05e2\u05e8\u05da \u05d4\u05d0\u05d7\u05e8\u05d5\u05df \u05d1\u05de\u05d7\u05e1\u05e0\u05d9\u05ea, \u05d5\u05d0\u05dd \u05d4\u05d5\u05d0 FALSE \u05e7\u05d5\u05d1\u05e5 \u05dcByte 34.
\nPOP_TOP \u05e9\u05d5\u05dc\u05e3 \u05d0\u05ea \u05d4\u05e2\u05e8\u05da \u05d4\u05d0\u05d7\u05e8\u05d5\u05df \u05d1\u05de\u05d7\u05e1\u05e0\u05d9\u05ea.
\n\u05d0\u05d6 \u05d0\u05dd \u05e0\u05e8\u05e6\u05d4 \u05dc\u05e9\u05d7\u05d6\u05e8 \u05d0\u05ea \u05d6\u05d4, \u05e6\u05e8\u05d9\u05da \u05dc\u05d4\u05d1\u05d9\u05df \u05e9\u05d1\u05de\u05e7\u05e8\u05d4 \u05e9\u05d4\u05e2\u05e8\u05da \u05d4\u05d5\u05d0 \u05e9\u05e7\u05e8, \u05d4\u05d5\u05d0 \u05de\u05d3\u05dc\u05d2 _\u05de\u05e2\u05dc_ \u05e7\u05d8\u05e2 \u05d4\u05e7\u05d5\u05d3 \u05d4\u05d1\u05d0, \u05d6"\u05d0 \u05d0\u05dd \u05e0\u05e8\u05e6\u05d4 \u05dc\u05e8\u05e9\u05d5\u05dd \u05d0\u05ea \u05d6\u05d4 \u05e8\u05e6\u05d5\u05e3, \u05d0\u05d6 \u05d1\u05de\u05e7\u05e8\u05d4 \u05e9\u05dc \u05d0\u05de\u05ea, \u05d4\u05d5\u05d0 \u05e0\u05db\u05e0\u05e1 \u05dc\u05e7\u05d8\u05e2 \u05e7\u05d5\u05d3, \u05d0\u05d6 \u05d4\u05ea\u05e0\u05d0\u05d9 \u05e0\u05e8\u05d0\u05d4 \u05db\u05da:<\/p>\n

\n if a == 5:\n     #... continue here ...\n #... if false jump to here ...\n<\/pre>\n

\u05d5\u05d0\u05e4\u05e9\u05e8 \u05dc\u05d4\u05de\u05e9\u05d9\u05da \u05db\u05da \u05d4\u05dc\u05d0\u05d4 \u05e2\u05d3 \u05e9\u05d1\u05d5\u05e0\u05d9\u05dd \u05de\u05d7\u05d3\u05e9 \u05d0\u05ea \u05d4\u05e4\u05d5\u05e0\u05e7\u05e6\u05d9\u05d9\u05d4…<\/p>\n

py2exe<\/h2>\n

\u05d4\u05d9\u05d9\u05e6\u05d5\u05e8 \u05e9\u05e7\u05d5\u05e8\u05d0\u05d9\u05dd \u05dc\u05d5 py2exe \u05d0\u05d5\u05e8\u05d6 \u05d0\u05ea \u05e1\u05e7\u05e8\u05d9\u05e4\u05d8 \u05d4Python, \u05db\u05dc \u05e1\u05e4\u05e8\u05d9\u05d5\u05ea, \u05d5\u05db\u05dc \u05d3\u05d1\u05e8 \u05e9\u05e6\u05e8\u05d9\u05da \u05db\u05d3\u05d9 \u05dc\u05d4\u05e8\u05d9\u05e5 \u05d0\u05d5\u05ea\u05df, \u05dc\u05ea\u05d5\u05da EXE \u05d0\u05d7\u05d3.
\n\u05d5\u05d4\u05d5\u05d0 \u05e2\u05d5\u05d6\u05d4 \u05d0\u05ea \u05d6\u05d4 \u05d1\u05e6\u05d5\u05e8\u05d4 \u05d4\u05d1\u05d0\u05d4:
\n\u05db\u05dc \u05d4DLL\u05d9\u05dd, \u05d5\u05db\u05dc \u05d4\u05e1\u05e4\u05e8\u05d9\u05d5\u05ea \u05e9\u05e2\u05d5\u05e9\u05d9\u05dd \u05dc\u05d4\u05df Import, \u05d4\u05d5\u05d0 \u05de\u05e7\u05de\u05e4\u05dc \u05dcBytecode, \u05d5\u05e9\u05dd \u05d1ZIP, \u05d1\u05ea\u05d5\u05da \u05d4EXE.
\n\u05e0\u05d9\u05ea\u05df \u05dc\u05d7\u05dc\u05e5 \u05d0\u05d5\u05ea\u05d5 \u05de\u05de\u05e9 \u05d1\u05e7\u05dc\u05d5\u05ea \u05e2"\u05d9 7Zip \u05e9\u05de\u05d0\u05ea\u05e8 \u05d0\u05d5\u05ea\u05d5, \u05d5\u05e4\u05e9\u05d5\u05d8 \u05e0\u05d5\u05ea\u05df \u05dc\u05d4\u05d5\u05e6\u05d9\u05d0 \u05de\u05ea\u05d5\u05db\u05d5 \u05e7\u05d1\u05e6\u05d9\u05dd.
\n\u05e2\u05db\u05e9\u05d9\u05d5 \u05e6\u05e8\u05d9\u05da, \u05e8\u05e7 \u05dc\u05de\u05e6\u05d5\u05d0 \u05d0\u05ea \u05d4\u05e1\u05e7\u05e8\u05d9\u05e4\u05d8 \u05d4\u05e8\u05d0\u05e9\u05d9.
\n\u05d4\u05d5\u05d0 \u05e0\u05e9\u05de\u05e8 \u05dbResource \u05d1EXE, \u05d0\u05e4\u05e9\u05e8 \u05d1\u05e7\u05dc\u05d5\u05ea \u05dc\u05e9\u05dc\u05d5\u05e3 \u05d0\u05d5\u05ea\u05d5 \u05e2\u05dd Visual Studio.
\n\u05e4\u05d5\u05ea\u05d7\u05d9\u05dd EXE \u05e2\u05dd \u05d4\u05ea\u05d5\u05db\u05e0\u05d4, \u05d5\u05d4\u05d5\u05d0 \u05de\u05e6\u05d9\u05d2 \u05d0\u05ea \u05db\u05dc \u05d4Resources, \u05d0\u05d7\u05d3 \u05de\u05d4\u05dd \u05d6\u05d4 \u05d4\u05e7\u05d5\u05d3 \u05d4\u05de\u05e7\u05d5\u05de\u05e4\u05dc.<\/p>\n

\u05e8\u05e7 \u05de\u05e9\u05d4\u05d5 \u05e7\u05d8\u05df<\/h2>\n

\u05e7\u05d5\u05d1\u05e5 .pyc \u05de\u05e9\u05d5\u05d9\u05d9\u05da \u05dcPython \u05e9\u05d0\u05d9\u05ea\u05d5 \u05d1\u05e0\u05d5 \u05d0\u05d5\u05ea\u05d5, \u05d5\u05d6\u05d4 \u05dc\u05d0 \u05e1\u05ea\u05dd, \u05db\u05d9 \u05d4Bytecode \u05de\u05e9\u05ea\u05e0\u05d4.
\n\u05db\u05dc \u05d4\u05e7\u05d1\u05e6\u05d9\u05dd \u05e9\u05e0\u05de\u05e6\u05d0\u05d9\u05dd \u05d1ZIP \u05e0\u05d9\u05ea\u05df \u05dc\u05e2\u05e9\u05d5\u05ea \u05dc\u05d4\u05df import \u05db\u05dc \u05e2\u05d5\u05d3 \u05d4\u05d2\u05e8\u05e1\u05d4 \u05e9\u05dc \u05d4\u05e4\u05d9\u05d9\u05d8\u05d5\u05df \u05ea\u05d5\u05d0\u05de\u05ea,
\n\u05d5\u05d0\u05d7\u05e8\u05d9 \u05d6\u05d4 \u05d0\u05e4\u05e9\u05e8 \u05dc\u05d4\u05e8\u05d9\u05e5 dis.dis \u05e2\u05dc \u05d4\u05de\u05d5\u05d3\u05d5\u05dc \u05db\u05d5\u05dc\u05d5. (\u05d0\u05e4\u05e9\u05e8 \u05d2\u05dd \u05e2\u05dc \u05e4\u05d5\u05e0\u05e7\u05e6\u05d9\u05d5\u05ea \u05d1\u05e0\u05e4\u05e8\u05d3).
\n\u05e2\u05dd \u05d4Resource \u05d4\u05e2\u05e0\u05d9\u05d9\u05df \u05e7\u05e6\u05ea \u05d9\u05d5\u05ea\u05e8 \u05d1\u05e2\u05d9\u05d9\u05ea\u05d9, \u05db\u05d9 \u05d4\u05d5\u05d0 \u05dc\u05d0 \u05d1\u05d3\u05d9\u05d5\u05e7 Library, \u05d0\u05dc\u05d0 Marshalled, \u05d1\u05e2\u05d6\u05e8\u05ea \u05de\u05d5\u05d3\u05d5\u05dc marshal.
\n\u05d1\u05e9\u05d9\u05de\u05d5\u05e9 \u05d1\u05de\u05d5\u05d3\u05d5\u05dc \u05d0\u05e4\u05e9\u05e8 \u05dc\u05e9\u05dc\u05d5\u05e3 \u05d0\u05ea \u05d4Code Object \u05d4\u05e8\u05d0\u05e9\u05d9, \u05d5\u05de\u05de\u05e0\u05d5 \u05dc\u05de\u05e6\u05d5\u05d0 \u05db\u05dc Code Object \u05d0\u05d7\u05e8, \u05d5\u05dc\u05d4\u05e2\u05d1\u05d9\u05e8 \u05d0\u05d5\u05ea\u05d5 \u05dcDIS \u05d2\u05dd \u05db\u05df.<\/p>\n

\u05e4\u05e8\u05d5\u05d9\u05e7\u05d8<\/h2>\n

\u05d7\u05e9\u05d1\u05ea\u05d9 \u05dc\u05e2\u05e9\u05d5\u05ea Python Decompiler,
\n\u05d6\u05d4 \u05de\u05ea\u05d7\u05d9\u05dc \u05dc\u05d4\u05d9\u05d5\u05ea \u05e7\u05e9\u05d4 \u05db\u05e9\u05de\u05d2\u05d9\u05e2\u05d9\u05dd \u05dc\u05ea\u05e0\u05d0\u05d9\u05dd \u05de\u05e1\u05d5\u05d1\u05db\u05d9\u05dd, \u05d5\u05dc\u05d5\u05dc\u05d0\u05d5\u05ea \u05e2\u05dd \u05ea\u05e0\u05d0\u05d9\u05dd \u05de\u05e1\u05d5\u05d1\u05db\u05d9\u05dd \u05d1\u05ea\u05d5\u05db\u05df.
\n\u05d0\u05e0\u05d9 \u05d7\u05d5\u05e9\u05d1 \u05e9\u05d6\u05d4 \u05d0\u05e4\u05e9\u05e8\u05d9 \u05dc\u05d7\u05d6\u05d5\u05e8 \u05dc\u05e7\u05d5\u05d3 \u05de\u05e7\u05d5\u05e8 \u05d1\u05e6\u05d5\u05e8\u05d4 \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9\u05ea, \u05de\u05d4 \u05d3\u05e2\u05ea\u05db\u05dd?
\n(\u05d9\u05e9 \u05db\u05de\u05d4 \u05e0\u05e1\u05d9\u05d5\u05e0\u05d5\u05ea \u05dcDecompiler \u05d1\u05d0\u05d9\u05e0\u05d0\u05e8\u05e0\u05d8, \u05dc\u05d0 \u05e8\u05d0\u05d9\u05ea\u05d9 \u05d0\u05d7\u05d3 \u05e0\u05d5\u05e8\u05de\u05dc\u05d9…)<\/p>\n","protected":false},"excerpt":{"rendered":"

\u05de\u05d1\u05d5\u05d0 \u05de\u05ea\u05d7\u05d9\u05dc \u05dc\u05d4\u05d9\u05d5\u05ea \u05e0\u05e4\u05d5\u05e5 \u05e0\u05d5\u05e9\u05d0 \u05d4\u05e9\u05d9\u05de\u05d5\u05e9 \u05d1\u05e9\u05e4\u05d5\u05ea \u05e1\u05e7\u05e8\u05d9\u05e4\u05d8 \u05dc\u05db\u05ea\u05d9\u05d1\u05ea \u05e7\u05d1\u05e6\u05d9 EXE. \u05d1\u05de\u05d9\u05d5\u05d7\u05d3 \u05d1\u05d7\u05d1\u05e8\u05d5\u05ea Outsourcing \u05e9\u05db\u05dc \u05d4\u05de\u05d8\u05e8\u05d4 \u05e9\u05dc\u05d4\u05df \u05dc\u05db\u05ea\u05d5\u05d1 \u05de\u05d4\u05e8 \u05d5\u05e7\u05dc. \u05d0\u05d7\u05e8\u05d9 \u05e9\u05d4\u05d7\u05d1\u05e8\u05d4 \u05de\u05e1\u05d9\u05d9\u05de\u05ea \u05dc\u05db\u05ea\u05d5\u05d1, \u05de\u05d1\u05d9\u05d0\u05d4 \u05de\u05d5\u05e6\u05e8, \u05e6\u05e8\u05d9\u05da \u05dc\u05d4\u05d1\u05d9\u05df \u05de\u05d4 \u05dc\u05e2\u05d6\u05d0\u05d6\u05dc \u05d4\u05dd \u05e2\u05e9\u05d5 \u05e9\u05dd. Reversing \u05e7\u05dc\u05d0\u05e1\u05d9 \u05dc\u05e7\u05d5\u05d1\u05e5 EXE \u05e9\u05d4\u05d5\u05d0 \u05d1\u05e2\u05e6\u05dd Py2EXE, \u05dc\u05d0 \u05db\u05dc\u05db\u05da \u05e2\u05d5\u05d1\u05d3. \u05d0\u05d6 \u05de\u05d4 \u05e2\u05d5\u05e9\u05d9\u05dd? \u05de\u05d5\u05d3\u05d5\u05dc Dis \u05de\u05d7\u05d9\u05e4\u05d5\u05e9\u05d9\u05dd \u05d1\u05d0\u05d9\u05e0\u05d8\u05e8\u05e0\u05d8 \u05d3\u05d1\u05e8 \u05e8\u05d0\u05e9\u05d5\u05df \u05e9\u05e0\u05ea\u05e7\u05dc\u05ea\u05d9 \u05d1\u05d5, \u05d6\u05d4 […]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[61,42,7,26],"_links":{"self":[{"href":"https:\/\/www.binaryvision.co.il\/wp-json\/wp\/v2\/posts\/672"}],"collection":[{"href":"https:\/\/www.binaryvision.co.il\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.binaryvision.co.il\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.binaryvision.co.il\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.binaryvision.co.il\/wp-json\/wp\/v2\/comments?post=672"}],"version-history":[{"count":24,"href":"https:\/\/www.binaryvision.co.il\/wp-json\/wp\/v2\/posts\/672\/revisions"}],"predecessor-version":[{"id":718,"href":"https:\/\/www.binaryvision.co.il\/wp-json\/wp\/v2\/posts\/672\/revisions\/718"}],"wp:attachment":[{"href":"https:\/\/www.binaryvision.co.il\/wp-json\/wp\/v2\/media?parent=672"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.binaryvision.co.il\/wp-json\/wp\/v2\/categories?post=672"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.binaryvision.co.il\/wp-json\/wp\/v2\/tags?post=672"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}