рдЗрдВрдбрд╕реНрдЯреНрд░рд┐рдпрд▓ рдирд┐рдВрдЬрд╛ рдХреЗ рдирдХреНрд╢реЗрдХрджрдо рдкрд░: рдкреЙрдЬрд┐рдЯрд┐рд╡ рд╣реИрдХ рдбреЗрдЬрд╝ 9 рдореЗрдВ рдПрдХ рдкреАрдПрд▓рд╕реА рдХреЛ рдХреИрд╕реЗ рд╣реИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛

рдЗрдВрдбрд╕реНрдЯреНрд░рд┐рдпрд▓ рдирд┐рдВрдЬрд╛ рдХреЗ рдирдХреНрд╢реЗрдХрджрдо рдкрд░: рдкреЙрдЬрд┐рдЯрд┐рд╡ рд╣реИрдХ рдбреЗрдЬрд╝ 9 рдореЗрдВ рдПрдХ рдкреАрдПрд▓рд╕реА рдХреЛ рдХреИрд╕реЗ рд╣реИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛

рдкрд┐рдЫрд▓реЗ PHDays 9 рдореЗрдВ рд╣рдордиреЗ рдЧреИрд╕ рдкрдВрдкрд┐рдВрдЧ рдкреНрд▓рд╛рдВрдЯ рдХреЛ рд╣реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдЖрдпреЛрдЬрд┐рдд рдХреА - рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдФрджреНрдпреЛрдЧрд┐рдХ рдирд┐рдВрдЬрд╛. рд╕рд╛рдЗрдЯ рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реБрд░рдХреНрд╖рд╛ рдорд╛рдкрджрдВрдбреЛрдВ (рдХреЛрдИ рд╕реБрд░рдХреНрд╖рд╛ рдирд╣реАрдВ, рдХрдо рд╕реБрд░рдХреНрд╖рд╛, рдЙрдЪреНрдЪ рд╕реБрд░рдХреНрд╖рд╛) рдХреЗ рд╕рд╛рде рддреАрди рд╕реНрдЯреИрдВрдб рдереЗ, рдЬреЛ рдПрдХ рд╣реА рдФрджреНрдпреЛрдЧрд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддреЗ рдереЗ: рджрдмрд╛рд╡ рдореЗрдВ рд╣рд╡рд╛ рдХреЛ рдПрдХ рдЧреБрдмреНрдмрд╛рд░реЗ рдореЗрдВ рдкрдВрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдФрд░ рдлрд┐рд░ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред

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

рдЗрдВрдбрд╕реНрдЯреНрд░рд┐рдпрд▓ рдирд┐рдВрдЬрд╛ рдХреЗ рдирдХреНрд╢реЗрдХрджрдо рдкрд░: рдкреЙрдЬрд┐рдЯрд┐рд╡ рд╣реИрдХ рдбреЗрдЬрд╝ 9 рдореЗрдВ рдПрдХ рдкреАрдПрд▓рд╕реА рдХреЛ рдХреИрд╕реЗ рд╣реИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛

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

рдЗрд╕ рдореЛрдб рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдореЗрдВ рд╕реНрдЯреИрдВрдб рднрд┐рдиреНрди рдереЗ: рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╕реНрдЯреИрдВрдб рдкрд░ рдРрд╕рд╛ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдерд╛, рдФрд░ рдЙрдЪреНрдЪ рд╕реБрд░рдХреНрд╖рд╛ рд╕реНрдЯреИрдВрдб рдкрд░ рдпрд╣ рддрджрдиреБрд╕рд╛рд░ рдЕрдзрд┐рдХ рдХрдард┐рди рдерд╛ред

рдЫрд╣ рдореЗрдВ рд╕реЗ рдкрд╛рдВрдЪ рд╕рдорд╕реНрдпрд╛рдПрдВ рджреЛ рджрд┐рдиреЛрдВ рдореЗрдВ рд╣рд▓ рд╣реЛ рдЧрдИрдВ; рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ рд░рд╣рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддрд┐рднрд╛рдЧреА рдиреЗ 233 рдЕрдВрдХ рдЕрд░реНрдЬрд┐рдд рдХрд┐рдП (рдЙрд╕рдиреЗ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХреА рддреИрдпрд╛рд░реА рдореЗрдВ рдПрдХ рд╕рдкреНрддрд╛рд╣ рдмрд┐рддрд╛рдпрд╛)ред рддреАрди рд╡рд┐рдЬреЗрддрд╛: I рд╕реНрдерд╛рди - a1exdandy, II - Rubikoid, III - Zeред

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

рдХрдЯ рдХреЗ рдиреАрдЪреЗ рд╣рдо рдорд╣реАрдиреЗ рднрд░ рдореЗрдВ рднреЗрдЬреЗ рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдХрд╛рд░реНрдп рдХреЗ рд╕рд░реНрд╡реЛрддреНрддрдо рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдбрд┐рдЬрд┐рдЯрд▓ рд╕реБрд░рдХреНрд╖рд╛ рдХрдВрдкрдиреА рдХреЗ рдПрд▓реЗрдХреНрд╕реА рдХреЛрд╡рд░рд┐рдЬрд╝реНрдирд┐рдЦ (a1exdandy) рджреНрд╡рд╛рд░рд╛ рдкрд╛рдпрд╛ рдЧрдпрд╛, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ PHDays рдХреЗ рджреМрд░рд╛рди рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдореЗрдВ рдкреНрд░рдердо рд╕реНрдерд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ред рдиреАрдЪреЗ рд╣рдо рдЗрд╕рдХрд╛ рдкрд╛рда рдЕрдкрдиреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг

рддреЛ, рдХрд╛рд░реНрдп рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рд╡рд╛рд▓рд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╢рд╛рдорд┐рд▓ рдерд╛:

  • рдмреНрд▓реЙрдХ_рдЕрдкрд▓реЛрдб_рдЯреНрд░реИрдлрд╝рд┐рдХ.pcapng
  • DB100.bin
  • рд╕рдВрдХреЗрдд.txt

