рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддреЛрдбрд╝ рджреЛ (ZeroNightsCrackme, рднрд╛рдЧ 2)

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

17 рдлрд░рд╡рд░реА, рдПрдХ рдкрддреНрд░ рдПрдХ рдирдИ рджрд░рд╛рд░ рдХреЗ рд╕рд╛рде рдЖрдпрд╛ред рдпрд╣ рдЙрдирдХреЗ рдирд┐рд░реНрдгрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ (рдФрд░ рди рдХреЗрд╡рд▓) рдЬреЛ рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ред

рджрд░рд╛рд░ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╕рдорд╛рди рд╣реИрдВ:

рдЙрдкрдХрд░рдг:

рдЖрдЗрдП рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЙрддрд░реЗрдВ ...

рд╣рдо рд╢рд┐рдХрд╛рд░ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ


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

рдЫрд╡рд┐
рдЕрдВрдЬреАрд░ред 1

рджрд░рд╛рд░ рдХреЗ рд╕рд╛рде рдЕрддреАрдд рдХреЗ рдХрд╛рдо рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдЬрд╛рдирдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдкреНрд░рдореБрдЦ рдмрд┐рдВрджреБрдУрдВ рдХреА рдЦреЛрдЬ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд╛рддреЗ рд╣реИрдВ:
  1. рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред
  2. рд╕рддреНрдпрд╛рдкрди рддрд╛рд▓рд┐рдХрд╛ рд╕рддреНрдпрд╛рдкрди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдоред
  3. рдорд╛рдиреНрдпрддрд╛ рддрд╛рд▓рд┐рдХрд╛ред
  4. рд╕рддреНрдпрд╛рдкрди рддрд╛рд▓рд┐рдХрд╛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдердоред
  5. рд╕рддреНрдпрд╛рдкрди рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ред
  6. рд╕реАрд░рд┐рдпрд▓ рдХреЛрдб рдХреЛ рдЖрдВрддрд░рд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рджрдоред
  7. рд░реВрдкрд╛рдВрддрд░рдг рддрд╛рд▓рд┐рдХрд╛ред
  8. рд╡реИрдз рдЪрд░рд┐рддреНрд░ рд╕реАрдорд╛ред

рдлрд┐рд░ рд╣рдо рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд╕рднреА рдкреНрд░рдореБрдЦ рдмрд┐рдВрджреБрдУрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдВрддрд░ рдкрд╛рддреЗ рд╣реИрдВред

рдЬрд╛рдирд╡рд░реЛрдВ рдХреА рдкрдЧрдбрдВрдбрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде


рдЗрдирдкреБрдЯ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдлрдВрдХреНрд╢рди

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдкрд╛рддреЗ рд╣реИрдВред рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓рддрд╛ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Disassembler рд╡рд┐рдВрдбреЛ рдореЗрдВ рд░рд╛рдЗрдЯ-рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ "Search for => рд╕рднреА рд╕рдВрджрд░реНрднрд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕" рдЪреБрдиреЗрдВ :

рдЫрд╡рд┐
рдЕрдВрдЬреАрд░ред 2

рдЕрдЧрд▓рд╛, рд▓рд╛рдЗрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ "рдЕрдЪреНрдЫрд╛ рдХрд╛рдо, рд╕реАрд░рд┐рдпрд▓ рд╡реИрдз рд╣реИ !!!" рдФрд░ рдпрд╣рд╛рдВ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:

рдЫрд╡рд┐
рдЕрдВрдЬреАрд░ред 3

рд╡рд╛рдВрдЫрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдЕрдзрд┐рдХ рд╣реЛрдЧрд╛ (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдХреЙрд▓ 0x9b12b0 рд╣реИ )ред рддреАрди рдорд╛рдкрджрдВрдбреЛрдВ рдЙрд╕реЗ рдкрд╛рд░рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред Arg2 рдореЗрдВ , Arg1 рд╕реАрд░рд┐рдпрд▓ рдХреЛрдб рдХрд╛ рдЖрдХрд╛рд░ рдФрд░ рд╕реАрд░рд┐рдпрд▓ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреНрд░рдорд╢рдГ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ ECX рдореЗрдВ рдИрдореЗрд▓ рдХреЛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕рддреНрдпрд╛рдкрди рддрд╛рд▓рд┐рдХрд╛ рд╕рддреНрдпрд╛рдкрди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо

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

рдЫрд╡рд┐
рдЕрдВрдЬреАрд░ред 4

рдорд╛рдиреНрдпрддрд╛ рддрд╛рд▓рд┐рдХрд╛ рдкрддрд╛

рд╣рдо рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдХ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдкрд░ рджрд░рд╛рд░реЗрдВ рдЪрд▓рд╛рддреЗ рд╣реИрдВ (рдмреЗрд╢рдХ, рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛ рдХреЛ рджрд░реНрдЬ рдХрд░рдиреЗ рдФрд░ рдЪреЗрдХ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж)ред

