рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ

рдЯреАрдПрд▓, рдбреЙред рд▓реЗрдЦ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд░рд┐рд╡рд░реНрд╕ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддрд╛ рд╣реИ, рдкрд╛рдпрдерди рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдЕрдкрд╕рд░рдг рдФрд░ рд╡рд┐рдШрдЯрди рддрдВрддреНрд░ рдХреЛ рд╣реИрдХ рдХрд░рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдбрд┐рдмрдЧрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдмрджрд▓рддрд╛ рд╣реИ рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рдореЛрдб рдореЗрдВ рдЫрд┐рдкреЗ рд╣реБрдП рд╣реИрдВред рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рдЙрдкрдпреБрдХреНрдд рдХреЛрдб рдФрд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЕрдВрдд рддрдХ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВред рдЗрд╕ рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рдХреЛрдб CPython 3.6 рджреБрднрд╛рд╖рд┐рдпрд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдирд╡реАрдирддрдо рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИред

рдкрд░рд┐рдЪрдп


рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдиреЗ рдореБрдЭреЗ рддреБрд░рдВрдд рдореЛрд╣рд┐рдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИред рдЕрд╡рдзрд╛рд░рдгрд╛ рдЕрднреА рднреА рднреНрд░рд╛рдордХ рд╕рд░рд▓ рд╣реИред рдпрд╣рд╛рдБ рдлрд╝реЛрд▓реНрдбрд░ рд╣реИред рд╡рд╣рд╛рдВ рдлрд╛рдЗрд▓реЗрдВ рд░рдЦ рджреАрдВред рдпрд╣ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рд╣реИред рджреВрд╕рд░реЗ рдЙрдкрдХрд░рдг рдкрд░ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд╝реЛрд▓реНрдбрд░ рдФрд░ рдлрд╝рд╛рдЗрд▓реЗрдВ рдЕрдм рд╡рд╣рд╛рдБ рднреА рджрд┐рдЦрд╛рдИ рджрд┐рдП!

рдЫрд┐рдкреА рд╣реБрдИ рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛ рдХрд╛рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореБрдЦреНрдп рдбреЗрд╕реНрдХрдЯреЙрдк рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо (рдУрдПрд╕ рдПрдХреНрд╕, рд▓рд┐рдирдХреНрд╕, рд╡рд┐рдВрдбреЛрдЬ) рдХреЗ рд▓рд┐рдП рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмрдирд╛рддреЗ рдФрд░ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рджреМрд░рд╛рди рдЖрдкрдХреЛ рдЬрд┐рди рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рд╡реЗ рдЧрд╛рдпрдм рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░, рд╡рд┐рднрд┐рдиреНрди рдореЛрдмрд╛рдЗрд▓ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рдорд░реНрдерди рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рдФрд░ рд╣рдо рдХреЗрд╡рд▓ рдЧреНрд░рд╛рд╣рдХ рдкрдХреНрд╖ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдмреИрдХрдПрдВрдб рдореЗрдВ рднреА рджрд┐рд▓рдЪрд╕реНрдкреА рд░рдЦрддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рдЖрдзреЗ рдЕрд░рдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдЕрддреНрдпрдзрд┐рдХ рднрд╛рд░реА рдХрд╛рд░реНрдпрднрд╛рд░ рдХреЗ рд╕рд╛рде рдЗрд╕ рддрд░рд╣ рдХреА рдорд╛рдкрдиреАрдпрддрд╛ рдФрд░ рдХрдо рд╡рд┐рд▓рдВрдмрддрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред

рдпрд╣ рдЗрди рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд╣реИ рдХрд┐ рдореИрдВ рд╣рдореЗрд╢рд╛ рдпрд╣ рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рдерд╛ рдХрд┐ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдХреИрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реБрдЖ рд╣реИред рд▓рдЧрднрдЧ рдЖрда рд╕рд╛рд▓ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдХрд┐ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдореИрдВрдиреЗ рд╣реЛрдЯрд▓ рдореЗрдВ рд░рд╣рддреЗ рд╣реБрдП рдЕрдЬреНрдЮрд╛рдд рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЗ рдкреНрд░рд╕рд╛рд░рдг рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ред рдЬрд╛рдВрдЪ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпрд╣ LanSync рдирд╛рдо рдХреЗ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдлреАрдЪрд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рддреЗрдЬреА рд╕реЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЕрдЧрд░ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдЙрд╕реА рд▓реИрди рдкрд░ рд╣реЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реИ рдЙрд╕реА рдлрд╝рд╛рдЗрд▓реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдореИрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рджреЗрдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдФрд░ рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдореИрдВрдиреЗ рд▓рдЧрднрдЧ рдкреВрд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдХреАред рдпрд╣ рдЕрдзреНрдпрдпрди рдХрднреА рдкреНрд░рдХрд╛рд╢рд┐рдд рдирд╣реАрдВ рд╣реБрдЖ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдХрднреА-рдХрднреА рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдиреЛрдЯреНрд╕ рд╕рд╛рдЭрд╛ рдХрд┐рдПред

рдЬрдм рд╣рдордиреЗ рдПрдирд╡рд┐рд▓ рд╡реЗрдВрдЪрд░реНрд╕ рдЦреЛрд▓рд╛, рддреЛ рдХреНрд░рд┐рд╕ рдФрд░ рдореИрдВрдиреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рднрдВрдбрд╛рд░рдг, рд╕рд╛рдЭрд╛рдХрд░рдг рдФрд░ рд╕рд╣рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдХрдИ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреАред рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ, рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдерд╛, рдФрд░ рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдкреБрд░рд╛рдиреЗ рдЕрдзреНрдпрдпрдиреЛрдВ рдХреЛ рдЦреЛрджрдиреЗ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдЙрдиреНрд╣реЗрдВ рдЬрд╛рдВрдЪрдиреЗ рдХрд╛ рдПрдХ рдФрд░ рдХрд╛рд░рдг рд╣реИред

рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдФрд░ рдбрд┐рдмреЛрдлрд┐рдХреЗрд╢рди


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рдЗрдВрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдФрд░ рдЬрд▓реНрджреА рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпрд╣ рдкрд╛рдпрдерди рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдХреНрдпреЛрдВрдХрд┐ рдкрд╛рдпрдерди рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХрд╛рдлреА рдЕрдиреБрдЬреНрдЮреЗрдп рд╣реИ, рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЬреИрд╕реА рдЕрдиреНрдп рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЕрдЬрдЧрд░ рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдФрд░ рд╡рд┐рддрд░рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдлрд┐рд░ рдореИрдВрдиреЗ рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рд╢реБрд░реВ рдХреА рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЙрд╕ рд╕рдордп, рдмрд╛рдпреЛрдЯреЗрдХ рд╡рд╛рд▓реА рдлрд╛рдЗрд▓реЗрдВ рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдмрд╛рдЗрдирд░реА рдХреЗ рд╕рд╛рде рд╕рдВрдпреБрдХреНрдд рдЬрд╝рд┐рдк рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдереАрдВред рдореБрдЦреНрдп рдмрд╛рдЗрдирд░реА рд╕рд┐рд░реНрдл рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рдкрд╛рдпрдерди рдЗрдВрдЯрд░рдкреНрд░рд┐рдЯрд░ рдерд╛ рдЬрд┐рд╕реЗ рдкрд╛рдпрдерди рдЖрдпрд╛рдд рддрдВрддреНрд░ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░рдХреЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдж рдХреЗ рдЖрдпрд╛рдд рдХреЙрд▓ рдХреЛ рдЗрд╕ рдмрд╛рдЗрдирд░реА рдореЗрдВ рдПрдХ рдЬрд╝рд┐рдк рдлрд╝рд╛рдЗрд▓ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдмреЗрд╢рдХ, рдЗрд╕ рдЬрд╝рд┐рдк рдХреЛ рдмрд╛рдЗрдирд░реА рд╕реЗ рдирд┐рдХрд╛рд▓рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧреА рдмрд┐рдирд╡реЙрдХ рдЯреВрд▓ рдЗрд╕реЗ рд╕рднреА рдмрд╛рдЗрдЯ-рд╕рдВрдХрд▓рд┐рдд .pyc рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред

рддрдм рдореИрдВ .pyc рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЛ рдирд╣реАрдВ рддреЛрдбрд╝ рд╕рдХрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ рдореИрдВрдиреЗ рдорд╛рдирдХ рдкрд╛рдпрдерди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рд╕рд╛рдорд╛рдиреНрдп рд╡рд╕реНрддреБ рдХреЛ рд▓рд┐рдпрд╛ рдФрд░ рдПрдХ рдмреИрдХрдбреЛрд░ рдХреЛ рдЕрдВрджрд░ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реБрдП рдЗрд╕реЗ recompiled рдХрд┐рдпрд╛ред рдЕрдм рдЪреВрдВрдХрд┐ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд▓реЛрдб рдХрд░ рд░рд╣рд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рджреБрднрд╛рд╖рд┐рдпрд╛ рдореЗрдВ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдкрд╛рдпрдерди рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдкрдиреЗ рджрдо рдкрд░ рдЦреЛрдЬрд╛ рдерд╛, рд▓реЗрдХрд┐рди 2012 рдореЗрдВ рд╣реИрдХ.рд▓реБ рдкрд░ рдПрдХ рдкреНрд░рд╕реНрддреБрддрд┐ рдореЗрдВ рдлреНрд▓реЛрд░рд┐рдпрди рд▓реЗрдбрд╛ рдФрд░ рдирд┐рдХреЛрд▓рд╕ рд░рдл рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╣реА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рдХреЛрдб рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдФрд░ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдиреЗ рдмрд╣реБрдд рдХреБрдЫ рдкреНрд░рдХрдЯ рдХрд┐рдпрд╛ рд╣реИред рдХреЛрдб рдиреЗ рдХрдИ рд╕реБрд░рдХреНрд╖рд╛рддреНрдордХ рддрд░рдХреАрдмреЛрдВ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд┐рд╕рд╕реЗ рдХреЛрдб рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдбрдВрдк рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЧрдпрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдирд┐рдпрдорд┐рдд CPython рджреБрднрд╛рд╖рд┐рдпрд╛ рдореЗрдВ, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрдХрд▓рд┐рдд рдмрд╛рдпрдЯреЗрдХреЛрдб рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг:

>>> def f(i=0): ... return i * i ... >>> f.__code__ <code object f at 0x109deb540, file "<stdin>", line 1> >>> f.__code__.co_code b'|\x00|\x00\x14\x00S\x00' >>> import dis >>> dis.dis(f) 2 0 LOAD_FAST 0 (i) 2 LOAD_FAST 0 (i) 4 BINARY_MULTIPLY 6 RETURN_VALUE >>> 

рд▓реЗрдХрд┐рди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ / codeobject.c рдХреЗ рд╕рдВрдХрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ , рдХреЛ_рдХреЛрдб рд╕рдВрдкрддреНрддрд┐ co_code рдЦреБрд▓реА рд╕реВрдЪреА рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ co_code ред рдпрд╣ рд╕рджрд╕реНрдп рд╕реВрдЪреА рдЖрдорддреМрд░ рдкрд░ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:

  static PyMemberDef code_memberlist[] = { ... {"co_flags", T_INT, OFF(co_flags), READONLY}, {"co_code", T_OBJECT, OFF(co_code), READONLY}, {"co_consts", T_OBJECT, OFF(co_consts), READONLY}, ... }; 