рд╕рдВрдХреЗрдд.txt рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрд╛рд░реНрдп рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдФрд░ рд╕рдВрдХреЗрдд рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдпрд╣рд╛рдБ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рд╣реИ:

  1. рдкреЗрддреНрд░реЛрд╡рд┐рдЪ рдиреЗ рдХрд▓ рдореБрдЭреЗ рдмрддрд╛рдпрд╛ рдХрд┐ рдЖрдк PlcSim рд╕реЗ рд╕реНрдЯреЗрдк7 рдореЗрдВ рдмреНрд▓реЙрдХ рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  2. рд╕реНрдЯреИрдВрдб рдкрд░ рд╕реАрдореЗрдВрд╕ рд╕рд┐рдореЗрдЯрд┐рдХ рдПрд╕7-300 рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкреАрдПрд▓рд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
  3. PlcSim рдПрдХ PLC рдПрдореБрд▓реЗрдЯрд░ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╕реАрдореЗрдВрд╕ S7 PLC рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд▓рд╛рдиреЗ рдФрд░ рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ DB100.bin рдлрд╝рд╛рдЗрд▓ рдореЗрдВ DB100 PLC рдбреЗрдЯрд╛ рдмреНрд▓реЙрдХ рд╢рд╛рдорд┐рд▓ рд╣реИ: 00000000: 0100 0102 6e02 0401 0206 0100 0101 0102 ....n......... 00000010: 1002 0501 0202 2002 0501 0206 0100 0102 00000020 0102 . ............ 7702: 0401 0206 0100 0103 0102 0 02 00000030a0501 ..w........... 0202: 1602 0501 0206 0100 0104 0102 00000040 7502 ................ 0401: 0206 0100 0105 0102 0 02 0501a00000050 0202 рдпреВ........... 1602: 0501 0206 0100 0106 0102 3402 4 00000060............0401. 0206: 0100 0107 0102 2602 0501 0202 00000070 4 ........... & ..... 02: 0501C0206 0100 0108 0102 3302 0401 3 00000080 0206 L ......... 0100ред .. 0109 : 0102 0 02 0501 0202a1602 00000090 0501 0206 ................ 0100: 010 0102 3702 0401a 0206 7 000000 0 .......0100. .... 010a0102: 2202 0501b 0202 4602 0501 000000 0 0206 ......"...F... 0100b010: 0102 3302 0401c 0206 0100 3 000000 0 ........010. .... .. 0102c0: 02d 0501 0202a1602 0501 0206 000000 0 0100 ................ 010d0102: 6 02e 0401 0206d0100 010 000000 0 0102f ......m.... .... 1102e0501: 0202 2302 0501 0206 0100 000000 0 0110 ........#...... 0102f3502: 0401 0206 0100 0111 0102 5 00000100 1202 ....0501. ..... ..... 0202: 2502 0501 0206 0100 0112 00000110 0102 3302 ......%... 0401: 0206 0100 0113 0102 2602 3 00000120 0501 ..0202. ..... ....&. 4: 02 0501 0206c0100 XNUMX XNUMX XNUMX ....L......

рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рдмреНрд▓реЙрдХ_рдЕрдкрд▓реЛрдб_рдЯреНрд░реИрдлрд╝рд┐рдХ.рдкреАрдХреИрдкрдПрдирдЬреА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреАрдПрд▓рд╕реА рдкрд░ рдмреНрд▓реЙрдХ рдЕрдкрд▓реЛрдб рдЯреНрд░реИрдлрд╝рд┐рдХ рдХрд╛ рдбрдВрдк рд╣реЛрддрд╛ рд╣реИред

рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╕рдореНрдореЗрд▓рди рдХреЗ рджреМрд░рд╛рди рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рд╕реНрдерд▓ рдкрд░ рдЗрд╕ рдЯреНрд░реИрдлрд╝рд┐рдХ рдбрдВрдк рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рдерд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, TeslaSCADA2 рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдордЭрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдЗрд╕рд╕реЗ рдпрд╣ рд╕рдордЭрдирд╛ рд╕рдВрднрд╡ рдерд╛ рдХрд┐ RC4 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдбрдВрдк рдХрд╣рд╛рдБ рд╕реНрдерд┐рдд рдерд╛ рдФрд░ рдЗрд╕реЗ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред S7 рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╛рдЗрдЯ рдкрд░ рдбреЗрдЯрд╛ рдмреНрд▓реЙрдХ рдХреЗ рдбрдВрдк рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ Snap7 рдкреИрдХреЗрдЬ рд╕реЗ рдбреЗрдореЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред

рдЯреНрд░реИрдлрд╝рд┐рдХ рдбрдВрдк рд╕реЗ рд╕рд┐рдЧреНрдирд▓ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдмреНрд▓реЙрдХ рдирд┐рдХрд╛рд▓рдирд╛

рдбрдВрдк рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рджреЗрдЦрдХрд░, рдЖрдк рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдореЗрдВ рд╕рд┐рдЧреНрдирд▓ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдмреНрд▓реЙрдХ OB1, FC1, FC2 рдФрд░ FC3 рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

рдЗрдВрдбрд╕реНрдЯреНрд░рд┐рдпрд▓ рдирд┐рдВрдЬрд╛ рдХреЗ рдирдХреНрд╢реЗрдХрджрдо рдкрд░: рдкреЙрдЬрд┐рдЯрд┐рд╡ рд╣реИрдХ рдбреЗрдЬрд╝ 9 рдореЗрдВ рдПрдХ рдкреАрдПрд▓рд╕реА рдХреЛ рдХреИрд╕реЗ рд╣реИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛

рдЗрди рдмреНрд▓реЙрдХреЛрдВ рдХреЛ рд╣рдЯрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП. рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде, рдкрд╣рд▓реЗ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ pcapng рдкреНрд░рд╛рд░реВрдк рд╕реЗ pcap рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

#!/usr/bin/env python2

import struct
from scapy.all import *

packets = rdpcap('block_upload_traffic.pcap')
s7_hdr_struct = '>BBHHHHBB'
s7_hdr_sz = struct.calcsize(s7_hdr_struct)
tpkt_cotp_sz = 7
names = iter(['OB1.bin', 'FC1.bin', 'FC2.bin', 'FC3.bin'])
buf = ''

for packet in packets:
    if packet.getlayer(IP).src == '10.0.102.11':
        tpkt_cotp_s7 = str(packet.getlayer(TCP).payload)
        if len(tpkt_cotp_s7) < tpkt_cotp_sz + s7_hdr_sz:
            continue
        s7 = tpkt_cotp_s7[tpkt_cotp_sz:]
        s7_hdr = s7[:s7_hdr_sz]
        param_sz = struct.unpack(s7_hdr_struct, s7_hdr)[4]
        s7_param = s7[12:12+param_sz]
        s7_data = s7[12+param_sz:]
        if s7_param in ('x1ex00', 'x1ex01'):  # upload
            buf += s7_data[4:]
        elif s7_param == 'x1f':
            with open(next(names), 'wb') as f:
                f.write(buf)
            buf = ''

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