рдЫрд╡рд┐
рдЕрдВрдЬреАрд░ред 5. рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рджрд░реНрдЬ рдХрд░реЗрдВ

рдЫрд╡рд┐
рдЕрдВрдЬреАрд░ред 6. рд╕рддреНрдпрд╛рдкрди рддрд╛рд▓рд┐рдХрд╛ рдкрд░ рд░реЛрдХ

рдЕрдм рд╣рдо рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдкрддрд╛ рд╕реНрд╡рдпрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗред рдЖрдк рдЗрд╕реЗ тАЬCMP DWORD PTR SS: [ECX * 4 + EBP-28], 1тАЭ рд▓рд╛рдЗрди рдкрд░ рдЬрд╛рдХрд░ рдФрд░ рдЧрдВрддрд╡реНрдп рдкрддреЗ рдХреЛ рджреЗрдЦрдХрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЫрд╡рд┐
рдЕрдВрдЬреАрд░ред 7. рд╕рддреНрдпрд╛рдкрди рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдкрддрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдкрддрд╛ 0x36f308 (рд▓рд╛рд▓ рд░рдВрдЧ рдореЗрдВ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛) рд╣реИред

рдЫрд╡рд┐
рдЕрдВрдЬреАрд░ред 8. рд╕рддреНрдпрд╛рдкрди рддрд╛рд▓рд┐рдХрд╛ рдбрдВрдк

рд╕рддреНрдпрд╛рдкрди рддрд╛рд▓рд┐рдХрд╛ рднрд░рдиреЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо

рд╣рдо рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдЦреЛрдЬрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рджрд░рд╛рд░ рдХреЗ рд╕рд╛рде рдЕрддреАрдд рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╕рдордп рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдЖрдк рдЦреБрдж рдХреЛ рдпрд╣рд╛рдВ рдкрд╛рдПрдВрдЧреЗ:

рдЫрд╡рд┐
рдЕрдВрдЬреАрд░ред 9. рд╕рддреНрдпрд╛рдкрди рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо

рдпрджрд┐ рдЖрдк рдкреБрд░рд╛рдиреЗ рдХреЗ рд╕рд╛рде рдирдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╡реЗ рдЕрд▓рдЧ рд╣реИрдВ:

рдЫрд╡рд┐
рдЕрдВрдЬреАрд░ред 10. рдкреБрд░рд╛рдирд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо ( рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рд╕реЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ)

рдкрд╛рдпрдерди рдореЗрдВ "рдирдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо" рдХреА рдкреНрд░рд╕реНрддреБрддрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

def create_table(first_part, second_part): result = [] curr_second = 0 out_index = 0 while(out_index < 3): inner_index = 0 while(inner_index < 3): curr_first = 0 accumulator = 0 index = 0 while(index < 3): first = first_part[inner_index + curr_first] second = second_part[index + curr_second] hash = 0 if (first != 0): while (first != 0): if (first & 1): hash ^= second second += second first = first >> 1 accumulator ^= hash index += 1 curr_first += 3 result.append(accumulator & 0xff) inner_index += 1 out_index += 1 curr_second += 3 return result 

рдЖрдЗрдП рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред

рд╕рддреНрдпрд╛рдкрди рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛

рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рджреЛ рд╕реНрдерд╛рди рдкрд╛рдП рдЧрдП рдЬрд╣рд╛рдВ рдЗрд╕рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдЖрдпрд╛ рдерд╛:

рдЫрд╡рд┐
рдЕрдВрдЬреАрд░ред 11. рдирдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ

рдКрдкрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЧреНрд░реЗ рдЖрдпрдд рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, 0x9b11b0 рдФрд░ 0x9b11b2 рдХреЗ рдкрддреЗ рдкрд░, рдирд┐рдореНрди рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ:

рдЫрд╡рд┐
рдЕрдВрдЬреАрд░ред 12

рдЫрд╡рд┐
рдЕрдВрдЬреАрд░ред 13

рдкреНрд░рддреНрдпреЗрдХ рд╕рд░рдгреА рдореЗрдВ 9 рддрддреНрд╡ рд╣реЛрддреЗ рд╣реИрдВ , рдПрдХ-рдПрдХ рдмрд╛рдЗрдЯред

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

рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдирдП рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░

рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рджрд░рд╛рд░реЗрдВ рд╕реАрд░рд┐рдпрд▓ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреА рд╣реИрдВ:
  1. рд╕реАрд░рд┐рдпрд▓ рдХреЛрдб рдХреЛ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
  2. рдкреНрд░рддреНрдпреЗрдХ рднрд╛рдЧ рдХрд╛ рдЖрдВрддрд░рд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд┐рдпрд╛ рдЧрдпрд╛ред
  3. рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рдЧ рдорд┐рд╢реНрд░рд┐рдд (рдорд┐рд╢реНрд░рд┐рдд) рдерд╛ред
  4. рдЙрд╕рдХреЗ рдмрд╛рдж, рд╕рддреНрдпрд╛рдкрди рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛрдиреЛрдВ рднрд╛рдЧреЛрдВ рдХреЛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЕрдВрдд рдореЗрдВ, рд╣рдореЗрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдорд┐рд▓рд╛:

 Serial |- part_1 |- part_2 part_1 = intermediate_view(part_1) part_2 = intermediate_view(part_2) part_1 = mix(part_1) part_2 = mix(part_2) valid_table = algo(part_1, part_2) 

рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдЪреАрдЬреЗрдВ рдереЛрдбрд╝реА рдЬрдЯрд┐рд▓ рд╣реЛ рдЧрдИрдВ:
  1. рд╕реАрд░рд┐рдпрд▓ рдХреЛрдб рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИред
  2. рдЗрд╕рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рдЧ рдЖрдВрддрд░рд┐рдХ рдЕрднреНрдпрд╛рд╡реЗрджрди рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рд╣реИред
  3. рдкрд╣рд▓рд╛ рднрд╛рдЧ + рдирд┐рд╢реНрдЪрд┐рдд рд╕рд░рдгреА (3, 5, 7, 5, 7, 3, 7, 3, 5) рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
  4. рджреВрд╕рд░рд╛ рднрд╛рдЧ + рдирд┐рд╢реНрдЪрд┐рдд рд╕рд░рдгреА (3, 5, 7, 5, 7, 3, 7, 3, 5) рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
  5. рд╕рддреНрдпрд╛рдкрди рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдЖрдЗрдЯрдо 3-4 рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рдорд┐рд▓рддрд╛ рд╣реИ:

 Serial |- part_1 |- part_2 part_1 = intermediate_view(part_1) part_2 = intermediate_view(part_2) part_1 = mix(part_1) part_2 = mix(part_2) salt = [3, 5, 7, 5, 7, 3, 7, 3, 5] part_a = algo(part_1, salt) part_b = algo(part_2, salt) valid_table = algo(part_a, part_b) 

рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рд░рдгреА рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рд╣реИ ред

рд╕реАрд░рд┐рдпрд▓ рдХреЛрдб рдХреЛ рдЖрдВрддрд░рд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рджрдо

рдореИрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рд╕реАрд░рд┐рдпрд▓ рдХреЛрдб рдХрдирд╡рд░реНрдЯрд░ рдХреА рдЦреЛрдЬ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ рдФрд░ рдореИрдВ рдЗрд╕реЗ рдпрд╣рд╛рдВ рдирд╣реАрдВ рджреВрдВрдЧрд╛ред рдЖрдк рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рддрд░рд╣ рд╣реА рдЦреЛрдЬ рд╕рдХрддреЗ рд╣реИрдВред

рд░реВрдкрд╛рдВрддрд░рдг рддрд╛рд▓рд┐рдХрд╛ рдФрд░ рдорд╛рдиреНрдп рд╕реАрдорд╛

рддрд╛рд▓рд┐рдХрд╛ рдФрд░ рдорд╛рдиреНрдп рд╢реНрд░реЗрдгреА рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рдорд╛рди рд╣реИрдВред

рдШрд╛рдд рд▓рдЧрд╛рдХрд░ рднрд╛рдЧрдиреЗ рдХреА рддреИрдпрд╛рд░реА


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

рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:
  1. рдПрд▓реНрдЧреЛ (part_a, part_b) рдХреЗ рд▓рд┐рдП , рдЙрди part_a рдФрд░ part_b рдХреЛ рдЦреЛрдЬреЗрдВ рдЬреЛ рдкрд░рд┐рдгрд╛рдо рджреЗрддреЗ рд╣реИрдВ [1, 0, 0, 0, 1, 0, 0, 0, 1]ред
  2. Part_a = algo (part_1, рдирдордХ) рдХреЗ рд▓рд┐рдП , рдПрдХ part_1 рдЦреЛрдЬреЗрдВ рдЬреЛ part_a рдХреЗ рдмрд░рд╛рдмрд░ рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ ред
  3. Part_b = algo (part_2, рдирдордХ) рдХреЗ рд▓рд┐рдП , рдПрдХ part_2 рдвреВрдБрдвреЗрдВ рдЬреЛ part_b рдХреЗ рдмрд░рд╛рдмрд░ рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ ред

рдЖрдЗрдП рд╢реБрд░реБрдЖрдд рдЕрд▓реНрдЧреЛ (part_a, part_b) рд╕реЗ рдХрд░реЗрдВ