co_code рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЧрд╛рдпрдм рд╣реЛрдирд╛ рдЗрди рдХреЛрдб рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдбрдВрдк рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ, рдЬреИрд╕реЗ рдорд╛рдирдХ рдкрд╛рдпрдерди рдбрд┐рд╕реНрд╕реЗрдореНрдмрд▓рд░ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдЕрднреА рднреА рдХреЛрдб рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдбрдВрдк рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА рдЙрдиреНрд╣реЗрдВ рдЕрдкрдШрдЯрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред рдореБрдЭреЗ рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧрд╛ рдХрд┐ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рджреБрднрд╛рд╖рд┐рдпрд╛ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдСрдкрдХреЛрдб рдкрд╛рдпрдерди рдХреЗ рдорд╛рдирдХ рдСрдкрдХреЛрдб рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдореВрд▓ рдкрд╛рдЗрдерди рдмрд╛рдЗрдЯрдХреЛрдб рдореЗрдВ рдХреЛрдб рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдирдП рдСрдкрдХреЛрдб рдХреЛ рд╕рдордЭрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред

рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдУрдкреЛрдб рд░реАрдореИрдкрд┐рдВрдЧред рдЬрд╣рд╛рдБ рддрдХ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рдЗрд╕ рддрдХрдиреАрдХ рдХреЛ рд░рд┐рдЪ рд╕реНрдорд┐рде рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдбреЗрдлрдХреЙрди 18 рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрд╕ рдмрд╛рддрдЪреАрдд рдореЗрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕реНрдореГрддрд┐ рдореЗрдВ рд░рд┐рд╡рд░реНрд╕-рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдкрд╛рдпрдерди рдмрд╛рдЗрдЯрдХреЛрдб рдХреЗ рд▓рд┐рдП рдкрд╛рдЗрд░реЗрдХреНрдЯрд┐рдХ рдЙрдкрдХрд░рдг рднреА рджрд┐рдЦрд╛рдпрд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрдпрд╛рд░реЗрдЯрд┐рдХ рдХреЛрдб рдЦрд░рд╛рдм рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерд┐рдд рд╣реИ, рдФрд░ рдЙрдкрдХрд░рдг "рдкреБрд░рд╛рдиреЗ" рдкрд╛рдпрдерди 2.x рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рд░рд┐рдЪ рдХреЗ рд╕рд╛рде рдЖрдиреЗ рд╡рд╛рд▓реА рддрдХрдиреАрдХреЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрд╕рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддреНрдпрдзрд┐рдХ рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИред

рдУрдкрдХреЛрдб рдЕрдиреБрд╡рд╛рдж рд╡рд┐рдзрд┐ рдорд╛рдирдХ рдкрд╛рдпрдерди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рднреА рдХреЛрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд▓реЗ рдЬрд╛рддреА рд╣реИ рдФрд░ рдЙрдирдХреА рддреБрд▓рдирд╛ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдмрд╛рдЗрдирд░реА рд╕реЗ рдирд┐рдХрд╛рд▓реА рдЧрдИ рд╡рд╕реНрддреБрдУрдВ рд╕реЗ рдХрд░рддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, hashlib.pyc рдпрд╛ рд╕реЙрдХреЗрдЯ.рдкрд╛рдЗрдХ рд╕реЗ рдХреЛрдб рдСрдмреНрдЬреЗрдХреНрдЯ, рдЬреЛ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╣реИрдВред рдХрд╣рддреЗ рд╣реИрдВ, рдпрджрд┐ рд╣рд░ рдмрд╛рд░ 0x43 рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдХреЛрдб рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдкреБрдирд░реНрд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдзреАрд░реЗ-рдзреАрд░реЗ рдЕрдиреБрд╡рд╛рдж рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрди рдХреЛрдб рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдлрд┐рд░ рдкрд╛рдпрдерди рдбрд┐рдХрдореНрдкреЙрдЗрд▓рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдбрдВрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрднреА рднреА рд╕рд╣реА co_code рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╣реА рдЗрдВрдЯрд░рдкреНрд░рд┐рдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдХреНрд░рдордмрджреНрдз рдкреНрд░рд╛рд░реВрдк рдХреЛ рд╣реИрдХ рдХрд░рдирд╛ рд╣реИред рдкрд╛рдпрдерди рдореЗрдВ, рдХреНрд░рдордмрджреНрдзрддрд╛ рдХреЛ рдорд╛рд░реНрд╢рд▓рд┐рдВрдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ obfuscated рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдЪрд▓рд╛ред рдЬрдм рдЖрдИрдбреАрдП рдкреНрд░реЛ рдореЗрдВ рдмрд╛рдЗрдирд░реА рдХреЛ рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдореИрдВрдиреЗ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХрджрдо рдХреА рдЦреЛрдЬ рдХреАред рдЬрд╣рд╛рдБ рддрдХ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдХреБрдЫ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд╣рд▓реЗ рдЕрдкрдиреЗ рдмреНрд▓реЙрдЧ рдкрд░ рд╣реЗрдЧрди рдлреНрд░рд┐рдЪ рдереЗред рд╡рд╣рд╛рдБ рд╡рд╣ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИ (рдЬрдм рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдиреЗ рдкрд╛рдпрдерди 2.5 рд╕реЗ рдЕрдЬрдЧрд░ 2.7 рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛)ред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

  • рдПрдХ pyc рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдирдкреИрдХ рдХрд░рддреЗ рд╕рдордп, рдорд╛рд░реНрд╢рд▓рд┐рдВрдЧ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реЗрдбрд░ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рд╛рд░реВрдк рдХреЛ рдкреНрд░рд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреЗрд╡рд▓ рд╕реАрдкреАрдереЙрди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЫреЛрдбрд╝рдХрд░ред
  • рдкреНрд░рд╛рд░реВрдк рдЙрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдореЗрдВ рдПрдиреНрдХреЛрдбреЗрдб рд╣реИрдВред рдЯрд╛рдЗрдк True , False , floats , рдЖрджрд┐, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЙрдкрд░реЛрдХреНрдд рдкрд╛рдпрдерди code object , code object ред
  • code object рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп, рджреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рди рдкрд╣рд▓реЗ рдЗрдирдкреБрдЯ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкрдврд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВред
  • рдкрд╣рд▓рд╛ 32-рдмрд┐рдЯ random рдорд╛рди рд╣реИред
  • рджреВрд╕рд░рд╛ рдПрдХ 32-рдмрд┐рдЯ length рдореВрд▓реНрдп рд╣реИ рдЬреЛ рдХреНрд░рдордмрджреНрдз рдХреЛрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред
  • рдлрд┐рд░ rand рдФрд░ length рдорд╛рди рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЖрд░рдПрдирдЬреА рдлрд╝рдВрдХреНрд╢рди рдХреЛ rand рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ seed рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред
  • рдпрд╣ рдмреАрдЬ рдореЗрд░реНрд╕рди рднрдВрд╡рд░ рдореЗрдВ рдкрд╣реБрдВрдЪрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЪрд╛рд░ 32-рдмрд┐рдЯ рдорд╛рди рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред
  • рдПрдХ рд╕рд╛рде рд╕рдВрдпреБрдХреНрдд, рдпреЗ рдЪрд╛рд░ рдореВрд▓реНрдп рдХреНрд░рдордмрджреНрдз рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреБрдВрдЬреА рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рддрдм рдЯрд┐рдиреА рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рддрд╛ рд╣реИред

рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ, рдореИрдВрдиреЗ рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдкрд╛рдпрдерди рдЕрдирдорд░реНрд╢рд▓рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд▓рд┐рдЦреАред рдХреЛрдб рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдиреАрдЪреЗ рдХреЗ рдЯреБрдХрдбрд╝реЗ рдЬреИрд╕рд╛ рдХреБрдЫ рджрд┐рдЦрддрд╛ рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ pyc рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рдХреЛрдб рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реНрд╡рдпрдВ рдХреЛрдб рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдХрдХреНрд╖рд╛рдПрдВ, рдлрд╝рдВрдХреНрд╢рдВрд╕, рдпрд╛ рд▓реИрдореНрдмреНрдбрд╛ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдмрджрд▓реЗ рдореЗрдВ, рд╡реЗ рднреА рддрд░реАрдХреЗ, рдХрд╛рд░реНрдп рдпрд╛ рд▓рдВрдмреЛрджрд╛ рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпреЗ рд╕рднреА рдХреЛрдб рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рдиреАрдЪреЗ рд╣реИрдВ!

  def load_code(self): rand = self.r_long() length = self.r_long() seed = rng(rand, length) mt = MT19937(seed) key = [] for i in range(0, 4): key.append(mt.extract_number()) # take care of padding for size calculation sz = (length + 15) & ~0xf words = sz / 4 # convert data to list of dwords buf = self._read(sz) data = list(struct.unpack("<%dL" % words, buf)) # decrypt and convert back to stream of bytes data = tea.tea_decipher(data, key) data = struct.pack("<%dL" % words, *data) 

рдХреЛрдб рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдбреАрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмрд╛рдЗрдЯ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдХреЛрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрдВрдХреНрддрд┐ рд╕рдВрдЦреНрдпрд╛, рд╕реНрдерд┐рд░рд╛рдВрдХ рдФрд░ рдЕрдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИред рд╡рд╛рд╕реНрддрд╡рд┐рдХ bytecode co_code рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣реИред рдЬрдм рд╣рдордиреЗ рдУрдкрдХреЛрдб рдЕрдиреБрд╡рд╛рдж рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛, рддреЛ рд╣рдо рдорд╛рдирдХ рдЕрдЬрдЧрд░ рдХреЗ 3.6 рд╕рдордХрдХреНрд╖реЛрдВ рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдорд╛рдиреЛрдВ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдм рдХреЛрдб рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд╕рд╛рдорд╛рдиреНрдп рдкрд╛рдпрдерди 3.6 рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдбрд┐рдХрдореНрдкреЙрдЗрд▓рд░ рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкрд╛рдпрдерди рдбрд┐рдХрдореНрдкрд╛рдЗрд▓рд░реНрд╕ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рдЖрд░ред рдмрд░реНрдирд╕реНрдЯреАрди рдХреЗ рдЕрдирд╕рд╛рдЗрд▓ 6 рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдмрджреМрд▓рдд рдХрд╛рдлреА рд╡реГрджреНрдзрд┐ рд╣реБрдИ рд╣реИред рд╡рд┐рдШрдЯрди рдиреЗ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдкрд░рд┐рдгрд╛рдо рджрд┐рдпрд╛, рдФрд░ рдореИрдВ рдПрдХ рдЙрдкрдХрд░рдг рдореЗрдВ рд╕рдм рдХреБрдЫ рдПрдХ рд╕рд╛рде рд░рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ рдЬреЛ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЕрдкрдиреА рдХреНрд╖рдорддрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдмрд╕реЗ рдмреЗрд╣рддрд░ рдмрдирд╛рддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдЗрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдХреНрд▓реЛрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкрд░рд┐рдгрд╛рдо рдХреБрдЫ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:

  ...
     __main__ - рдЬрд╛рдирдХрд╛рд░реА - рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╡рд┐рдШрдЯрд┐рдд рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ / рдХреНрд▓рд╛рдЗрдВрдЯ / рд╕реБрд╡рд┐рдзрд╛рдПрдБ / Browse_search / __ init __ред pyc
     __main__ - рдЬрд╛рдирдХрд╛рд░реА - рдбрд┐рдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ, рдкреИрдЪрд┐рдВрдЧ рдФрд░ рд╡рд┐рдШрдЯрди _bootstrap_overrides.pyc
     __main__ - рдЬрд╛рдирдХрд╛рд░реА - рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╡рд┐рдШрдЯрд┐рдд _bootstrap_overrides.pyc
     __main__ - рдЬрд╛рдирдХрд╛рд░реА - рд╕рдВрд╕рд╛рдзрд┐рдд рдХреА рдЧрдИ 3713 рдлрд╛рдЗрд▓реЗрдВ (3591 рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рд╕реЗ рд╡рд┐рдШрдЯрд┐рдд, 122 рд╡рд┐рдлрд▓)
     opcodemap - рдЪреЗрддрд╛рд╡рдиреА - рдмрд▓ рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рдХреЗ рд░реВрдк рдореЗрдВ opcode рдорд╛рдирдЪрд┐рддреНрд░ рдирд╣реАрдВ рд▓рд┐рдЦрдирд╛ 

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЕрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд╡рд┐рдШрдЯрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ out/ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реИред

рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдЕрдиреБрд░реЗрдЦрдг рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдирд╛


рдЦреБрд▓реЗ рд╕реНрд░реЛрдд рдореЗрдВ, рдореИрдВрдиреЗ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдХреА рддрд▓рд╛рд╢ рд╢реБрд░реВ рдХреА, рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЯреБрдХрдбрд╝реЗ рдиреЗ рдореЗрд░рд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд┐рдпрд╛ред out/dropbox/client/high_trace.py рдореЗрдВ рдЯреНрд░реЗрд╕ рд╣реИрдВрдбрд▓рд░ рдХреЗрд╡рд▓ рддрднреА рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдЕрд╕реЗрдВрдмрд▓реА рдЬрдореА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдпрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдореИрдЬрд┐рдХ рдХреА рдпрд╛ рдХреБрдХреА 1430 рдореЗрдВ рд▓рд╛рдЗрди рдореЗрдВ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

  1424 def install_global_trace_handlers(flags=None, args=None): 1425 global _tracing_initialized 1426 if _tracing_initialized: 1427 TRACE('!! Already enabled tracing system') 1428 return 1429 _tracing_initialized = True 1430 if not build_number.is_frozen() or magic_trace_key_is_set() or limited_support_cookie_is_set(): 1431 if not os.getenv('DBNOLOCALTRACE'): 1432 add_trace_handler(db_thread(LtraceThread)().trace) 1433 if os.getenv('DBTRACEFILE'): 1434 pass 

рдлреНрд░реЛрдЬрди рдмрд┐рд▓реНрдб рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдбрд┐рдмрдЧ рдмрд┐рд▓реНрдб рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЙрд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдереЛрдбрд╝реА рдЕрдзрд┐рдХ рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреА рд▓рд╛рдЗрдиреЗрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

  272 def is_valid_time_limited_cookie(cookie): 273 try: 274 try: 275 t_when = int(cookie[:8], 16) ^ 1686035233 276 except ValueError: 277 return False 278 else: 279 if abs(time.time() - t_when) < SECONDS_PER_DAY * 2 and md5(make_bytes(cookie[:8]) + b'traceme').hexdigest()[:6] == cookie[8:]: 280 return True 281 except Exception: 282 report_exception() 283 284 return False 285 286 287 def limited_support_cookie_is_set(): 288 dbdev = os.getenv('DBDEV') 289 return dbdev is not None and is_valid_time_limited_cookie(dbdev) build_number/environment.py 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк limited_support_cookie_is_set 287 рдкрд░ limited_support_cookie_is_set рд╡рд┐рдзрд┐ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдиреБрд░реЗрдЦрдг рдХреЗрд╡рд▓ рддрднреА рд╕рдХреНрд╖рдо рд╣реЛрддрд╛ рд╣реИ рдЬрдм DBDEV рдирд╛рдордХ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдПрдХ рд╕реАрдорд┐рдд рдЬреАрд╡рдирдХрд╛рд▓ рдХреЗ рд╕рд╛рде рдХреБрдХреАрдЬрд╝ рдкрд░ рд╕реЗрдЯ рд╣реЛред рд╡реИрд╕реЗ рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ! рдФрд░ рдЕрдм рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдРрд╕реЗ рд╕рдордп-рд╕реАрдорд┐рдд рдХреБрдХреАрдЬрд╝ рдХреИрд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВред рдирд╛рдо рд╕реЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреБрдХреАрдЬрд╝ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛред рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдпрд╛ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рднрд▓реЗ рд╣реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреБрдХреА рдЕрднреА рднреА рд╣реЛ, рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд░реЛрдХрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рд░рдВрддрд░ рдЕрдиреБрд░реЗрдЦрдг рдХреЗ рдХрд╛рд░рдг рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдЧрд┐рд░рд╛рд╡рдЯред рдЗрд╕рд╕реЗ рдЗрдВрдЬреАрдирд┐рдпрд░ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдХреЛ рд░рд┐рд╡рд░реНрд╕ рдХрд░рдирд╛ рднреА рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдПрдХ рдЫреЛрдЯреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрд╕ рдЗрди рдХреБрдХреАрдЬрд╝ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдЙрддреНрдкрдиреНрди рдФрд░ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреА рд╣реИред рдХреБрдЫ рдЗрд╕ рддрд░рд╣:

  #!/usr/bin/env python3 def output_env(name, value): print("%s=%s; export %s" % (name, value, name)) def generate_time_cookie(): t = int(time.time()) c = 1686035233 s = "%.8x" % (t ^ c) h = md5(s.encode("utf-8?") + b"traceme").hexdigest() ret = "%s%s" % (s, h[:6]) return ret c = generate_time_cookie() output_env("DBDEV", c) 

