рд╣реИрдХрд░ рдмреИрдЯрд▓: рдкрд╛рд░реНрд╕рд┐рдВрдЧ PHDays CTF рдФрд░ CTF рдХреНрд╡рд╛рд▓рд┐рд╕ рдЬреЙрдмреНрд╕

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



рдЖрдЬ рдХреЗ рд╡рд┐рд╖рдп рдореЗрдВ, рд╣рдо рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рдирдХрд╛ рд╕рд╛рдордирд╛ рдкрд┐рдЫрд▓реА рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЗ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдиреЗ рдХрд┐рдпрд╛ рдерд╛ред



рдЗрддрд┐рд╣рд╛рд╕ рдФрд░ рднреВрдЧреЛрд▓



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



рдЗрд╕ рд╡рд░реНрд╖, рдХреНрд╡рд╛рд▓реАрдлрд╛рдЗрдВрдЧ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛рдУрдВ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП 600 рд╕реЗ рдЕрдзрд┐рдХ рдЯреАрдореЛрдВ рдиреЗ рдкрдВрдЬреАрдХрд░рдг рдХрд┐рдпрд╛ рд╣реИред



рдЫрд╡рд┐



Quests рдФрд░ рд╡рд╛рддрд╛рд╡рд░рдг



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



рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХреЗ рдХрд╛рд░реНрдп рдЖрдорддреМрд░ рдкрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ: рд╕реАрдЯреАрдПрдл рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред PHDays CTF рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛рдПрдВ рдореВрд▓ рдЦреЗрд▓ рдпрд╛рдВрддреНрд░рд┐рдХреА рдХреЗ рд▓рд┐рдП рднреА рджрд┐рд▓рдЪрд╕реНрдк рд╣реИрдВ, рдЬреЛ рдЧреЗрдо рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддреА рд╣реИрдВ ( PHDays рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдЕрдзрд┐рдХ)ред



рдЖрдорддреМрд░ рдкрд░, рдЖрдпреЛрдЬрдХ рдЙрди рдЯреАрдореЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдп рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╕реАрдзреЗ рд╣реИрдХрд┐рдВрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, PHDays 2012 рдХреЗ рджреМрд░рд╛рди, рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХрдЪрд░рд╛ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдмреЛрдирд╕ рдЭрдВрдбреЗ рдвреВрдВрдврдХрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдВрдХ рдЕрд░реНрдЬрд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ PHDays III рдХреЗ рджреМрд░рд╛рди рдЯреАрдореЛрдВ рдХреЛ " рд╣реИрдХрд░ рднреВрд▓рднреБрд▓реИрдпрд╛ " рдХреЛ рдкрд╛рд░ рдХрд░рдирд╛ рдкрдбрд╝рд╛ - рд▓реЗрдЬрд░ рдХреНрд╖реЗрддреНрд░, рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕реЗрдВрд╕рд░, рдЧреБрдкреНрдд рджрд░рд╡рд╛рдЬреЗ, рдПрдХ рдХрдорд░реЗ рдХреЗ рд╕рд╛рде рдмрд╛рдзрд╛ рдХреЛрд░реНрд╕ред рдХреАрдбрд╝реЗ рдФрд░ рдЕрдиреНрдп рджрд┐рд▓рдЪрд╕реНрдк рдкрд░реАрдХреНрд╖рдгред



рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рдмрд┐рдВрджреБ, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рд╕реВрдЪрдирд╛ рд╕реБрд░рдХреНрд╖рд╛ рдХреА рд╡рд┐рднрд┐рдиреНрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд░реНрдЬрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЖрдЗрдП рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ рджреЗрдЦреЗрдВред



рдкрджрдЪреНрдЫреЗрдж



рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдпреЛрдЧреНрдпрддрд╛ рдЪрд░рдг (PHDays CTF Quals) рдХрд╛рд░реНрдп-рдЖрдзрд╛рд░рд┐рдд CTF рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдЯреАрдореЛрдВ рдХреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рдЕрдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХрд╛рд░реНрдп рдирд┐рдореНрди рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдЧрд┐рд░ рд╕рдХрддреЗ рд╣реИрдВ:





рдЪрд▓реЛ рдЕрдВрддрд┐рдо рд╢реНрд░реЗрдгреА рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред



рдЕрд╡рд╣реЗрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИ



рдПрдордкреА 3 рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЫрд┐рдкреЗ рд╕рдВрджреЗрд╢ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ PHDays IV CTF Qual рдореЗрдВ рдкреНрд░рддрд┐рднрд╛рдЧреАред



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



рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдХреБрдЫ рдЕрд▓рдЧ рд╣реИред рдпрджрд┐ рдЖрдк рдкрд╛рда рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

рдЫрд╡рд┐