рдпрджрд┐ рдЖрдк рдкрд╣рд▓рд╛ рд▓реЗрдЦ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рд╢рд╛рдпрдж рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЖрд╡рд╢реНрдпрдХ рддрд╛рд▓рд┐рдХрд╛ [1, 0, 0, 0, 1, 0, 0, 1] рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ рдмрд╛рдЗрдЯреНрд╕ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдпрд╛ рддреЛ " рд╢реВрдиреНрдп " , рдпрд╛ " рдЗрдХрд╛рдЗрдпрд╛рдБ " ред

рджрд░рд╛рд░ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдЗрди рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдЦреЛрдЬрдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рдерд╛ред рдЬреЛ рдХреБрдЫ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдерд╛ рд╡рд╣ рдкреВрд░реЗ рдЙрдкрд▓рдмреНрдз рд╡рд░реНрдгрдорд╛рд▓рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЫрд╛рдВрдЯрдирд╛ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рд░рд▓ рдСрдкрд░реЗрд╢рди рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдерд╛ред

рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдпрд╣ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИ (рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рд╣реИ рдФрд░ рдиреАрдЪреЗ рдореИрдВ рд╕рдордЭрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреНрдпреЛрдВ)ред рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рд╣рдо рдПрдХ рддрддреНрд╡ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рд╣рдореЗрдВ рддреАрди рддрддреНрд╡реЛрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рдиреА рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕рднреА рдкрд░рд╕реНрдкрд░ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВред

рдФрд░ рдЗрд╕рд▓рд┐рдП, рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрдЯрд┐рд▓ рдХреНрдпреЛрдВ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ?

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

рдареАрдХ рд╣реИ, рдареАрдХ рд╣реИ, рдХрдо рд╢рдмреНрдж рдЕрдзрд┐рдХ рд╡реНрдпрд╡рд╕рд╛рдп рд╣реИрдВред

рдпрд╣рд╛рдБ рдПрдХ рдЬрд╛рджреБрдИ "рдордВрддреНрд░" рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╕рднреА рдЕрд╢рдХреНрдд рдФрд░ рдПрдХрд▓ рдкрд╛рддреНрд░реЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛:

 data_zero, data_ones = [], [] for a in range(0, 256): part_a = [a, a, a, a, a, a, a, a, a] part_b = [a, a, a, a, a, a, a, a, a] result = create_table(part_a, part_b) if result == [0, 0, 0, 0, 0, 0, 0, 0, 0]: data_zero.append(a) elif result == [1, 1, 1, 1, 1, 1, 1, 1, 1]: data_ones.append(a) print("ZERO:", data_zero) print("ONES:", data_ones) 

рдЫрд╡рд┐
рдЕрдВрдЬреАрд░ред 14

рдареАрдХ рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ "рд╢реВрдиреНрдп" рдФрд░ "рд╡рд╛рд▓реЗ" рддрддреНрд╡реЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИред рд╡рд╛рдВрдЫрд┐рдд рддрд╛рд▓рд┐рдХрд╛ [1, 0, 0, 1, 0, 0, 0, 1] рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ?

рд╕рдмрд╕реЗ рдЪреМрдХрд╕ / рд╕рд░рд▓ рд╡реНрдпрдХреНрддрд┐ рдиреЛрдЯрд┐рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ) рдХрд┐ рд╣рдо рдореИрдЯреНрд░рд┐рд╕ рд╕реЗ рдирд┐рдкрдЯ рд░рд╣реЗ рд╣реИрдВ, рдЬрдм рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдпреВрдирд┐рдЯ рдореИрдЯреНрд░рд┐рдХреНрд╕ [1, 0, 0, 0, 1, 0, 1, 0, 0] рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред 1]ред рдЗрд╕рд▓рд┐рдП, рдПрдХ рдЗрдХрд╛рдИ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдпрд╛ рддреЛ рджреЛ рдпреВрдирд┐рдЯ рдореИрдЯреНрд░реЗрд╕ рдпрд╛ рджреЛ рд╡реНрдпреБрддреНрдХреНрд░рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдЖрд╡рд╢реНрдпрдХ рдЗрдХрд╛рдИ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдирд┐рдореНрди рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 #  part_a = [y, x, x, x, y, x, x, x, y] part_b = [y, x, x, x, y, x, x, x, y] result = algo(part_a, part_b) 

рдЬрд╣рд╛рдВ y рдХреЗ рд╕реНрдерд╛рди рдкрд░ - рдХрд┐рд╕реА рднреА рдПрдХрд▓ рд╡рд░реНрдг рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ, рдФрд░ x рдХреЗ рдмрдЬрд╛рдп - рдХреЛрдИ рд╢реВрдиреНрдпред