рдлрд┐рд░ рдПрдХ рд╕рдордп рдЖрдзрд╛рд░рд┐рдд рдХреБрдХреА рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ:

  $ python3 setenv.py DBDEV=38b28b3f349714; export DBDEV; 

рдлрд┐рд░ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рдЪрд▓рд╛рдПрдВред

  $ eval `python3 setenv.py` $ ~/.dropbox-dist/dropbox-lnx_64-71.4.108/dropbox 

рдЗрд╕рдореЗрдВ рдЯреНрд░реЗрд╕ рдЖрдЙрдЯрдкреБрдЯ, рд░рдВрдЧреАрди рдлреЙрд░реНрдореЗрдЯрд┐рдВрдЧ рдФрд░ рд╡рд╣ рд╕рдм рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣ рдЕрдкрдВрдЬреАрдХреГрдд рдЧреНрд░рд╛рд╣рдХ рдЬреИрд╕рд╛ рдХреБрдЫ рджрд┐рдЦрддрд╛ рд╣реИ:



рдирдпрд╛ рдХреЛрдб рд▓рд╛рдЧреВ рдХрд░реЗрдВ


рдпрд╣ рд╕рдм рдереЛрдбрд╝рд╛ рдордЬрд╛рдХрд┐рдпрд╛ рд╣реИред рд╡рд┐рдШрдЯрд┐рдд рдХреЛрдб рдХрд╛ рдФрд░ рдЕрдзреНрдпрдпрди рдХрд░рддреЗ рд╣реБрдП, рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓рддрд╛ out/build_number/environment.pyc ред рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЬрд╛рджреВ рдХреБрдВрдЬреА рд╕реНрдерд╛рдкрд┐рдд рд╣реИред рдпрд╣ рдХреБрдВрдЬреА рдХреЛрдб рдореЗрдВ рд╣рд╛рд░реНрдб-рдХреЛрдбреЗрдб рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди SHA-256 рд╣реИрд╢ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣рд╛рдБ рд╕рдВрдЧрдд рд╕реНрдирд┐рдкреЗрдЯ рд╣реИред

  1 import hashlib, os 2 from typing import Optional, Text 3 _MAGIC_TRACE_KEY_IS_SET = None 4 5 def magic_trace_key_is_set(): 6 global _MAGIC_TRACE_KEY_IS_SET 7 if _MAGIC_TRACE_KEY_IS_SET is None: 8 dbdev = os.getenv('DBDEV') or '' 9 if isinstance(dbdev, Text): 10 bytes_dbdev = dbdev.encode('ascii') 11 else: 12 bytes_dbdev = dbdev 13 dbdev_hash = hashlib.sha256(bytes_dbdev).hexdigest() 14 _MAGIC_TRACE_KEY_IS_SET = dbdev_hash == 'e27eae61e774b19f4053361e523c771a92e838026da42c60e6b097d9cb2bc825' 15 return _MAGIC_TRACE_KEY_IS_SET 

рдореИрдЬрд┐рдХ рдЯреНрд░реЗрд╕ рдХреБрдВрдЬреА рд╕реЗрдЯ рд╣реИ рдпрд╛ рдирд╣реАрдВ рдпрд╣ рдЬрд╛рдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд╛рдиреЛрдВ рд╕реЗ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдХрдИ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЬреЙрди рд░рд┐рдкрд░ рдмреНрд░реВрдЯ рдлреЛрд░реНрд╕ рдХреЗ рд╕рд╛рде SHA-256 рд╣реИрд╢ рдХреЛ рдХреНрд░реИрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдмреНрд░реВрдЯ рдлреЛрд░реНрд╕ рдХреЛ рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧрд╛, рдФрд░ рдореИрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рдерд╛ред рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдореЗрдВ, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣рд╛рд░реНрдб-рдХреЛрдбрд┐рдд рд╡рд┐рдХрд╛рд╕ рдХреБрдВрдЬреА рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬрд┐рд╕реЗ рд╡реЗ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ "рдореИрдЬрд┐рдХ рдХреА" рдореЛрдб рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рддреЗ рд╣реИрдВред