рдлрд╝рд╛рдЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЖрдИрдбреА 3 рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╣реИрдВред рдкрд╣рд▓реЗ TRCK (рдЯреНрд░реИрдХ рдирдВрдмрд░) рдЯреИрдЧ рдЖрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдкрд╛рда рдХреЗ рдХреБрдЫ рдЯреБрдХрдбрд╝реЗ:



RGB7 5.183, NULL RGB6 0.42,159 RGB5 194,244,68 RGB4 47,77,6 RGB3 44,73,141 RGB2 140,207,72 RGB1 120,156,203



рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рд╕рд╛рдд рд░рд┐рдХреЙрд░реНрдб (RGB7 рд╕реЗ RGB1 рддрдХ) рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ:



RGB7 5.183, NULL

RGB6 0.42.159

RGB5 194,244.68

RGB4 47.77.6

RGB3 44.73.141

RGB2 140,207.72

RGB1 120,156,203



RGB рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдмрд╛рдж рддреАрди рдорд╛рди рд╣реИрдВред рдпреЗ рдЖрдорддреМрд░ рдкрд░ рд╕рдВрдЦреНрдпрд╛рдПрдБ рд╣реЛрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдорд╛рдорд▓реЗ рдореЗрдВ NULLред рдпрд╣ рдорд╛рдирдирд╛ тАЛтАЛрдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдпрд╣ рдЕрднрд┐рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рддреАрди рдПрдХрд▓-рдмрд╛рдЗрдЯ рдорд╛рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЖрдк рд╡рд░реНрдгреЛрдВ рдХреЛ рджрд╢рдорд▓рд╡ рдХреЛрдбреЛрдВ рдХреЛ рдХреНрд░рдорд┐рдд, рд╕рдВрдпреЛрдЬрд┐рдд, рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ рдореЗрдВ рдореБрджреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП:



>>> a = [120,156,203, 140,207,72, 44,73,141, 47,77,6, 194,244,68, 0,42,159, 5,183]





>>> print "".join(map(chr, a)).encode("hex")







рдирддреАрдЬрддрди, рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:



789ccb8ccf482c498d2f4d06c2f444002a9f05b7







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



рдкрд╛рдпрдерди рдореЗрдВ рдЬрд╝рд▓реАрдм рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдбреЗрдХреЛрдореНрдкреНрд░реЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рдХреЗ рд╕рд╛рде, рдЖрдк рдкреИрдХреНрдб рд╕рдВрджреЗрд╢ рдХреЛ рдЕрдирдкреИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



 >>> import zlib >>> print zlib.decompress("".join(map(chr, a)))
      
      





рдФрд░ рдлрд┐рд░ рдкрд╛рда рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:



i_hate_ucucuga



рдпрд╣ рд╡рд╣ рдзреНрд╡рдЬ рдерд╛ рдЬрд┐рд╕реЗ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХреЗ рдЖрдпреЛрдЬрдХреЛрдВ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рдирд╛ рдерд╛ред



рдЕрдорд╛рдиреНрдп рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА



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

рдЫрд╡рд┐

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



рдХрд╛рд░реНрдп рдХреЛ рдордВрдЧрд▓ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдо рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╕рдВрд╢реЛрдзрд┐рдд рдЖрд░рдПрд╕рдП рд╣реИред



рдкреНрд░рддреНрдпреЗрдХ рдХреБрдВрдЬреА рдореЗрдВ рджреЛ рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рджреВрд╕рд░рд╛ рднрд╛рдЧ 0x010001 == 65537 рд╣реИ - рдЖрд░рдПрд╕рдП (рдИ) рдХрд╛ рдЕрдХреНрд╕рд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреНрд░рддрд┐рдкрд╛рджрдХред рддреЛ, рд╕рдВрдЪрд╛рд░ рд╕рддреНрд░ рдореЗрдВ, рдкрд╣рд▓реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА (рдПрди 1 / рдИ 1 , рдПрди 2 / рдИ 2 ) рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЙрди рдкрд░ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рд╣реЛрддрд╛ рд╣реИ (рд╕реА 1, рд╕реА 2)ред



рдпрджрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ RSA рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рд╣реИ, рддреЛ ci = pow (m i , e i , n i )ред рдпрд╣ рдПрдо 1 рдФрд░ рдПрдо 2 рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред

pow - рдореЙрдбреНрдпреВрд▓рд░ рдШрд╛рддрд╛рдВрдХ рдХрд╛ рдХрд╛рд░реНрдп, pow (рд╡реИрд▓, рдНрдХреНрд╕реНрдк, рдорд╛рдкреБрд▓рд╕) == рд╡реИрд▓ рдНрдХреНрд╕реНрдк % рдорд╛рдкрд╛рдВрдХред



RSA рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЗ рдЕрдиреБрд╕рд╛рд░:





рдЯрд╛рд╕реНрдХ рдПрди 1 рдФрд░ рдПрди 2 рдореЗрдВ 1535 рдмрд┐рдЯреНрд╕ рдХреА рд▓рдВрдмрд╛рдИ рд╣реЛрддреА рд╣реИ, рдпрд╛рдиреА рдЙрдиреНрд╣реЗрдВ рдлреИрдХреНрдЯрд░рд╛рдЗрдЬреНрдб (рд╕рд╛рдзрд╛рд░рдг рдХрд╛рд░рдХреЛрдВ рдореЗрдВ рд╡рд┐рдШрдЯрд┐рдд) рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



рд╣рдо рдкрд╛рдпрдерди рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдпреВрдХреНрд▓рд┐рдбрд┐рдпрди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:



 def egcd(a, b): # Extended Greatest Common Divisor if a == 0: return (b, 0, 1) else: g, y, x = egcd (b % a, a) return (g, x - (b // a) * y, y)
      
      





рд╕рдВрдЦреНрдпрд╛ 1 рдФрд░ n 2 рдХреЗ GCD (рд╕рдмрд╕реЗ рдмрдбрд╝реЗ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░рдХ) рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ:



 gcd = egcd(n1,n2)[0]
      
      





рдЬреАрд╕реАрдбреА (рдПрди 1 , рдПрди 2 ) рдХреА рд▓рдВрдмрд╛рдИ 1024 рдмрд┐рдЯреНрд╕ рд╣реИред рдирдВрдмрд░ 1 рдФрд░ n 2 рдХреЗ рдЕрдиреНрдп рд╡рд┐рднрд╛рдЬрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:



 p1 = n1 / gcd p2 = n2 / gcd
      
      





рдкреА 1 рдФрд░ рдкреА 2 512-рдмрд┐рдЯ рдкреНрд░рд╛рдЗрдореНрд╕ рд╣реИрдВ, рдЬреАрд╕реАрдбреА 1024 рдмрд┐рдЯреНрд╕ (рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ 512 * 512) рдХреА рдПрдХ рд╕рдВрдпреБрдХреНрдд рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рднреА рдлреИрдХреНрдЯрд░рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрдбрд╝реА рд╣реИ ...



рдорд╛рдорд▓реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрдм рд╡рд╛рдВрдЫрд┐рдд рд╕рдВрджреЗрд╢ рдореА i рдХреЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдкреА i рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИред



рдЪрд▓реЛ n i = p i * q * r, рдлрд┐рд░ 0 <m i <p i рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдорд╛рдиреНрдп рд╣реЛрдЧреА:



pow (m i , e i , n i )% p i == pow (m i , e i , p i )



рдлрд┐рд░ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдбреА рдХреЗ рд▓рд┐рдП рдШрд╛рддрд╛рдВрдХ d ' рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:



e i * d ' i mod 1 mod * (p i )



рдбреА 'рдХрд╛ рдореВрд▓реНрдп рдореБрдЭреЗ рдмреАрдЬреАрдп рдкреВрд░рдХ рдХреА рдЧрдгрдирд╛ рдХрд░рдХреЗ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ:



d ' i = invmod (e i , p (p i ))



рдкреНрд░рд╛рдЗрдо рдкреА рдХреЗ рд▓рд┐рдП,



) (p i ) == p i-1 ,



рдЗрд╕рд▓рд┐рдП:



d ' i = invmod (e i , p i-1 )



рдкрд╛рдпрдерди рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдмреАрдЬреАрдп рдкреВрд░рдХ рдХреА рдЧрдгрдирд╛ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рддреА рд╣реИ:



 def invmod(a, m): # Modular inversion g, x, y = egcd (a, m) if g == 1: return x % m raise Exception("modular inverse does not exist")
      
      





рдЖрдкрдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬреЛ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЕрдВрддрд┐рдо рд╡рд░реНрдг '\ 0' рд╕реЗ рдХреЗрд╡рд▓ рдкрдВрдХреНрддрд┐ рдХреЗ рдЕрдВрдд рддрдХ рдкрд╛рда рдЫреЛрдбрд╝рддрд╛ рд╣реИ:



 def showX(v): print ("%0256X" % v).decode("hex").split('\0')[-1]
      
      





рдбрд┐ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ, рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХрд░реЗрдВ:



 d1 = invmod(e, p1-1) d2 = invmod(e, p2-1) showX(pow(c1, d1, p1)) showX(pow(c2, d2, p2))
      
      





рдФрд░ рд╣рдореЗрдВ рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ:



рдЕрдиреБрд░реЛрдз: GET_FLAG (рд╣рд╕реНрддрд╛рдХреНрд╖рд░: 5e2d5e0323591b1c)ред

рдкрд░рд┐рдгрд╛рдо: its_n0t_ab0ut_p4dd1ng



рдЭрдВрдбрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ " its_n0t_ab0ut_p4dd1ng



" рд╣реИред



Ccc рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ



рджрд┐рдпрд╛ рдЧрдпрд╛: source.tar.gz рдЖрд░реНрдХрд╛рдЗрд╡ рдЬрд┐рд╕рдореЗрдВ ecc.py рдФрд░ task.py рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдкреНрд░рдореБрдЦ рд╕рддреНрдпрд╛рдкрди рдпреЛрдЬрдирд╛ рд╣реИ , рдЬрд┐рд╕реЗ рджреАрд░реНрдШрд╡реГрддреНрддреАрдп рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ рдкрддреЗ рдХреЛ 195.133.87.171 рд╕реЗ 5555 рдХреЗ рдкреЛрд░реНрдЯ рдкрд░ рдЬреЛрдбрд╝рдХрд░, рдЖрдк рдХреБрдЫ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



nc 195.133.87.171 5555





password: secch4l*







рдЪреВрдВрдХрд┐ рд╕реНрд░реЛрдд рджрд┐рдП рдЧрдП рд╣реИрдВ, рдпрд╣ рдЙрдирдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд▓рд╛рдпрдХ рд╣реИред рдЖрдк рдЗрдиреНрд╣реЗрдВ рдЪрд▓рд╛ рднреА рд╕рдХрддреЗ рд╣реИрдВред

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



 def egcd(a, b): # Extended Greatest Common Divisor if a == 0: return (b, 0, 1) else: g, y, x = egcd (b % a, a) return (g, x - (b // a) * y, y) def invmod(a, m): # Modular inversion g, x, y = egcd (a % m, m) if g != 1: raise Exception("modular inverse does not exist") else: return x % m
      
      





рддреЛ, task.py



рд╕реЗ main



рдХрд╛рд░реНрдп:



 def main(): print "Auth:тАЬ auth = raw_input() if hashlib.sha1(auth).hexdigest() != "375d5c01ca1b8c3863024d10aac7713472eb5033": # secch4l* print "nopeтАЬ return prefix = os.urandom(8) print "Proof of work, pleaseтАЬ print "Prefix is (hexed) ", prefix.encode("hex") test = raw_input().decode("hex") if not test.startswith(prefix) or len(test) > 16: print "nopeтАЬ return h = hashlib.sha1(test).hexdigest() if not h.startswith("000000"): print "nopeтАЬ return goflag()
      
      





рдПрдХ рдкрдВрдХреНрддрд┐ рдкрдврд╝реА рдЬрд╛рддреА рд╣реИ, SHA-1 рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдорд╛рди ("secch4l *") рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдлрд┐рд░ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ 8-рдмрд╛рдЗрдЯ рдЙрдкрд╕рд░реНрдЧ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рд╣реЗрдХреНрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдиреНрдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрд╡рд╛рдм рдореЗрдВ, рдЧреНрд░рд╛рд╣рдХ рдХреЛ 16 рдмрд╛рдЗрдЯреНрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рднреЗрдЬрдиреА рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЙрдкрд╕рд░реНрдЧ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛ, рдФрд░ рдЗрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ SHA-1 рдорд╛рди рдХреЗ рдкрд╣рд▓реЗ 3 рдмрд╛рдЗрдЯреНрд╕ рд╢реВрдиреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рд╕рднреА рдЪрд░рдг рд╕рдлрд▓ рд╣реИрдВ, рддреЛ рдЧреЛрдлрд▓рд╛рдЧ () рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред



рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЯреБрдХрдбрд╝рд╛ рд╕рд░реНрд╡рд░ рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИ, рдкрд╛рд╕рд╡рд░реНрдб рднреЗрдЬрддрд╛ рд╣реИ, рдЙрдкрд╕рд░реНрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рднреЗрдЬрддрд╛ рд╣реИ:



 def readLn(sock): a = [] while True: c = sock.recv(1) if '\n' == c: return "".join(a) a.append(c) HOST = "195.133.87.171" PORT = 5555 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((HOST, PORT)) print readLn(sock) # Auth: sock.send("secch4l*\n") print readLn(sock) # Proof of work, please s = readLn(sock) print s # Prefix is (hexed) 0b3997e62b9ffbf4 prefix = s.split()[-1].decode("hex") for i in xrange(0x7FFFFFFF): s = "%s%X" % (prefix, i) if hashlib.sha1(s).digest()[:3] == '\0\0\0': break sock.send(s + '\n')
      
      





рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рдкрд░ рдЗрд╕ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╕рд░реНрд╡рд░ goflag () рдлрд╝рдВрдХреНрд╢рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдирд┐рдореНрди рдкрд╛рда рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ:



рдЪреБрдирд╛рд╡ рдЖрдпреЛрдЧ рдХреЗ рдЕрдзреНрдпрдХреНрд╖

R = 572115218124168948525078362547166172445820217705568707355669424304224832114

рд╕рд╛рдЭрд╛ SECRET = R ^ рдкрд╛рд╕рд╡рд░реНрдб