рдЖрдк рдЕрдиреНрдп рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдк рдЙрдиреНрд╣реЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд "рдордВрддреНрд░" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

 happy = [1,32] for byte_1 in happy: for byte_2 in happy: for byte_3 in happy: for byte_4 in happy: for byte_5 in happy: for byte_6 in happy: for byte_7 in happy: for byte_8 in happy: for byte_9 in happy: part_1 = [byte_1, byte_2, byte_3, byte_4, byte_5, byte_6, byte_7, byte_8, byte_9] part_2 = [byte_1, byte_2, byte_3, byte_4, byte_5, byte_6, byte_7, byte_8, byte_9] result = create_table(part_1, part_2) if result == [1, 0, 0, 0, 1, 0, 0, 0, 1]: print("%s | %s " % (part_2, part_1)) 

рдЫрд╡рд┐
рдЕрдВрдЬреАрд░ред 15

рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдкреИрдЯрд░реНрди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 patterns = [ # Pattern 0 [ [y1, x1, x1, x1, y2, x1, x1, x1, y3], [y1, x1, x1, x1, y2, x1, x1, x1, y3] ], # Pattern 1a [ [y1, x1, x1, x1, x1, y1, x1, y1, x1], [y1, x1, x1, x1, x1, y1, x1, y1, x1] ], # Pattern 1b [ [y1, x1, x2, x3, x4, y1, x5, y1, x6], [y1, x2, x1, x5, x6, y1, x3, y1, x4] ], # Pattern 2a [ [y1, x1, x1, x1, y1, x1, x1, x1, y1], [y1, x1, x1, x1, y1, x1, x1, x1, y1] ], # Pattern 2b [ [y1, x1, x2, x3, y2, x4, x5, x6, y3], [y1, x1, x2, x3, y2, x4, x5, x6, y3] ], # Pattern 3a [ [x1, x1, y1, x1, y1, x1, y1, x1, x1], [x1, x1, y1, x1, y1, x1, y1, x1, x1] ], # Pattern 3b [ [x1, x2, y1, x3, y2, x4, y3, x5, x6], [x6, x5, y3, x4, y2, x3, y1, x2, x1] ], # Pattern 4a [ [x1, y1, x1, y1, x1, x1, x1, x1, y1], [x1, y1, x1, y1, x1, x1, x1, x1, y1] ], # Pattern 4b [ [x1, y1, x2, y2, x3, x4, x5, x6, y3], [x3, y2, x4, y1, x1, x2, x6, x5, y3] ], # Pattern 5 [ [x1, x2, y1, y2, x3, x4, x5, y3, x6], [x4, y2, x3, x6, x5, y3, y1, x1, x2] ] ] 

рдЕрдм рдЬрдм рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЖрд╡рд╢реНрдпрдХ рдкрд╣рдЪрд╛рди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ (рдпрд╛рдиреА, рд╕рддреНрдпрд╛рдкрди рдЯреЗрдмрд▓), рд╣рдо рдЕрдиреНрдп рд╕рдорд╕реНрдпрд╛рдУрдВ рдкрд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗред

рдЙрдкрдпреБрдХреНрдд part_a рдФрд░ part_b рдХреИрд╕реЗ рдЪреБрдиреЗрдВ?

рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬрд╛рдирддреЗ рд╣реИрдВ:

 part_a = algo(part_1, salt) part_b = algo(part_2, salt) valid_table = algo(part_a, part_b) 

рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, part_a part_1 рдФрд░ рдирдордХ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ part_a рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреЛ рдиреАрдЪреЗ рдмрддрд╛рддреА рд╣реИ ред рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИред

рд╣рдо рдХрд┐рди рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдИ рд▓реЛрдЧреЛрдВ рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд▓рд┐рдпрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдпрд╣ рд╕рд╣реА рд╣реИ, рдЕрдЧрд▓реЗ "рдЬрд╛рджреВ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ!

рдпрд╣рд╛рдБ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ:

 # serial_data  email тАЬsupport@reverse4you.orgтАЭ serial_data = [52, 233, 91, 105, 65, 15, 50, 176, 90, 40, 225, 81, 207, 79, 34, 19] def get_items(first_part, second_part): result = [] inner_index = 0 while(inner_index < 3): curr_first = 0 accumulator = 0 index = 0 while(index < 3): first = first_part[inner_index + curr_first] second = second_part[index] hash = 0 if (first != 0): while (first != 0): if (first & 1): hash ^= second second += second first = first >> 1 accumulator ^= hash index += 1 curr_first += 3 result.append(accumulator & 0xff) inner_index += 1 return result a = 0x3 b = 0x5 c = 0x7 first_part = [a, b, c, b, c, a, c, a, b] second_part_new = [0, 0, 0] count = 0 result_table = [] for byte_1 in serial_data: second_part_new[0] = byte_1 for byte_2 in serial_data: second_part_new[1] = byte_2 for byte_3 in serial_data: second_part_new[2] = byte_3 res = get_items(first_part, second_part_new) print("index: %s, table: %s" % (count, res)) count += 1 print("Count: %s" % count) 

рдпрджрд┐ рдЖрдкрдХрд╛ "рд╡рд░реНрддрдиреА" рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ part_a рдФрд░ part_b рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ 4096 рд╡рд┐рдХрд▓реНрдк рдЙрдкрд▓рдмреНрдз рд╣реИрдВ (рдЕрдзрд┐рдХ рд╕рдЯреАрдХ, "рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рддрд╣рдд")ред

рдЫрд╡рд┐
рдЕрдВрдЬреАрд░ред 16

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

рдкрд╣рд▓рд╛ рд╢рд┐рдХрд╛рд░ (рдкрд╣рд▓реА рд╡реИрдз рдХреБрдВрдЬреА)


рдпрджрд┐ рдЖрдк рд╕рд╛рд╡рдзрд╛рди рдереЗ, рддреЛ рдЖрдкрдиреЗ рд╢рд╛рдпрдж рджреЗрдЦрд╛ рдХрд┐ рд╕рднреА 4096 рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рджреЛ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, "рд╕рднреА рддрддреНрд╡ рд╕рдорд╛рди рд╣реИрдВ" рдФрд░ "рд╕рднреА рддрддреНрд╡ рднреА рдирд╣реАрдВ рд╣реИрдВ" ред

рд╕реВрдЪрдХрд╛рдВрдХ: режрежрейрел, рддрд╛рд▓рд┐рдХрд╛: [резрезрем, реиреиреи, рез <реи ] <= рд╕рднреА рддрддреНрд╡ рд╕рдо рд╣реИрдВ
рд╕реВрдЪрдХрд╛рдВрдХ: режрелремреж, рддрд╛рд▓рд┐рдХрд╛: [рез , реи , резрезрем, реиреиреи] <= рд╕рднреА рддрддреНрд╡ рд╕рдо рд╣реИрдВ
рд╕реВрдЪрдХрд╛рдВрдХ: 0770, рддрд╛рд▓рд┐рдХрд╛: [222, 172, 116] <= рд╕рднреА рддрддреНрд╡ рд╕рдорд╛рди рд╣реИрдВ

рд╕реВрдЪрдХрд╛рдВрдХ: 0117, рддрд╛рд▓рд┐рдХрд╛: [1, 229, 111] <= рд╕рднреА рддрддреНрд╡ рднреА рдирд╣реАрдВ рд╣реИрдВ
рд╕реВрдЪрдХрд╛рдВрдХ: 1287, рддрд╛рд▓рд┐рдХрд╛: [229, 111, 1] <= рд╕рднреА рддрддреНрд╡ рднреА рдирд╣реАрдВ рд╣реИрдВ
рд╕реВрдЪрдХрд╛рдВрдХ: 1872, рддрд╛рд▓рд┐рдХрд╛: [111, 1, 229] <= рд╕рднреА рддрддреНрд╡ рднреА рдирд╣реАрдВ рд╣реИрдВ

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

рдпрд╣рд╛рдБ рджреЛ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рдкрд╣рдЪрд╛рди рджреЗрддреЗ рд╣реИрдВ:

part_a
[рез 65рем, рез 65рем, ремрел] <= рдпрд╣рд╛рдБ рддрдХ рдХрд┐ рдФрд░ рднреА рдирд╣реАрдВ рд╣реИрдВ
[рез 176рем, ремрел, рез 176рем] <= рдпрд╣рд╛рдБ рддрдХ рдХрд┐ рдФрд░ рднреА рдирд╣реАрдВ рд╣реИрдВ
[ремрел, рез 176рем, рез 176рем] <= рдпрд╣рд╛рдБ рддрдХ рдХрд┐ рдФрд░ рднреА рдирд╣реАрдВ рд╣реИрдВ

part_b
[рез 65рем, рез 65рем, ремрел] <= рдпрд╣рд╛рдБ рддрдХ рдХрд┐ рдФрд░ рднреА рдирд╣реАрдВ рд╣реИрдВ
[рез 176рем, ремрел, рез 176рем] <= рдпрд╣рд╛рдБ рддрдХ рдХрд┐ рдФрд░ рднреА рдирд╣реАрдВ рд╣реИрдВ
[ремрел, рез 176рем, рез 176рем] <= рдпрд╣рд╛рдБ рддрдХ рдХрд┐ рдФрд░ рднреА рдирд╣реАрдВ рд╣реИрдВ

valid_table = part_a * part_a
[рез, реж, реж]
[реж, рез, реж]
[реж, реж, рез]

рдЪреВрдВрдХрд┐ "рд╕рдо" рдФрд░ "рд╕рдо" рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдИ "рд╡рд┐рдХрд▓реНрдк" рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ рдХрд┐ рджрд░рд╛рд░ рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реИред рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИред

рдЧрд▓рддреА рдХреНрдпрд╛ рд╣реИ?

рдПрдХ рддреНрд╡рд░рд┐рдд рд╡рд┐рдЪрд╛рд░ рдХреЗ рдмрд╛рдж, рд╣рдо рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ рдХрд┐ рддреНрд░реБрдЯрд┐ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ [0x3, 0x5, 0x7, 0x5, 0x7, 0x3, 0x7, 0x3, 0x5] ред рд╕рдорд╛рди рдФрд░ рд╡рд┐рд╖рдо "рд╡рд┐рдХрд▓реНрдк" рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреНрд░рдорд╢рдГ "0x2 " , "0x5" рдФрд░ "0x7" рдХреЛ "0x2" , "0x3" рдФрд░ "0x8" рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╛ рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде, рдЬрд╣рд╛рдВ рджреЛ рд╕рдорд╛рди рдФрд░ рдПрдХ рд╡рд┐рд╖рдо рддрддреНрд╡ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдРрд╕реЗ "0x4" , "0x7" рдФрд░ "0x8" (рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ) рдкрд░ред

рдпрд╣ рддреНрд░реБрдЯрд┐ Kaspersky Lab рдХреЛ рдмрддрд╛рдИ рдЧрдИ рдереАред рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рд╕рдВрд╕реНрдХрд░рдг (рдЬрд┐рд╕рдХреА рд╣рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЬрд╛рдВрдЪ рдХрд░ рд░рд╣реЗ рд╣реИрдВ) рдПрдХ рдорд╕реМрджрд╛ рд╣реИред рдЬрд┐рд╕рдХреЗ рдмрд╛рдж, рдЙрд╕реА рджрд┐рди, рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рд╕рднреА рдХреЛ рднреЗрдЬрд╛ рдЧрдпрд╛ рдерд╛ред рд╕рдЪ рд╣реИ, рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдХреЛрдИ рдирд┐рд╢реНрдЪрд┐рдд рддрд╛рд▓рд┐рдХрд╛рдПрдБ рдирд╣реАрдВ рдереАрдВ рдФрд░ рдЗрд╕реЗ рдЗрд╕рд╕реЗ рднреА рдЖрд╕рд╛рди рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдмреЛрдирд╕ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдмрд╛рдд рдХрд░реВрдБрдЧрд╛ :)

рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЖрдкрдиреЗ рд╕рд╣реА рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд┐рдпрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк "0x2" , "0x3" рдФрд░ "0x8" ) рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рд╡рд░реНрдг рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд "рд╡рд░реНрддрдиреА" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

 serial_data = [52, 233, 91, 105, 65, 15, 50, 176, 90, 40, 225, 81, 207, 79, 34, 19] a = 0x2 b = 0x3 c = 0x8 first_part = [a, b, c, b, c, a, c, a, b] second_part_new = [0, 0, 0] count = 0 result_table = [] for byte_1 in serial_data: second_part_new[0] = byte_1 for byte_2 in serial_data: second_part_new[1] = byte_2 for byte_3 in serial_data: second_part_new[2] = byte_3 res = get_items(first_part, second_part_new) print("index: %s, table: %s" % (count, res)) if (res[0] % 16 == 0 and res[1] % 16 == 0 and res[2] % 16 == 1) or\ (res[0] % 16 == 1 and res[1] % 16 == 0 and res[2] % 16 == 0) or\ (res[0] % 16 == 0 and res[1] % 16 == 1 and res[2] % 16 == 0): result_table.append(res) count += 1 print("Count:", count) print("Good:", result_table) 

рдпрджрд┐ рдЪрд╛рд░рд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ (рдЬреИрд╕рд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, "0x2, 0x3, 0x8"), рддреЛ рдЖрдкрдХреЗ рдЬрд╛рд▓ рдореЗрдВ ("рдЕрдЪреНрдЫрд╛" рдлрд╝реАрд▓реНрдб) рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЬрд╛рдирд╡рд░ (рддреАрди рд╕рд░рдгрд┐рдпреЛрдВ рд╕реЗ рдпреБрдХреНрдд рд╕рдореВрд╣) рд╣реЛрдЧрд╛ред рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЖрдЙрдЯрдкреБрдЯ (рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде "0x2", "0x3" рдФрд░ "0x8") рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдЫрд╡рд┐
рдЕрдВрдЬреАрд░ред 17

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рднрд╛рдЧреНрдп рд╣рдореЗрдВ рджреЗрдЦрдХрд░ рдореБрд╕реНрдХреБрд░рд╛рдпрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдЬрд╛рд▓ рдореЗрдВ рддреАрди рдЬрдВрдЧрд▓реА рдЬрд╛рдирд╡рд░ рдереЗ, рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрд╕рд╡ рдХреА рдореЗрдЬ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗ (рдпрд╛рдиреА, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ part_a рдФрд░ part_b рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред

рд╕рдмрд╕реЗ рдЪреМрдХрд╕ рд▓реЛрдЧреЛрдВ рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдзреНрдпрд╛рди рджрд┐рдпрд╛ рд╣реИ рдХрд┐ "рдЧреБрдб" рд▓рд╛рдЗрди рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рддреАрди рд▓рд╛рдЗрдиреЗрдВ рд╣реЛрдВрдЧреАред

[реж, резрекрек, 81рез]
[144рез, реж, резрекрек]
[резрекрек, 0рез, реж]

[резрекрек, резрекрел, реж]
[реж, резрекрек, резрекрел]
[резрекрел, реж, резрекрек]

[реж, резрекрек, реиреж реп]
[реиреж реп, реж, резрекрек]
[резрекрек, реиреж реп, реж]

рдФрд░ рднреА рдЕрдзрд┐рдХ рдЪреМрдХрд╕ рд╢рд╛рдпрдж рджреЗрдЦрд╛ рдХрд┐ рдЗрди рд╕рднреА рдкрд╛рддреНрд░реЛрдВ рдХреЛ "рд╢реВрдиреНрдп" рдФрд░ "рдПрдХрд▓" рд╡рд░реНрдгреЛрдВ рдХреЗ рд╕реЗрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ;)