рдмреНрд▓реЙрдХреЛрдВ рд╕реЗ рдорд╛рдирд╡-рдкрдардиреАрдп рдирд┐рд░реНрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рд╕рд┐рдореИрдЯрд┐рдХ рдореИрдиреЗрдЬрд░ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдореЗрдВ рджреЛрд╣рд░рд╛рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢реЛрдВ (= рдХреНрдпреВ 7) рдХреЗ рд╕рд╛рде рдХрдИ рдмреНрд▓реЙрдХ рд▓реЛрдб рдХрд░рдХреЗ рдФрд░ рдПрдореБрд▓реЗрдЯрд░ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдкреАрдПрд▓рд╕реА рдХреЛ example.plc рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬрдХрд░ S0.0-PlcSim рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рджреЗрдЦрдХрд░, рдЖрдк рд╣рд╕реНрддрд╛рдХреНрд╖рд░ 70 70 рджреНрд╡рд╛рд░рд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдмреНрд▓реЙрдХ рдХреА рд╢реБрд░реБрдЖрдд рдЖрд╕рд╛рдиреА рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдЦреЛрдЬрд╛ рдерд╛ред рдмреНрд▓реЙрдХ рд╕реЗ рдкрд╣рд▓реЗ, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рдмреНрд▓реЙрдХ рдХрд╛ рдЖрдХрд╛рд░ 4-рдмрд╛рдЗрдЯ рдЫреЛрдЯреЗ-рдПрдВрдбрд┐рдпрди рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрдВрдбрд╕реНрдЯреНрд░рд┐рдпрд▓ рдирд┐рдВрдЬрд╛ рдХреЗ рдирдХреНрд╢реЗрдХрджрдо рдкрд░: рдкреЙрдЬрд┐рдЯрд┐рд╡ рд╣реИрдХ рдбреЗрдЬрд╝ 9 рдореЗрдВ рдПрдХ рдкреАрдПрд▓рд╕реА рдХреЛ рдХреИрд╕реЗ рд╣реИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛

рдкреАрдПрд▓рд╕реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдкреАрдПрд▓рд╕реА рдПрд╕7 рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдпреЛрдЬрдирд╛ рд╕рд╛рдордиреЗ рдЖрдИ:

  1. рд╕рд┐рдореИрдЯрд┐рдХ рдореИрдиреЗрдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо S7-PlcSim рдореЗрдВ рдПрдХ рдмреНрд▓реЙрдХ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рдбрдВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реБрдИ рдереАред рдмреНрд▓реЙрдХ рдХрд╛ рдЖрдХрд╛рд░ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдмреНрд▓реЙрдХ рдХреЛ рднрд░рдХрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдФрд░ рдЙрдирдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ (OB1, FC1, FC2, FC3)ред
  2. рдкреАрдПрд▓рд╕реА рдХреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВред
  3. рд╣рдо рдкрд░рд┐рдгрд╛рдореА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмреНрд▓реЙрдХ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЯреНрд░реИрдлрд╝рд┐рдХ рдбрдВрдк рдХреЗ рдмреНрд▓реЙрдХ рд╕реЗ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВред рдмреНрд▓реЙрдХ рдХреА рд╢реБрд░реБрдЖрдд рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред
  4. рд╣рдо рдкрд░рд┐рдгрд╛рдореА рдлрд╝рд╛рдЗрд▓ рдХреЛ S7-PlcSim рдореЗрдВ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рд┐рдореЗрдЯрд┐рдХ рдореИрдиреЗрдЬрд░ рдореЗрдВ рдмреНрд▓реЙрдХ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмреНрд▓реЙрдХ рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

with open('original.plc', 'rb') as f:
    plc = f.read()
blocks = []
for fname in ['OB1.bin', 'FC1.bin', 'FC2.bin', 'FC3.bin']:
    with open(fname, 'rb') as f:
        blocks.append(f.read())

i = plc.find(b'pp')
for block in blocks:
    plc = plc[:i] + block + plc[i+len(block):]
    i = plc.find(b'pp', i + 1)

with open('target.plc', 'wb') as f:
    f.write(plc)

рдПрд▓реЗрдХреНрд╕реА рдиреЗ рд╢рд╛рдпрдж рдЕрдзрд┐рдХ рдХрдард┐рди, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рд╕рд╣реА рд░рд╛рд╕реНрддрд╛ рдЕрдкрдирд╛рдпрд╛ред рд╣рдордиреЗ рдорд╛рди рд▓рд┐рдпрд╛ рдХрд┐ рдкреНрд░рддрд┐рднрд╛рдЧреА NetToPlcSim рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рддрд╛рдХрд┐ PlcSim рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд╕рдВрдЪрд╛рд░ рдХрд░ рд╕рдХреЗ, Snap7 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ PlcSim рдкрд░ рдмреНрд▓реЙрдХ рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХреЗ, рдФрд░ рдлрд┐рд░ рд╡рд┐рдХрд╛рд╕ рдкрд░рд┐рд╡реЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрди рдмреНрд▓реЙрдХреЛрдВ рдХреЛ PlcSim рд╕реЗ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХреЗред

рдкрд░рд┐рдгрд╛рдореА рдлрд╝рд╛рдЗрд▓ рдХреЛ S7-PlcSim рдореЗрдВ рдЦреЛрд▓рдХрд░, рдЖрдк рд╕рд┐рдореЗрдЯрд┐рдХ рдореИрдиреЗрдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд┐рдП рдЧрдП рдмреНрд▓реЙрдХ рдХреЛ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЦреНрдп рдЙрдкрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдХрд╛рд░реНрдп рдмреНрд▓реЙрдХ FC1 рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдмрд╛рдд #TEMP0 рд╡реИрд░рд┐рдПрдмрд▓ рд╣реИ, рдЬреЛ рдЪрд╛рд▓реВ рд╣реЛрдиреЗ рдкрд░ M2.2 рдФрд░ M2.3 рдмрд┐рдЯ рдореЗрдореЛрд░реА рдорд╛рдиреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ PLC рдирд┐рдпрдВрддреНрд░рдг рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рдореЛрдб рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред #TEMP0 рдорд╛рди рдлрд╝рдВрдХреНрд╢рди FC3 рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЗрдВрдбрд╕реНрдЯреНрд░рд┐рдпрд▓ рдирд┐рдВрдЬрд╛ рдХреЗ рдирдХреНрд╢реЗрдХрджрдо рдкрд░: рдкреЙрдЬрд┐рдЯрд┐рд╡ рд╣реИрдХ рдбреЗрдЬрд╝ 9 рдореЗрдВ рдПрдХ рдкреАрдПрд▓рд╕реА рдХреЛ рдХреИрд╕реЗ рд╣реИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛

рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ FC3 рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдФрд░ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рдкрд░рд┐рдгрд╛рдо рджреЗ рд╕рдХреЗред

рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рд╕реНрдерд▓ рдкрд░ рдХрдо рд╕реБрд░рдХреНрд╖рд╛ рд╕реНрдЯреИрдВрдб рдкрд░ рдкреАрдПрд▓рд╕реА рд╕рд┐рдЧреНрдирд▓ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдмреНрд▓реЙрдХ рдХреЛ рдПрдХ рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди #TEMP0 рд╡реИрд░рд┐рдПрдмрд▓ рдХрд╛ рдорд╛рди рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдбреАрдмреА1 рдмреНрд▓реЙрдХ рдореЗрдВ рдореЗрд░реА рдирд┐рдВрдЬрд╛ рд▓рд╛рдЗрди рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдерд╛ред рдХрд┐рд╕реА рдмреНрд▓реЙрдХ рдореЗрдВ рдорд╛рди рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рд╕реАрдзрд╛ рдерд╛ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдмреНрд▓реЙрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рдЧрд╣рди рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереАред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЙрдЪреНрдЪ рд╕реБрд░рдХреНрд╖рд╛ рд╕реНрддрд░ рдкрд░, рдореИрдиреНрдпреБрдЕрд▓ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛрдЧрд╛ рдФрд░ рдПрд╕рдЯреАрдПрд▓ рднрд╛рд╖рд╛ (рдПрд╕7 рдкреАрдПрд▓рд╕реА рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ) рдХреА рдЬрдЯрд┐рд▓рддрд╛рдУрдВ рдХреЛ рд╕рдордЭрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рд░рд┐рд╡рд░реНрд╕ рдмреНрд▓реЙрдХ FC3

рдПрд╕рдЯреАрдПрд▓ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рдПрдлрд╕реА3 рдмреНрд▓реЙрдХ рдХреА рд╕рд╛рдордЧреНрд░реА:

      L     B#16#0
      T     #TEMP13
      T     #TEMP15
      L     P#DBX 0.0
      T     #TEMP4
      CLR   
      =     #TEMP14
M015: L     #TEMP4
      LAR1  
      OPN   DB   100
      L     DBLG
      TAR1  
      <=D   
      JC    M016
      L     DW#16#0
      T     #TEMP0
      L     #TEMP6
      L     W#16#0
      <>I   
      JC    M00d
      L     P#DBX 0.0
      LAR1  