рд╕рдВрд▓рдЧреНрди рд╕рдВрджреЗрд╢: 7a93846a011e0d0382e94f32d705239e6298169dcec20da5d6



рдХреНрдпрд╛ рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рд╕реЗ task.py



рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ:



 def goflag(): print "EC PASSWORD CHECK" r = random.randint(31337, 1 << 250) R = p256.power(G, r) print "R =", R print "SHARED SECRET = R ^ PASSWORD" S = p256.power(R, PASSWORD) key = p256.derive(S) cipher = encrypt(FLAG, key) print "ENCRYPTED MESSAGE:", cipher.encode("hex")
      
      





рдЕрдгреНрдбрд╛рдХрд╛рд░ рд╡рдХреНрд░реЛрдВ рдкрд░ рдЕрд╕рдордорд┐рдд рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред NIST рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд╢рдВрд╕рд┐рдд P-256 рд╡рдХреНрд░ рдЪрдпрдирд┐рдд рд╣реИред рд╡рдХреНрд░ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдХрдордЬреЛрд░рд┐рдпрд╛рдВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВред



рд╣рдо R рдХреЗ рдореВрд▓реНрдп рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди PASSWORD (рдЬреЛ рдкрд╛рд╕рд╡рд░реНрдб рд╕реЗ рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХреЗ рдорд╛рди рдХреЛ рдЬрд╛рдиреЗ рдмрд┐рдирд╛, рд╣рдо рдПрд╕ рдХреА рдЧрдгрдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдПрд╕ рдЬрд╛рдирдиреЗ рдХреЛ рд╣рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдХреБрдВрдЬреА рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рддреЛ рд╢рд╛рдпрдж рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?



task.py



рд╕реЗ encrypt



рдлрд╝рдВрдХреНрд╢рди:



 def encrypt(msg, key): iv = os.urandom(8) stream = hashlib.sha256(iv + key).digest() stream = hashlib.sha256(stream + iv + key).digest() cipher = iv + xor(msg, stream) return cipher
      
      





рдХреЛрдб рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд╕рдВрджреЗрд╢ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ 8-рдмрд╛рдЗрдЯ рдЖрд░рдВрднреАрдХрд░рдг рд╡реЗрдХреНрдЯрд░ iv рд╕реЗ рдкрд╣рд▓реЗ рд╣реИ, рдФрд░ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди XOR рдзреНрд╡рдЬ рдХреЗ рд░реВрдк рдореЗрдВ рджреЛ SHA-256 рдЧрдгрдирд╛рдУрдВ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрддреНрдкрдиреНрди рдЧрд╛рдорд╛ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреБрдВрдЬреА рдХрд╛ рдЕрд░реНрде рдЬрд╛рдиреЗ рдмрд┐рдирд╛, рдЧрд╛рдорд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реИред рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдХреБрдВрдЬреА рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИ?



рдЯрд╛рд╕реНрдХрдЯрд╛рдЗрдо рд╕реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдлрд╝рдВрдХреНрд╢рди:



 def derive(self, p): return hashlib.sha256(str((p[0] << 10) / p[1])).digest()
      
      





рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдмрд┐рдВрджреБ рдПрд╕ (рджреЛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ - x рдФрд░ y) рдХреЗ рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрдирдкреБрдЯ SHA-256 рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, str (int (x * 1024 / y)) рд╣реИрд╢ рдЗрдирдкреБрдЯ рдХреЛ рдЖрдкреВрд░реНрддрд┐ рдХреА рдЬрд╛рддреА рд╣реИред рдЪреВрдВрдХрд┐ x рдФрд░ y рдореЗрдВ рдШрдирд┐рд╖реНрда рдорд╛рди рд╣реИрдВ (рдпреЗ рдмрдбрд╝реЗ рдкреВрд░реНрдгрд╛рдВрдХ рд╣реИрдВ), рдЕрдВрдХрдЧрдгрд┐рддреАрдп рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо 1024 рдХреЗ рдХрд░реАрдм рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХрдИ рдмрд╛рд░ рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред



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



 import hashlib, ecc enc = "7a93846a011e0d0382e94f32d705239e6298169dcec20da5d6".decode("hex") iv = enc[:8] def decrypt(key): stream = hashlib.sha256(iv + key).digest() stream = hashlib.sha256(stream + iv + key).digest() return ecc.xor(enc[8:], stream) for i in xrange(0x7FFFFFFF): s = decrypt(hashlib.sha256(str(i)).digest()) for c in bytearray(s): if c < 32 or c >= 128: break else: print s # ecc_is_too_s3cure break
      
      





рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдзреНрд╡рдЬ "ecc_is_too_s3cure" рдкрдВрдХреНрддрд┐ рд╣реИред



рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧред Shadelt900



рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдПрдХ рдФрд░ рд▓реЛрдХрдкреНрд░рд┐рдп рдиреМрдХрд░реА рд╢реНрд░реЗрдгреА рд╣реИред CTF рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмреЗрд╕реНрдЯ рд░рд┐рд╡рд░реНрд╕рд▓ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ PHDays рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИред



Shadelt900 рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ, рдкрд┐рдЫрд▓реЗ рддреАрди рдХреА рддрд░рд╣, PHDays IV CTF Quals рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдерд╛, рдЬрд┐рд╕реЗ рдЬрдирд╡рд░реА 2014 рдореЗрдВ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЯреАрдореЛрдВ рдХреЛ 'derrorim_enc.bmp' рдирд╛рдордХ рдЫрд╡рд┐ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдирд╛ рдерд╛ред рдпрд╣ рдЬреНрдЮрд╛рдд рдерд╛ рдХрд┐ рдЗрд╕реЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЯреВрд▓ рдХреЛ Shadelt9000.exe рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдбрд┐рдХреНрд░рд┐рдкреНрдЯрд░ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрд╛ред рдпрд╣рд╛рдБ рдЫрд╡рд┐ рд╣реИ:



рдЫрд╡рд┐



Shadelt9000.exe рдлрд╝рд╛рдЗрд▓ рдкрд░ рдПрдХ рдирдЬрд╝рджреАрдХреА рдирдЬрд╝рд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рддреА рд╣реИ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди OpenGL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдХреЙрдкреАрд░рд╛рдЗрдЯ 1.2.8 рдХреЙрдкреАрд░рд╛рдЗрдЯ 1995-2013 рдорд╛рд░реНрдХ рдПрдбрд▓рд░ рдХреЛ рднреА рдлреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓реЛрдХрдкреНрд░рд┐рдп рдЬрд╝рд╛рд▓рд┐рдм рд╕рдВрдкреАрдбрд╝рди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред



рдпрджрд┐ рдЖрдк рдЕрд╕рдВрддреБрд╖реНрдЯ рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рд╕реЗ zlib рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдЖрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЬрд▓реНрджреА рд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:



рдЫрд╡рд┐



0x47F660 рдФрд░ 0x47F7B8 рдкрддреЗ рдкрд░ zlib рджреНрд╡рд╛рд░рд╛ рдкреИрдХ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдРрд░реЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдЕрдирдкреИрдХ рдХрд░реЗрдВ:



 from zlib import decompress as unZ base = 0x47C000 - 0x7AE00 # data section base ab=open("ShadeIt9000.exe", "rb").read() open("1.txt", "w").write(unZ(ab[0x47F660-base:],-15)) open("2.txt", "w").write(unZ(ab[0x47F7B8-base:],-15))
      
      





рдЕрдирдкреИрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, 1.txt рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдкрд┐рдХреНрд╕реЗрд▓ shader рд╣реЛрддрд╛ рд╣реИ:



 #version 330 uniform sampler2D u_texture; uniform sampler2D u_gamma; varying vec4 texCoord0; varying vec3 v_param; uint func(vec3 co){ return uint(fract(sin(dot(co ,vec3(17.1684, 94.3498, 124.9547))) * 68431.4621) * 255.); } uvec3 rol(uvec3 value, int shift) { return (value << shift) | (value >> (8 - shift)); } const uvec3 m = uvec3(0xff); void main() { uvec3 t = uvec3(texture2D(u_texture, vec2(texCoord0)).rgb * 0xff) & m; uvec3 g = uvec3(texture2D(u_gamma, vec2(texCoord0)).rgb * 0xff) & m; int s = int(mod(func(v_param), 8)); t = rol(t, s); vec3 c = vec3((t ^ g) & m) / 0xff; gl_FragColor = vec4(c, 1.); }
      
      







2. рдкрд╛рда рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рд╢реАрд░реНрд╖ shader рд╣реЛрддрд╛ рд╣реИ:



 attribute vec3 a_param; varying vec4 texCoord0; varying vec3 v_param; void main(void) { gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; texCoord0 = gl_MultiTexCoord0; v_param = a_param; }
      
      





рдкрд┐рдХреНрд╕реЗрд▓ рд╢реЗрдбрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЦреНрдп рдЬрд╛рдирдХрд╛рд░реА рд▓рд╛рд▓ рд░рдВрдЧ рдореЗрдВ рджреА рдЧрдИ рд╣реИ:



рдЫрд╡рд┐



рдЪрд░ рдЯреА рд╕рдВрд╕рд╛рдзрд┐рдд рдмрдирд╛рд╡рдЯ (рдЗрдирдкреБрдЯ рдлрд╝рд╛рдЗрд▓) рдХрд╛ рд╡рд░реНрддрдорд╛рди рддрддреНрд╡ рдирд┐рдХрд▓рд╛,

рдФрд░ рдЪрд░ рдЬреА рдореЗрдВ, рд╡рд░реНрддрдорд╛рди рдЧрд╛рдорд╛ рддрддреНрд╡ (рдПрдХ рдЫрджреНрдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рддрд░реАрдХреЗ рд╕реЗ рдЙрддреНрдкрдиреНрди)ред

рд╡реЗрд░рд┐рдПрдмрд▓ рдПрд╕ рдореЗрдВ, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдПрд╕ рдХреЗ рдЪрдХреНрд░реАрдп рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП рдмрд╛рдж рдореЗрдВ рдХреБрдЫ рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЖрдЙрдЯрдкреБрдЯ рдорд╛рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ



(rol(t,s) ^ g)







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



рдЧрд╛рдорд╛ рдХреИрд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ:



 unsigned char *pbGamma = malloc(cbGamma); srand(time(0)); for (i = 0; i < cbGamma; i++) { pbGamma[i] = rand(); }
      
      





рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд░реНрддрдорд╛рди рд╕рдордп рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред



рдореВрд▓ рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдЖрдк рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдлрд╝рд╛рдЗрд▓ derrorim_enc.bmp 01/21/2014 рдХреЛ 18:37:52 рдкрд░ рдмрдирд╛рдИ рдЧрдИ рдереАред

рд╣рдореЗрдВ рдорд╛рди рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рдЙрд╕ рд╕рдордп () рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛:



 >>> import time >>> print hex(int(time.mktime((2014,1,21, 18,37,52, 0,0,0))))
      
      







0x52de8640



рдЕрдм рдлрд╛рдЗрд▓ ShadeIt9000.exe рдХреЛ ShadeIt9000_f.exe рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдареАрдХ рдХрд░реЗрдВред



рдСрдлрд╕реЗрдЯ 00015557 рдмрд╛рдЗрдЯреНрд╕ рдХреА рдЬрд░реВрд░рдд рд╣реИ



E8 A5 31 01 00







рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВ



B8 40 86 DE 52







рдпрд╣ рдЬрдЧрд╣ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ



mov eax,52de8640h



рдкрд░ call _time



mov eax,52de8640h



ред



рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдореЗрдВ ShadeIt9000_f рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдорд┐рд▓рд╛, рдЬреЛ рд╣рдореЗрд╢рд╛ рдЙрд╕реА рд╕рд░рдЧрдо тАЛтАЛрдХреЗ рд╕рд╛рде рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рд╣реЛрдЧрд╛, рдЬрдм рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмреНрдпрд╛рдЬ рдХреА рдлрд╝рд╛рдЗрд▓ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЕрдм рдЖрдкрдХреЛ рдЙрди рдореВрд▓реНрдпреЛрдВ рдХреЛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдЫрд╡рд┐ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗ:



 import os bmp=open("derrorim_enc.bmp", "rb").read() hdr = bmp[:0x36] abData = bytearray(bmp[0x36:]) cbBody = len(bmp) - len(hdr) open("00.bmp", "wb").write(hdr + '\0'*cbBody) open("XX.bmp", "wb").write(hdr + '\2'*cbBody) os.system("ShadeIt9000_f.exe 00.bmp") os.system("ShadeIt9000_f.exe XX.bmp")
      
      





00_enc.bmp рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреАрд░реЛ рдмрд╛рдЗрдЯ рд╕реЗ рдорд┐рд▓рдХрд░ рдЪрд┐рддреНрд░ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛ред рдпрд╣ рдЕрдкрдиреЗ рд╢реБрджреНрдзрддрдо рд░реВрдк рдореЗрдВ рдЧрд╛рдорд╛ рд╣реЛрдЧрд╛ред



XX_enc.bmp рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЪрд┐рддреНрд░ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ 2 рдХреЗ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдмрд╛рдЗрдЯреНрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдпрд╣ рд╣рдореЗрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдЗрдЯ рдХреЛ рдЪрдХреНрд░реАрдп рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред



рдЕрдВрдд рдореЗрдВ, Shadelt9000 рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдХреЗ:



 def rol(v,i): return (((v<<i) & 0xFF) | ((v>>(8-i)) & 0xFF)) def ror(v,i): return (((v>>i) & 0xFF) | ((v<<(8-i)) & 0xFF)) dRot = {rol(1,i):i for i in xrange(8)} bmp=open("derrorim_enc.bmp", "rb").read() hdr = bmp[:0x36] abData = bytearray(bmp[0x36:]) abGamma = bytearray(open("00_enc.bmp", "rb").read()[0x36:]) abRot = bytearray(open("XX_enc.bmp", "rb").read()[0x36:]) for i,b in enumerate(abGamma): abRot[i] = dRot[abRot[i] ^ b] for i,b in enumerate(abGamma): abData[i] = ror(abData[i] ^ b, abRot[i]) open("derrorim.bmp", "wb").write(hdr + str(abData))
      
      





рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ:



рдЫрд╡рд┐



рдХрд╛рд░реНрдп рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдкреНрд░рднрд╛рд╡реА рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рд╕рд╣реА рддрд░реАрдХрд╛ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ рдЫреЛрдЯрд╛ рд░рд╛рд╕реНрддрд╛ рд╣реИред



рддреБрд░рдВрдд 0x47F848 рдФрд░ 0x47F9A0 рдкрддреЗ рдкрд░ рд╢реАрд░реНрд╖ рдХреА рдЫрд╛рдпрд╛ рдХреЗ рдкреАрдЫреЗ рдЙрд▓рдЯрд╛ рд░реВрдкрд╛рдВрддрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд┐рдХреНрд╕реЗрд▓ рдФрд░ рд╡рд░реНрдЯреЗрдХреНрд╕ shader рдХреЗ рдкреИрдХ рдХрд┐рдП рд╣реБрдП zlib рдХреЛрдб рдирд┐рд╣рд┐рдд рд╣реИред рд╢рд╛рдпрдж рд╡рд╣ рдЧрд▓рддреА рд╕реЗ рдХрд╛рд░реНрдп рдбрд┐рдЬрд╛рдЗрдирд░ рджреНрд╡рд╛рд░рд╛ рднреВрд▓ рдЧрдпрд╛ рдерд╛ред рдпрд╛ рд╢рд╛рдпрдж рдЬрд╛рдирдмреВрдЭрдХрд░ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред



рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд▓рд┐рдП рд╢реАрд░реНрд╖ shader рдХреЛрдб рд╕рдорд╛рди рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЙрдиреНрд╣реЗрдВ рдЫреВрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рдФрд░ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдкрд┐рдХреНрд╕реЗрд▓ рд╢реЗрдбрд░ рдХреА рдЬрдЧрд╣ рд▓реЗрддреЗ рд╣реИрдВ?



ShadeIt9000_f.exe рдХреЛ ShadeIt9000_d.exe рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдареАрдХ рдХрд░реЗрдВ:



00015775: 60 F6 ==> 48 F8







рдлрд┐рд░ ShadeIt9000_d.exe derrorim_enc.bmp рдЪрд▓рд╛рдПрдВред рдФрд░ рд╣рдореЗрдВ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ derrorim_enc_enc.bmp рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдорд┐рд▓рддрд╛ рд╣реИ, рдЬреЛ (рдЫреЛрдЯреА рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде) рдЙрд╕реА рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкрд╛рдпрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдерд╛ред



рдЖрдЬ рдХреЗ рд▓рд┐рдП рдмрд╕ рдЗрддрдирд╛ рд╣реА! рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж, рд╣рдо рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдореЗрдВ рдкреНрд░рд╕рдиреНрди рд╣реЛрдВрдЧреЗред



рд╣рдо рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддреЗ рд╣реИрдВ рдХрд┐ PHDays IV CTF рдХрд╛ рдлрд╛рдЗрдирд▓ рдкреЙрдЬрд┐рдЯрд┐рд╡ рд╣реИрдХ рдбреЗрдЬрд╝ рдлреЛрд░рдо рдХреЗ рджреМрд░рд╛рди 21 рдФрд░ 22 рдордИ рдХреЛ рд╣реЛрдЧрд╛ред рди рдХреЗрд╡рд▓ рд╕реАрдзреЗ рд╕рд╛рдЗрдЯ рдкрд░, рдмрд▓реНрдХрд┐ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХреА рдкреНрд░рдЧрддрд┐ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рдЦрдмрд░ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ!



рдпрд╣ рднреА рдкрдврд╝реЗрдВ:





рд╣рдо рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддреЗ рд╣реИрдВ рдХрд┐ PHDays IV рдкрд░ рдСрдирд▓рд╛рдЗрди рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рд╣реИрд╢рдирд░ рдФрд░ " рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рдЦреБрдлрд┐рдпрд╛ " рдореЗрдВ рднрд╛рдЧреАрджрд╛рд░реА рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХрд░рдг рд╢реБрд░реВ рд╣реЛ рдЪреБрдХрд╛ рд╣реИ!



PS рд╕рднреА PHDays CTF рдФрд░ CTF Quals рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ PHDays рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЦреБрдж рдХреЛ рдкрд░рдЦрдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИ - рдЖрдЧреЗ рдмрдврд╝реЛ!



рдкреАрдкреАрдПрд╕ рд╡рд┐рд╖рдп рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рджрд┐рдорд┐рддреНрд░реА рд╕реНрдХрд┐рд▓рд╛рд░реЛрд╡ рджреНрд╡рд╛рд░рд╛ рдЖрдпреЛрдЬрд┐рдд рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡реЗрдмрд┐рдирд╛рд░ рдореЗрдВ рд╣реБрдЖред рд╡реЗрдмрд┐рдирд╛рд░ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдпрд╣рд╛рдБ рдЙрдкрд▓рдмреНрдз рд╣реИ: http://my.webinar.ru/record/290241/ ред



All Articles