рдЫрд╡рд┐
рдЕрдВрдЬреАрд░ред 18

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

 #   # [0, 144, 209] # [209, 0, 144] # [144, 209, 0] a = 144 b = 209 c = 0 #      part_a = [c, a, b, b, c, a, a, b, c] part_b = [a, b, c, c, a, b, b, c, a] # part_a1 = [0, 144, 209] # part_a2 = [209, 0, 144] # part_a3 = [144, 209, 0] # part_a = part_a1 + part_a2 + part_a3 # part_b1 = [144, 209, 0] # part_b2 = [0, 144, 209] # part_b3 = [209, 0, 144] # part_b = part_b1 + part_b2 + part_b3 result = create_table(part_a, part_b) print(result) 

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

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

рдмреЛрдирд╕ (рдирдИ рджрд░рд╛рд░ рдХрд╛ рдХреАрдЬрди + рд╡рд┐рд╡рд░рдг)


рдЙрдкрд▓рдмреНрдз рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рди рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрдирдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯрддрд╛ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдВрдЧреЗ:

рд╕рддреНрдпрд╛рдкрди рддрд╛рд▓рд┐рдХрд╛ рд╕рддреНрдпрд╛рдкрди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдФрд░ рд╕рддреНрдпрд╛рдкрди рддрд╛рд▓рд┐рдХрд╛ рд╕реНрд╡рдпрдВ