M00d: L     B [AR1,P#0.0]
      T     #TEMP5
      L     W#16#1
      ==I   
      JC    M007
      L     #TEMP5
      L     W#16#2
      ==I   
      JC    M008
      L     #TEMP5
      L     W#16#3
      ==I   
      JC    M00f
      L     #TEMP5
      L     W#16#4
      ==I   
      JC    M00e
      L     #TEMP5
      L     W#16#5
      ==I   
      JC    M011
      L     #TEMP5
      L     W#16#6
      ==I   
      JC    M012
      JU    M010
M007: +AR1  P#1.0
      L     P#DBX 0.0
      LAR2  
      L     B [AR1,P#0.0]
      L     C#8
      *I    
      +AR2  
      +AR1  P#1.0
      L     B [AR1,P#0.0]
      JL    M003
      JU    M001
      JU    M002
      JU    M004
M003: JU    M005
M001: OPN   DB   101
      L     B [AR2,P#0.0]
      T     #TEMP0
      JU    M006
M002: OPN   DB   101
      L     B [AR2,P#0.0]
      T     #TEMP1
      JU    M006
M004: OPN   DB   101
      L     B [AR2,P#0.0]
      T     #TEMP2
      JU    M006
M00f: +AR1  P#1.0
      L     B [AR1,P#0.0]
      L     C#8
      *I    
      T     #TEMP11
      +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP7
      L     P#M 100.0
      LAR2  
      L     #TEMP7
      L     C#8
      *I    
      +AR2  
      TAR2  #TEMP9
      TAR1  #TEMP4
      OPN   DB   101
      L     P#DBX 0.0
      LAR1  
      L     #TEMP11
      +AR1  
      LAR2  #TEMP9
      L     B [AR2,P#0.0]
      T     B [AR1,P#0.0]
      L     #TEMP4
      LAR1  
      JU    M006
M008: +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP3
      +AR1  P#1.0
      L     B [AR1,P#0.0]
      JL    M009
      JU    M00b
      JU    M00a
      JU    M00c
M009: JU    M005
M00b: L     #TEMP3
      T     #TEMP0
      JU    M006
M00a: L     #TEMP3
      T     #TEMP1
      JU    M006
M00c: L     #TEMP3
      T     #TEMP2
      JU    M006
M00e: +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP7
      L     P#M 100.0
      LAR2  
      L     #TEMP7
      L     C#8
      *I    
      +AR2  
      TAR2  #TEMP9
      +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP8
      L     P#M 100.0
      LAR2  
      L     #TEMP8
      L     C#8
      *I    
      +AR2  
      TAR2  #TEMP10
      TAR1  #TEMP4
      LAR1  #TEMP9
      LAR2  #TEMP10
      L     B [AR1,P#0.0]
      L     B [AR2,P#0.0]
      AW    
      INVI  
      T     #TEMP12
      L     B [AR1,P#0.0]
      L     B [AR2,P#0.0]
      OW    
      L     #TEMP12
      AW    
      T     B [AR1,P#0.0]
      L     DW#16#0
      T     #TEMP0
      L     MB   101
      T     #TEMP1
      L     MB   102
      T     #TEMP2
      L     #TEMP4
      LAR1  
      JU    M006
M011: +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP7
      L     P#M 100.0
      LAR2  
      L     #TEMP7
      L     C#8
      *I    
      +AR2  
      TAR2  #TEMP9
      +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP8
      L     P#M 100.0
      LAR2  
      L     #TEMP8
      L     C#8
      *I    
      +AR2  
      TAR2  #TEMP10
      TAR1  #TEMP4
      LAR1  #TEMP9
      LAR2  #TEMP10
      L     B [AR1,P#0.0]
      L     B [AR2,P#0.0]
      -I    
      T     B [AR1,P#0.0]
      L     DW#16#0
      T     #TEMP0
      L     MB   101
      T     #TEMP1
      L     MB   102
      T     #TEMP2
      L     #TEMP4
      LAR1  
      JU    M006
M012: L     #TEMP15
      INC   1
      T     #TEMP15
      +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP7
      L     P#M 100.0
      LAR2  
      L     #TEMP7
      L     C#8
      *I    
      +AR2  
      TAR2  #TEMP9
      +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP8
      L     P#M 100.0
      LAR2  
      L     #TEMP8
      L     C#8
      *I    
      +AR2  
      TAR2  #TEMP10
      TAR1  #TEMP4
      LAR1  #TEMP9
      LAR2  #TEMP10
      L     B [AR1,P#0.0]
      L     B [AR2,P#0.0]
      ==I   
      JCN   M013
      JU    M014
M013: L     P#DBX 0.0
      LAR1  
      T     #TEMP4
      L     B#16#0
      T     #TEMP6
      JU    M006
M014: L     #TEMP4
      LAR1  
      L     #TEMP13
      L     L#1
      +I    
      T     #TEMP13
      JU    M006
M006: L     #TEMP0
      T     MB   100
      L     #TEMP1
      T     MB   101
      L     #TEMP2
      T     MB   102
      +AR1  P#1.0
      L     #TEMP6
      +     1
      T     #TEMP6
      JU    M005
M010: L     P#DBX 0.0
      LAR1  
      L     0
      T     #TEMP6
      TAR1  #TEMP4
M005: TAR1  #TEMP4
      CLR   
      =     #TEMP16
      L     #TEMP13
      L     L#20
      ==I   
      S     #TEMP16
      L     #TEMP15
      ==I   
      A     #TEMP16
      JC    M017
      L     #TEMP13
      L     L#20
      <I    
      S     #TEMP16
      L     #TEMP15
      ==I   
      A     #TEMP16
      JC    M018
      JU    M019
M017: SET   
      =     #TEMP14
      JU    M016
M018: CLR   
      =     #TEMP14
      JU    M016
M019: CLR   
      O     #TEMP14
      =     #RET_VAL
      JU    M015
M016: CLR   
      O     #TEMP14
      =     #RET_VAL

рдХреЛрдб рдХрд╛рдлреА рд▓рдВрдмрд╛ рд╣реИ рдФрд░ рдПрд╕рдЯреАрдПрд▓ рд╕реЗ рдЕрдкрд░рд┐рдЪрд┐рдд рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЬрдЯрд┐рд▓ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдЖрд▓реЗрдЦ рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ; рдПрд╕рдЯреАрдПрд▓ рднрд╛рд╖рд╛ рдХреЗ рд╡рд┐рд╕реНрддреГрдд рдирд┐рд░реНрджреЗрд╢ рдФрд░ рдХреНрд╖рдорддрд╛рдПрдВ рд╕рдВрдмрдВрдзрд┐рдд рдореИрдиреБрдЕрд▓ рдореЗрдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ: S7-300 рдФрд░ S7-400 рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд▓рд┐рд╕реНрдЯ (STL)ред. рдпрд╣рд╛рдВ рдореИрдВ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рдж рд╡рд╣реА рдХреЛрдб рдкреНрд░рд╕реНрддреБрдд рдХрд░реВрдВрдЧрд╛ - рд▓реЗрдмрд▓ рдФрд░ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХрд╛ рдирд╛рдо рдмрджрд▓рдирд╛ рдФрд░ рдСрдкрд░реЗрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдФрд░ рдХреБрдЫ рдПрд╕рдЯреАрдПрд▓ рднрд╛рд╖рд╛ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдЬреЛрдбрд╝рдирд╛ред рдореБрдЭреЗ рддреБрд░рдВрдд рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╡рд┐рдЪрд╛рд░рд╛рдзреАрди рдмреНрд▓реЙрдХ рдореЗрдВ рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рд╣реИ рдЬреЛ DB100 рдмреНрд▓реЙрдХ рдореЗрдВ рд╕реНрдерд┐рдд рдХреБрдЫ рдмрд╛рдЗрдЯрдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рдХреА рд╕рд╛рдордЧреНрд░реА рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВред рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рдХреЛрдб рдХрд╛ 1 рдмрд╛рдЗрдЯ рдФрд░ рддрд░реНрдХреЛрдВ рдХреЗ рдмрд╛рдЗрдЯреНрд╕ рд╣реЛрддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рдЗрдЯред рд╕рднреА рд╡рд┐рдЪрд╛рд░рд┐рдд рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рджреЛ рддрд░реНрдХ рд╣реИрдВ; рдореИрдВрдиреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЙрдирдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдПрдХреНрд╕ рдФрд░ рд╡рд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИред

рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рдж рдХреЛрдб]

# ╨Ш╨╜╨╕╤Ж╨╕╨░╨╗╨╕╨╖╨░╤Ж╨╕╤П ╤А╨░╨╖╨╗╨╕╤З╨╜╤Л╤Е ╨┐╨╡╤А╨╡╨╝╨╡╨╜╨╜╤Л╤Е
      L     B#16#0
      T     #CHECK_N        # ╨б╤З╨╡╤В╤З╨╕╨║ ╤Г╤Б╨┐╨╡╤И╨╜╨╛ ╨┐╤А╨╛╨╣╨┤╨╡╨╜╨╜╤Л╤Е ╨┐╤А╨╛╨▓╨╡╤А╨╛╨║
      T     #COUNTER_N      # ╨б╤З╨╡╤В╤З╨╕╨║ ╨╛╨▒╤Й╨╡╨│╨╛ ╨║╨╛╨╗╨╕╤З╨╡╤Б╤В╨▓╨░ ╨┐╤А╨╛╨▓╨╡╤А╨╛╨║
      L     P#DBX 0.0
      T     #POINTER        # ╨г╨║╨░╨╖╨░╤В╨╡╨╗╤М ╨╜╨░ ╤В╨╡╨║╤Г╤Й╤Г╤О ╨╕╨╜╤Б╤В╤А╤Г╨║╤Ж╨╕╤О
      CLR   
      =     #PRE_RET_VAL

# ╨Ю╤Б╨╜╨╛╨▓╨╜╨╛╨╣ ╤Ж╨╕╨║╨╗ ╤А╨░╨▒╨╛╤В╤Л ╨╕╨╜╤В╨╡╤А╨┐╤А╨╡╤В╨░╤В╨╛╤А╨░ ╨▒╨░╨╣╤В-╨║╨╛╨┤╨░
LOOP: L     #POINTER
      LAR1  
      OPN   DB   100
      L     DBLG
      TAR1  
      <=D                   # ╨Я╤А╨╛╨▓╨╡╤А╨║╨░ ╨▓╤Л╤Е╨╛╨┤╨░ ╤Г╨║╨░╨╖╨░╤В╨╡╨╗╤П ╨╖╨░ ╨┐╤А╨╡╨┤╨╡╨╗╤Л ╨┐╤А╨╛╨│╤А╨░╨╝╨╝╤Л
      JC    FINISH
      L     DW#16#0
      T     #REG0
      L     #TEMP6
      L     W#16#0
      <>I   
      JC    M00d
      L     P#DBX 0.0
      LAR1  

# ╨Ъ╨╛╨╜╤Б╤В╤А╤Г╨║╤Ж╨╕╤П switch - case ╨┤╨╗╤П ╨╛╨▒╤А╨░╨▒╨╛╤В╨║╨╕ ╤А╨░╨╖╨╗╨╕╤З╨╜╤Л╤Е ╨╛╨┐╨║╨╛╨┤╨╛╨▓
M00d: L     B [AR1,P#0.0]
      T     #OPCODE
      L     W#16#1
      ==I   
      JC    OPCODE_1
      L     #OPCODE
      L     W#16#2
      ==I   
      JC    OPCODE_2
      L     #OPCODE
      L     W#16#3
      ==I   
      JC    OPCODE_3
      L     #OPCODE
      L     W#16#4
      ==I   
      JC    OPCODE_4
      L     #OPCODE
      L     W#16#5
      ==I   
      JC    OPCODE_5
      L     #OPCODE
      L     W#16#6
      ==I   
      JC    OPCODE_6
      JU    OPCODE_OTHER

# ╨Ю╨▒╤А╨░╨▒╨╛╤В╤З╨╕╨║ ╨╛╨┐╨║╨╛╨┤╨░ 01: ╨╖╨░╨│╤А╤Г╨╖╨║╨░ ╨╖╨╜╨░╤З╨╡╨╜╨╕╤П ╨╕╨╖ DB101[X] ╨▓ ╤А╨╡╨│╨╕╤Б╤В╤А Y
# OP01(X, Y): REG[Y] = DB101[X]
OPCODE_1: +AR1  P#1.0
      L     P#DBX 0.0
      LAR2  
      L     B [AR1,P#0.0]   # ╨Ч╨░╨│╤А╤Г╨╖╨║╨░ ╨░╤А╨│╤Г╨╝╨╡╨╜╤В╨░ X (╨╕╨╜╨┤╨╡╨║╤Б ╨▓ DB101)
      L     C#8
      *I    
      +AR2  
      +AR1  P#1.0
      L     B [AR1,P#0.0]   # ╨Ч╨░╨│╤А╤Г╨╖╨║╨░ ╨░╤А╨│╤Г╨╝╨╡╨╜╤В╨░ Y (╨╕╨╜╨┤╨╡╨║╤Б ╤А╨╡╨│╨╕╤Б╤В╤А╨░)
      JL    M003            # ╨Р╨╜╨░╨╗╨╛╨│ switch - case ╨╜╨░ ╨╛╤Б╨╜╨╛╨▓╨╡ ╨╖╨╜╨░╤З╨╡╨╜╨╕╤П Y
      JU    M001            # ╨┤╨╗╤П ╨▓╤Л╨▒╨╛╤А╨░ ╨╜╨╡╨╛╨▒╤Е╨╛╨┤╨╕╨╝╨╛╨│╨╛ ╤А╨╡╨│╨╕╤Б╤В╤А╨░ ╨┤╨╗╤П ╨╖╨░╨┐╨╕╤Б╨╕.
      JU    M002            # ╨Я╨╛╨┤╨╛╨▒╨╜╤Л╨╡ ╨║╨╛╨╜╤Б╤В╤А╤Г╨║╤Ж╨╕╨╕ ╨╕╤Б╨┐╨╛╨╗╤М╨╖╤Г╤О╤В╤Б╤П ╨╕ ╨▓ ╨┤╤А╤Г╨│╨╕╤Е
      JU    M004            # ╨╛╨┐╨╡╤А╨░╤Ж╨╕╤П╤Е ╨╜╨╕╨╢╨╡ ╨┤╨╗╤П ╨░╨╜╨░╨╗╨╛╨│╨╕╤З╨╜╤Л╤Е ╤Ж╨╡╨╗╨╡╨╣
M003: JU    LOOPEND
M001: OPN   DB   101
      L     B [AR2,P#0.0]
      T     #REG0           # ╨Ч╨░╨┐╨╕╤Б╤М ╨╖╨╜╨░╤З╨╡╨╜╨╕╤П DB101[X] ╨▓ REG[0]
      JU    PRE_LOOPEND
M002: OPN   DB   101
      L     B [AR2,P#0.0]
      T     #REG1           # ╨Ч╨░╨┐╨╕╤Б╤М ╨╖╨╜╨░╤З╨╡╨╜╨╕╤П DB101[X] ╨▓ REG[1]
      JU    PRE_LOOPEND
M004: OPN   DB   101
      L     B [AR2,P#0.0]
      T     #REG2           # ╨Ч╨░╨┐╨╕╤Б╤М ╨╖╨╜╨░╤З╨╡╨╜╨╕╤П DB101[X] ╨▓ REG[2]
      JU    PRE_LOOPEND

# ╨Ю╨▒╤А╨░╨▒╨╛╤В╤З╨╕╨║ ╨╛╨┐╨║╨╛╨┤╨░ 02: ╨╖╨░╨│╤А╤Г╨╖╨║╨░ ╨╖╨╜╨░╤З╨╡╨╜╨╕╤П X ╨▓ ╤А╨╡╨│╨╕╤Б╤В╤А Y
# OP02(X, Y): REG[Y] = X
OPCODE_2: +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP3
      +AR1  P#1.0
      L     B [AR1,P#0.0]
      JL    M009
      JU    M00b
      JU    M00a
      JU    M00c
M009: JU    LOOPEND
M00b: L     #TEMP3
      T     #REG0
      JU    PRE_LOOPEND
M00a: L     #TEMP3
      T     #REG1
      JU    PRE_LOOPEND
M00c: L     #TEMP3
      T     #REG2
      JU    PRE_LOOPEND

# ╨Ю╨┐╨║╨╛╨┤ 03 ╨╜╨╡ ╨╕╤Б╨┐╨╛╨╗╤М╨╖╤Г╨╡╤В╤Б╤П ╨▓ ╨┐╤А╨╛╨│╤А╨░╨╝╨╝╨╡, ╨┐╨╛╤Н╤В╨╛╨╝╤Г ╨┐╤А╨╛╨┐╤Г╤Б╤В╨╕╨╝ ╨╡╨│╨╛
...

# ╨Ю╨▒╤А╨░╨▒╨╛╤В╤З╨╕╨║ ╨╛╨┐╨║╨╛╨┤╨░ 04: ╤Б╤А╨░╨▓╨╜╨╡╨╜╨╕╨╡ ╤А╨╡╨│╨╕╤Б╤В╤А╨╛╨▓ X ╨╕ Y
# OP04(X, Y): REG[0] = 0; REG[X] = (REG[X] == REG[Y])
OPCODE_4: +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP7          # ╨┐╨╡╤А╨▓╤Л╨╣ ╨░╤А╨│╤Г╨╝╨╡╨╜╤В - X
      L     P#M 100.0
      LAR2  
      L     #TEMP7
      L     C#8
      *I    
      +AR2  
      TAR2  #TEMP9          # REG[X]
      +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP8
      L     P#M 100.0
      LAR2  
      L     #TEMP8
      L     C#8
      *I    
      +AR2  
      TAR2  #TEMP10         # REG[Y]
      TAR1  #POINTER
      LAR1  #TEMP9          # REG[X]
      LAR2  #TEMP10         # REG[Y]
      L     B [AR1,P#0.0]
      L     B [AR2,P#0.0]
      AW    
      INVI  
      T     #TEMP12         # ~(REG[Y] & REG[X])
      L     B [AR1,P#0.0]
      L     B [AR2,P#0.0]
      OW    
      L     #TEMP12
      AW                    # (~(REG[Y] & REG[X])) & (REG[Y] | REG[X]) - ╨░╨╜╨░╨╗╨╛╨│ ╨┐╤А╨╛╨▓╨╡╤А╨║╨╕ ╨╜╨░ ╤А╨░╨▓╨╡╨╜╤Б╤В╨▓╨╛
      T     B [AR1,P#0.0]
      L     DW#16#0
      T     #REG0
      L     MB   101
      T     #REG1
      L     MB   102
      T     #REG2
      L     #POINTER
      LAR1  
      JU    PRE_LOOPEND

# ╨Ю╨▒╤А╨░╨▒╨╛╤В╤З╨╕╨║ ╨╛╨┐╨║╨╛╨┤╨░ 05: ╨▓╤Л╤З╨╕╤В╨░╨╜╨╕╨╡ ╤А╨╡╨│╨╕╤Б╤В╤А╨░ Y ╨╕╨╖ X
# OP05(X, Y): REG[0] = 0; REG[X] = REG[X] - REG[Y]
OPCODE_5: +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP7
      L     P#M 100.0
      LAR2  
      L     #TEMP7
      L     C#8
      *I    
      +AR2  
      TAR2  #TEMP9          # REG[X]
      +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP8
      L     P#M 100.0
      LAR2  
      L     #TEMP8
      L     C#8
      *I    
      +AR2  
      TAR2  #TEMP10         # REG[Y]
      TAR1  #POINTER
      LAR1  #TEMP9
      LAR2  #TEMP10
      L     B [AR1,P#0.0]
      L     B [AR2,P#0.0]
      -I                    # ACCU1 = ACCU2 - ACCU1, REG[X] - REG[Y]
      T     B [AR1,P#0.0]
      L     DW#16#0
      T     #REG0
      L     MB   101
      T     #REG1
      L     MB   102
      T     #REG2
      L     #POINTER
      LAR1  
      JU    PRE_LOOPEND

# ╨Ю╨▒╤А╨░╨▒╨╛╤В╤З╨╕╨║ ╨╛╨┐╨║╨╛╨┤╨░ 06: ╨╕╨╜╨║╤А╨╡╨╝╨╡╨╜╤В #CHECK_N ╨┐╤А╨╕ ╤А╨░╨▓╨╡╨╜╤Б╤В╨▓╨╡ ╤А╨╡╨│╨╕╤Б╤В╤А╨╛╨▓ X ╨╕ Y
# OP06(X, Y): #CHECK_N += (1 if REG[X] == REG[Y] else 0)
OPCODE_6: L     #COUNTER_N
      INC   1
      T     #COUNTER_N
      +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP7          #  REG[X]     
      L     P#M 100.0
      LAR2  
      L     #TEMP7
      L     C#8
      *I    
      +AR2  
      TAR2  #TEMP9          #  REG[X]  
      +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP8
      L     P#M 100.0
      LAR2  
      L     #TEMP8
      L     C#8
      *I    
      +AR2  
      TAR2  #TEMP10         # REG[Y]
      TAR1  #POINTER
      LAR1  #TEMP9          # REG[Y]
      LAR2  #TEMP10         # REG[X]
      L     B [AR1,P#0.0]
      L     B [AR2,P#0.0]
      ==I   
      JCN   M013
      JU    M014
M013: L     P#DBX 0.0
      LAR1  
      T     #POINTER
      L     B#16#0
      T     #TEMP6
      JU    PRE_LOOPEND
M014: L     #POINTER
      LAR1  
# ╨Ш╨╜╨║╤А╨╡╨╝╨╡╨╜╤В ╨╖╨╜╨░╤З╨╡╨╜╨╕╤П #CHECK_N
      L     #CHECK_N
      L     L#1
      +I    
      T     #CHECK_N
      JU    PRE_LOOPEND

PRE_LOOPEND: L     #REG0
      T     MB   100
      L     #REG1
      T     MB   101
      L     #REG2
      T     MB   102
      +AR1  P#1.0
      L     #TEMP6
      +     1
      T     #TEMP6
      JU    LOOPEND

OPCODE_OTHER: L     P#DBX 0.0
      LAR1  
      L     0
      T     #TEMP6
      TAR1  #POINTER

LOOPEND: TAR1  #POINTER
      CLR   
      =     #TEMP16
      L     #CHECK_N
      L     L#20
      ==I   
      S     #TEMP16
      L     #COUNTER_N
      ==I   
      A     #TEMP16
# ╨Т╤Б╨╡ ╨┐╤А╨╛╨▓╨╡╤А╨║╨╕ ╨┐╤А╨╛╨╣╨┤╨╡╨╜╤Л, ╨╡╤Б╨╗╨╕ #CHECK_N == #COUNTER_N == 20
      JC    GOOD
      L     #CHECK_N
      L     L#20
      <I    
      S     #TEMP16
      L     #COUNTER_N
      ==I   
      A     #TEMP16
      JC    FAIL
      JU    M019
GOOD: SET   
      =     #PRE_RET_VAL
      JU    FINISH
FAIL: CLR   
      =     #PRE_RET_VAL
      JU    FINISH
M019: CLR   
      O     #PRE_RET_VAL
      =     #RET_VAL
      JU    LOOP
FINISH: CLR   
      O     #PRE_RET_VAL
      =     #RET_VAL

рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЕрдВрджрд╛рдЬрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдЗрдП DB100 рдмреНрд▓реЙрдХ рдореЗрдВ рдмрд╛рдЗрдЯрдХреЛрдб рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рдбрд┐рд╕реНрд╕реЗрдмрд▓рд░ рд▓рд┐рдЦреЗрдВ:

import string
alph = string.ascii_letters + string.digits

with open('DB100.bin', 'rb') as f:
    m = f.read()

pc = 0

while pc < len(m):
    op = m[pc]
    if op == 1:
        print('R{} = DB101[{}]'.format(m[pc + 2], m[pc + 1]))
        pc += 3
    elif op == 2:
        c = chr(m[pc + 1])
        c = c if c in alph else '?'
        print('R{} = {:02x} ({})'.format(m[pc + 2], m[pc + 1], c))
        pc += 3
    elif op == 4:
        print('R0 = 0; R{} = (R{} == R{})'.format(
            m[pc + 1], m[pc + 1], m[pc + 2]))
        pc += 3
    elif op == 5:
        print('R0 = 0; R{} = R{} - R{}'.format(
            m[pc + 1], m[pc + 1], m[pc + 2]))
        pc += 3
    elif op == 6:
        print('CHECK (R{} == R{})n'.format(
            m[pc + 1], m[pc + 2]))
        pc += 3
    else:
        print('unk opcode {}'.format(op))
        break

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЛрдб рдорд┐рд▓рддрд╛ рд╣реИ:

рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЛрдб

R1 = DB101[0]
R2 = 6e (n)
R0 = 0; R1 = (R1 == R2)
CHECK (R1 == R0)

R1 = DB101[1]
R2 = 10 (?)
R0 = 0; R1 = R1 - R2
R2 = 20 (?)
R0 = 0; R1 = R1 - R2
CHECK (R1 == R0)

R1 = DB101[2]
R2 = 77 (w)
R0 = 0; R1 = (R1 == R2)
CHECK (R1 == R0)

R1 = DB101[3]
R2 = 0a (?)
R0 = 0; R1 = R1 - R2
R2 = 16 (?)
R0 = 0; R1 = R1 - R2
CHECK (R1 == R0)

R1 = DB101[4]
R2 = 75 (u)
R0 = 0; R1 = (R1 == R2)
CHECK (R1 == R0)

R1 = DB101[5]
R2 = 0a (?)
R0 = 0; R1 = R1 - R2
R2 = 16 (?)
R0 = 0; R1 = R1 - R2
CHECK (R1 == R0)

R1 = DB101[6]
R2 = 34 (4)
R0 = 0; R1 = (R1 == R2)
CHECK (R1 == R0)

R1 = DB101[7]
R2 = 26 (?)
R0 = 0; R1 = R1 - R2
R2 = 4c (L)
R0 = 0; R1 = R1 - R2
CHECK (R1 == R0)

R1 = DB101[8]
R2 = 33 (3)
R0 = 0; R1 = (R1 == R2)
CHECK (R1 == R0)

R1 = DB101[9]
R2 = 0a (?)
R0 = 0; R1 = R1 - R2
R2 = 16 (?)
R0 = 0; R1 = R1 - R2
CHECK (R1 == R0)

R1 = DB101[10]
R2 = 37 (7)
R0 = 0; R1 = (R1 == R2)
CHECK (R1 == R0)

R1 = DB101[11]
R2 = 22 (?)
R0 = 0; R1 = R1 - R2
R2 = 46 (F)
R0 = 0; R1 = R1 - R2
CHECK (R1 == R0)

R1 = DB101[12]
R2 = 33 (3)
R0 = 0; R1 = (R1 == R2)
CHECK (R1 == R0)

R1 = DB101[13]
R2 = 0a (?)
R0 = 0; R1 = R1 - R2
R2 = 16 (?)
R0 = 0; R1 = R1 - R2
CHECK (R1 == R0)

R1 = DB101[14]
R2 = 6d (m)
R0 = 0; R1 = (R1 == R2)
CHECK (R1 == R0)

R1 = DB101[15]
R2 = 11 (?)
R0 = 0; R1 = R1 - R2
R2 = 23 (?)
R0 = 0; R1 = R1 - R2
CHECK (R1 == R0)

R1 = DB101[16]
R2 = 35 (5)
R0 = 0; R1 = (R1 == R2)
CHECK (R1 == R0)

R1 = DB101[17]
R2 = 12 (?)
R0 = 0; R1 = R1 - R2
R2 = 25 (?)
R0 = 0; R1 = R1 - R2
CHECK (R1 == R0)

R1 = DB101[18]
R2 = 33 (3)
R0 = 0; R1 = (R1 == R2)
CHECK (R1 == R0)

R1 = DB101[19]
R2 = 26 (?)
R0 = 0; R1 = R1 - R2
R2 = 4c (L)
R0 = 0; R1 = R1 - R2
CHECK (R1 == R0)

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрд╕ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдорд╛рди рдХреА рд╕рдорд╛рдирддрд╛ рдХреЗ рд▓рд┐рдП DB101 рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдг рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИред рд╕рднреА рдЪреЗрдХ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рд╣реИ: n0w u 4r3 7h3 m4573rред рдпрджрд┐ рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ рдмреНрд▓реЙрдХ DB101 рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореИрдиреНрдпреБрдЕрд▓ рдкреАрдПрд▓рд╕реА рдирд┐рдпрдВрддреНрд░рдг рд╕рдХреНрд░рд┐рдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЧреБрдмреНрдмрд╛рд░реЗ рдХреЛ рд╡рд┐рд╕реНрдлреЛрдЯ рдХрд░рдирд╛ рдпрд╛ рдкрд┐рдЪрдХрд╛рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛редтАи

рдмрд╕ рдЗрддрдирд╛ рд╣реА! рдПрд▓реЗрдХреНрд╕реА рдиреЗ рдПрдХ рдФрджреНрдпреЛрдЧрд┐рдХ рдирд┐рдВрдЬрд╛ рдХреЗ рдпреЛрдЧреНрдп рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХреЗ рдЬреНрдЮрд╛рди рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ :) рд╣рдордиреЗ рд╡рд┐рдЬреЗрддрд╛ рдХреЛ рдпрд╛рджрдЧрд╛рд░ рдкреБрд░рд╕реНрдХрд╛рд░ рднреЗрдЬреЗред рд╕рднреА рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЛ рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