рдЗрд╕рдиреЗ рдореБрдЭреЗ рдирд╛рд░рд╛рдЬ рдХрд░ рджрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЯреНрд░реЗрд╕рдмреЙрдХреНрд╕ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХреБрдВрдЬреА рдХреЗ рдЗрд╕ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рддреНрд╡рд░рд┐рдд рдФрд░ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдЦреЛрдЬрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ рдорд╛рд░реНрд╢рд▓рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд▓рд┐рдЦреА рдЬреЛ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб pyc рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рддреА рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдореИрдВ рдЕрдкрдирд╛ рдХреЛрдб рджрд░реНрдЬ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ рдпрд╛ рдмрд╕ рдЙрдкрд░реЛрдХреНрдд рд╣реИрд╢ рдХреА рдЬрдЧрд╣ рд▓реЗ рд╕рдХрддрд╛ рдерд╛ред Github рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдпрд╣ рдХреЛрдб patchzip.py рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИред рдирддреАрдЬрддрди, рд╣реИрд╢ рдХреЛ ANVILVENTURES рдХреЗ SHA-256 рд╣реИрд╢ рджреНрд╡рд╛рд░рд╛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рдХреЛрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдПрдХ рдЬрд╝рд┐рдк рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╕рднреА рдУрдлрд╝реНрдлрд╝реБрд╕реЗрдЯреЗрдб рдХреЛрдб рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВред рдпрд╣ рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

  $ DBDEV = ANVILVENTURES;  рдирд┐рд░реНрдпрд╛рдд DBDEV;
     $ ~ / .dropbox-dist / dropbox-lnx_64-71.4.108 / dropbox 

рд╕рд┐рд╕реНрдЯрдо рдЯреНрд░реЗ рдореЗрдВ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдЖрдЗрдХрди рдкрд░ рд░рд╛рдЗрдЯ-рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рдЕрдм рд╕рднреА рдбрд┐рдмрдЧрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред



рд╡рд┐рдШрдЯрд┐рдд рд╕реНрд░реЛрддреЛрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддреЗ рд╣реБрдП, рдлрд╝рд╛рдЗрд▓ dropbox/webdebugger/server.py рдореИрдВрдиреЗ рдПрдХ рддрд░реАрдХрд╛ рдЦреЛрдЬрд╛ рд╣реИ, is_enabled ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡реЗрдм рдбрд┐рдмрдЧрд░ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╡рд╣ рдмрддрд╛рдИ рдЧрдИ рдЬрд╛рджреВ рдХреА рдХреБрдВрдЬреА рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рд╣рдордиреЗ SHA-256 рд╣реИрд╢ рдХреА рдЬрдЧрд╣ рд▓реЗ рд▓реА рд╣реИ, рд╣рдо рдмрд╕ рдорд╛рди рдХреЛ ANVILVENTURES рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓рд╛рдЗрдиреЛрдВ 201 рдФрд░ 202 рдкрд░ рджреВрд╕рд░рд╛ рднрд╛рдЧ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдХрд┐ рдХреНрдпрд╛ DB<x> рдирд╛рдордХ рдПрдХ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╣реИ рдЬреЛ SHA-256 рд╣реИрд╢ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдкрд░реНрдпрд╛рд╡рд░рдг рдХрд╛ рдореВрд▓реНрдп рд╕рдордп-рд╕реАрдорд┐рдд рдХреБрдХреАрдЬрд╝ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╣реА рджреЗрдЦ рдЪреБрдХреЗ рд╣реИрдВред

  191 @classmethod 192 def is_enabled(cls): 193 if cls._magic_key_set: 194 return cls._magic_key_set 195 else: 196 cls._magic_key_set = False 197 if not magic_trace_key_is_set(): 198 return False 199 for var in os.environ: 200 if var.startswith('DB'): 201 var_hash = hashlib.sha256(make_bytes(var[2:])).hexdigest() 202 if var_hash == '5df50a9c69f00ac71f873d02ff14f3b86e39600312c0b603cbb76b8b8a433d3ff0757214287b25fb01' and is_valid_time_limited_cookie(os.environ[var]): 203 cls._magic_key_set = True 204 return True 205 206 return False 

рдареАрдХ рдЙрд╕реА рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЗрд╕ рд╣реИрд╢ рдХреЛ рдкрд╣рд▓реЗ SHA-256 рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рдерд╛, рдЬрд┐рд╕реЗ рдЕрдм рд╣рдо рдкрд╣рд▓реЗ рд▓рд┐рдЦреА рдЧрдИ setenv рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ:

  $ cat setenv.py тАж c = generate_time_cookie() output_env("DBDEV", "ANVILVENTURES") output_env("DBANVILVENTURES", c) $ python3 setenv.py DBDEV=ANVILVENTURES; export DBDEV; DBANVILVENTURES=38b285c4034a67; export DBANVILVENTURES $ eval `python3 setenv.py` $ ~/.dropbox-dist/dropbox-lnx_64-71.4.108/dropbox 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрд▓рд╛рдЗрдВрдЯ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдЯреАрд╕реАрдкреА рдкреЛрд░реНрдЯ рдЦреБрд▓рддрд╛ рд╣реИред рдЕрдЧрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИрдВ рддреЛ рдпрд╣ рдирд╣реАрдВ рдЦреБрд▓реЗрдЧрд╛ред

  $ netstat --tcp -lnp |  grep рдбреНрд░реЙрдкрдмреЙрдХреНрд╕
     tcp 0 0 127.0.0.1:4242 0.0.0.0:* LISTEN 1517 / рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ 