V1 рдФрд░ v2 рдХреЗ рд╕рднреА рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рддрд░рд╣ред

рд╕рддреНрдпрд╛рдкрди рддрд╛рд▓рд┐рдХрд╛ рднрд░рдиреЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо

рдЬреИрд╕рд╛ рдХрд┐ v2 рдХреЗ рдбреНрд░рд╛рдлреНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ (рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ)ред

рд╕рддреНрдпрд╛рдкрди рддрд╛рд▓рд┐рдХрд╛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛

рдСрдкрд░реЗрд╢рди рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд v1 рдХреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдорд┐рдХреНрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕реАрд░рд┐рдпрд▓ рдХреЛрдб рдХреЛ рдЖрдВрддрд░рд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡, рд░реВрдкрд╛рдВрддрд░рдг рддрд╛рд▓рд┐рдХрд╛ рдФрд░ рдорд╛рдиреНрдп рд╢реНрд░реЗрдгреА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рджрдо

V1 рдФрд░ v2 рдХреЗ рд╕рднреА рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рддрд░рд╣ред

рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХреАрдЬрди

рд╕рдВрд╕реНрдХрд░рдг v2 рдФрд░ v3 рдХреЗ рдХреНрд░реИрдХ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд╣рд╛рдВ рдЖрдкрдХреЛ рдбрд╛рд░реНрд╡рд┐рди рдХреА рдУрд░ рд╕реЗ v3 рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХреАрдЬреЗрди рднреА рдорд┐рд▓реЗрдВрдЧреЗред

рдХреАрдЬреЗрди рдЖрд░реНрдХрд╛рдЗрд╡ рдкрд╛рд╕рд╡рд░реНрдб: Darwin_1iOi7q7IQ1wqWiiIIw

рджрд░рд╛рд░ рдХреЗ рддреАрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХреАрдЬрди рдХреА рдЬрд╛рдБрдЪ:

> keygen_v3.py habrahabr.ru> result.txt

рдЫрд╡рд┐
рдЕрдВрдЬреАрд░ред 19

рдЫрд╡рд┐
рдЕрдВрдЬреАрд░ред 20

рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж рдЕрдВрдд рддрдХ рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж! рдЬрд▓реНрдж рдорд┐рд▓рддреЗ рд╣реИрдВ!

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


All Articles