рдХреЛрдб рдореЗрдВ рдЖрдЧреЗ, рдЖрдк webpdb.pyc рдлрд╝рд╛рдЗрд▓ рдореЗрдВ WebSocket рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдорд╛рдирдХ рдЕрдЬрдЧрд░ pdb рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рд╣реИред рдЗрд╕ рдмрдВрджрд░рдЧрд╛рд╣ рдкрд░ рдПрдХ HTTP рд╕рд░реНрд╡рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИред рдЖрдЗрдП рд╡реЗрдмрд╕реЛрдХреЗрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдПрдВ :

  $ websocat -t ws: //127.0.0.1: 4242 / рдкреАрдбреАрдмреА
     --Return--
    
     > / home/gvb/dropbox/webdebugger/webpdb.pyc(101)run()->None
     >
     (Pdb) рд╕реЗ build_number.environment рдорд┐рдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдЬрд┐рдХ_рдЯреНрд░реЗрд╕_рдХреА_рдЗрд╕_рд╕реЗрдЯ рдЖрдпрд╛рдд рдХрд░реЗрдВ
     (рдкреАрдбреАрдмреА) рдПрдордПрд╕ ()
     рдпрд╣ рд╕рдЪ рд╣реИ 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рдореЗрдВ рдПрдХ рдкреВрд░реНрдг рдбрд┐рдмрдЧ рд╣реИ, рдЬреЛ рдЕрдиреНрдп рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рдо рдордирдорд╛рдиреЗ рдкрд╛рдпрдерди рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдЖрдВрддрд░рд┐рдХ рдбрд┐рдмрдЧ рдореЗрдиреВ рдФрд░ рдЯреНрд░реЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред рдпрд╣ рд╕рдм рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдЖрдЧреЗ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рдмрд╣реБрдд рдорджрдж рдХрд░реЗрдЧрд╛ред

рдирд┐рд╖реНрдХрд░реНрд╖


рд╣рдо рд░рд┐рд╡рд░реНрд╕-рдЗрдВрдЬреАрдирд┐рдпрд░ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдХреЛ рд░рд┐рд╡рд░реНрд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗ, рдХреЛрдб рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдФрд░ рдЗрдВрдЬреЗрдХреНрд╢рди рдЯреВрд▓ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬреЛ рдкрд╛рдпрдерди 3.6 рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд░реНрддрдорд╛рди рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд╣рдордиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЫрд┐рдкреЗ рд╣реБрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЙрд▓реНрдЯрд╛ рдХрд┐рдпрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдХреНрд░рд┐рдп рдХрд┐рдпрд╛ред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдбрд┐рдмрдЧрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдЧреЗ рд╣реИрдХрд┐рдВрдЧ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛ рдХрд┐ рдбрд┐рдХрдореНрдкреЛрдЬрд╛рдЗрд▓ 6 рдХреЗ рдиреБрдХрд╕рд╛рди рдХреЗ рдХрд╛рд░рдг рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╡рд┐рдШрдЯрд┐рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдХреЛрдб


рдХреЛрдб Github рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡рд╣рд╛рдВ рдЙрдкрдпреЛрдЧ рдХреЗ рдирд┐рд░реНрджреЗрд╢ рджрд┐рдПред рдЗрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ 2011 рдореЗрдВ рд▓рд┐рдЦрд╛ рдореЗрд░рд╛ рдкреБрд░рд╛рдирд╛ рдХреЛрдб рднреА рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдХреБрдЫ рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдмрд╢рд░реНрддреЗ рдХрд┐ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдкрд╛рдпрдерди 2.7 рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рд╣реЛрдВред

рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдСрдкрдХреЛрдб рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢ рдФрд░ рдЬрд╝рд┐рдк рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдЪреАрдЬреЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рдзрдиреНрдпрд╡рд╛рдж


рдореЗрд░реЗ рдХреЛрдб рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд╡рд┐рд▓ рд╡реЗрдВрдЪрд░реНрд╕ рдХреЗ рдмреНрд░рд╛рдпрди рдХрд╛ рдзрдиреНрдпрд╡рд╛рджред рдЗрд╕ рдХреЛрдб рдкрд░ рдХрд╛рдо рдХрдИ рд╡рд░реНрд╖реЛрдВ рддрдХ рдЬрд╛рд░реА рд░рд╣рд╛, рд╕рдордп-рд╕рдордп рдкрд░ рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛, рдирдП рддрд░реАрдХреЛрдВ рдХреЛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдФрд░ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдХрд┐рдПред

рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдкрд╛рдпрдерди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рд╛рди рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рд░рд┐рдЪ рд╕реНрдорд┐рде, рдлреНрд▓реЛрд░рд┐рдпрди рд▓реЗрдбреМрдХреНрд╕ рдФрд░ рдирд┐рдХреЛрд▓рд╕ рд░рдл рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╣реЗрдЧрди рдлреНрд░рд┐рдЪ рдХрд╛ рдХрд╛рдо рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдирдХрд╛ рдХрд╛рдо рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рдмрд╕реЗ рдмрдбрд╝реЗ рдкрд╛рдпрдерди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░рд┐рд╡рд░реНрд╕ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ - рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдХреНрд▓рд╛рдЗрдВрдЯред

рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдкрд╛рдпрдерди рдХреЛрдб рдХреЗ рдЕрдкрдШрдЯрди рдиреЗ рдЖрд░ред рдмрд░реНрдирд╕реНрдЯреАрди рдХреА рдЕрдЧреБрд╡рд╛рдИ рд╡рд╛рд▓реА рдЕрдирд▓реЗрд▓реА 6 рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж рджрд┐рдпрд╛ рд╣реИред рдЗрд╕ рдЕрдкрдШрдЯрдирдХрд░реНрддрд╛ рдиреЗ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд╛рдпрдерди рдбрд┐рдХрдореНрдкрд╛рдЗрд▓рд░реЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдФрд░ рдмреЗрд╣рддрд░ рдмрдирд╛рдпрд╛ рд╣реИред

рдЗрд╕ рд▓реЗрдЦ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдпрди, рдСрд╕реНрдЯрд┐рди, рд╕реНрдЯреАрдлрди рдФрд░ рдХреНрд░рд┐рд╕ рдХреЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХрд╛ рднреА рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред

Source: https://habr.com/ru/post/hi452276/


All Articles