По стапкитС Π½Π° Industrial Ninja: ΠΊΠ°ΠΊΠΎ PLC бСшС Ρ…Π°ΠΊΠΈΡ€Π°Π½ Π½Π° Positive Hack Days 9

По стапкитС Π½Π° Industrial Ninja: ΠΊΠ°ΠΊΠΎ PLC бСшС Ρ…Π°ΠΊΠΈΡ€Π°Π½ Π½Π° Positive Hack Days 9

На послСдниот PHDdays 9 ΠΎΠ΄Ρ€ΠΆΠ°Π²ΠΌΠ΅ Π½Π°Ρ‚ΠΏΡ€Π΅Π²Π°Ρ€ Π·Π° Ρ…Π°ΠΊΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΏΡƒΠΌΠΏΠ° Π·Π° гас - Π½Π°Ρ‚ΠΏΡ€Π΅Π²Π°Ρ€ Π˜Π½Π΄ΡƒΡΡ‚Ρ€ΠΈΡΠΊΠΈ нинџа. На Π»ΠΎΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° имашС Ρ‚Ρ€ΠΈ ΡˆΡ‚Π°Π½Π΄ΠΎΠ²ΠΈ со Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ бСзбСдносни ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ (Π‘Π΅Π· бСзбСдност, ниска бСзбСдност, висока бСзбСдност), Π΅ΠΌΡƒΠ»ΠΈΡ€Π°Ρ˜ΡœΠΈ Π³ΠΎ истиот индустриски процСс: Π²ΠΎΠ·Π΄ΡƒΡ…ΠΎΡ‚ ΠΏΠΎΠ΄ притисок сС ΠΏΡƒΠΌΠΏΠ° Π²ΠΎ Π±Π°Π»ΠΎΠ½ (ΠΈ ΠΏΠΎΡ‚ΠΎΠ° сС ослободува).

И ΠΏΠΎΠΊΡ€Π°Ρ˜ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ бСзбСдносни ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ, хардвСрскиот состав Π½Π° ΡˆΡ‚Π°Π½Π΄ΠΎΠ²ΠΈΡ‚Π΅ бСшС ист: Siemens Simatic PLC S7-300 series; ΠΊΠΎΠΏΡ‡Π΅ Π·Π° ΠΈΡ‚Π½Π° Π΄Π΅Ρ„Π»Π°Ρ†ΠΈΡ˜Π° ΠΈ ΡƒΡ€Π΅Π΄ Π·Π° ΠΌΠ΅Ρ€Π΅ΡšΠ΅ притисок (ΠΏΠΎΠ²Ρ€Π·Π°Π½ со Π΄ΠΈΠ³ΠΈΡ‚Π°Π»Π½ΠΈ Π²Π»Π΅Π·ΠΎΠ²ΠΈ Π½Π° PLC (DI)); Π²Π΅Π½Ρ‚ΠΈΠ»ΠΈ ΠΊΠΎΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ Π·Π° Π½Π°Π΄ΡƒΠ²ΡƒΠ²Π°ΡšΠ΅ ΠΈ Π΄Π΅Ρ„Π»Π°Ρ†ΠΈΡ˜Π° Π½Π° Π²ΠΎΠ·Π΄ΡƒΡ…ΠΎΡ‚ (ΠΏΠΎΠ²Ρ€Π·Π°Π½ΠΈ со Π΄ΠΈΠ³ΠΈΡ‚Π°Π»Π½ΠΈΡ‚Π΅ ΠΈΠ·Π»Π΅Π·ΠΈ Π½Π° PLC (DO)) - Π²ΠΈΠ΄Π΅Ρ‚Π΅ ја сликата ΠΏΠΎΠ΄ΠΎΠ»Ρƒ.

По стапкитС Π½Π° Industrial Ninja: ΠΊΠ°ΠΊΠΎ PLC бСшС Ρ…Π°ΠΊΠΈΡ€Π°Π½ Π½Π° Positive Hack Days 9

PLC, Π²ΠΎ зависност ΠΎΠ΄ ΠΎΡ‚Ρ‡ΠΈΡ‚ΡƒΠ²Π°ΡšΠ°Ρ‚Π° Π½Π° притисокот ΠΈ Π²ΠΎ согласност со ΡΠ²ΠΎΡ˜Π°Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°, донСсС ΠΎΠ΄Π»ΡƒΠΊΠ° Π·Π° ΠΈΠ·Π΄ΡƒΠ²ΡƒΠ²Π°ΡšΠ΅ ΠΈΠ»ΠΈ Π½Π°Π΄ΡƒΠ²ΡƒΠ²Π°ΡšΠ΅ Π½Π° Ρ‚ΠΎΠΏΠΊΠ°Ρ‚Π° (Π³ΠΈ ΠΎΡ‚Π²ΠΎΡ€ΠΈ ΠΈ Π·Π°Ρ‚Π²ΠΎΡ€ΠΈ соодвСтнитС Π²Π΅Π½Ρ‚ΠΈΠ»ΠΈ). Π‘Π΅ΠΏΠ°ΠΊ, ситС ΡˆΡ‚Π°Π½Π΄ΠΎΠ²ΠΈ ΠΈΠΌΠ°Π° Ρ€Π΅ΠΆΠΈΠΌ Π½Π° Ρ€Π°Ρ‡Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π°, ΡˆΡ‚ΠΎ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ Π΄Π° сС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Π°Ρ‚ ΡΠΎΡΡ‚ΠΎΡ˜Π±ΠΈΡ‚Π΅ Π½Π° Π²Π΅Π½Ρ‚ΠΈΠ»ΠΈΡ‚Π΅ Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΡƒΠ²Π°ΡšΠ°.

Π¨Ρ‚Π°Π½Π΄ΠΎΠ²ΠΈΡ‚Π΅ сС Ρ€Π°Π·Π»ΠΈΠΊΡƒΠ²Π°Π° ΠΏΠΎ слоТСноста Π½Π° ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° овој Ρ€Π΅ΠΆΠΈΠΌ: Π½Π° Π½Π΅Π·Π°ΡˆΡ‚ΠΈΡ‚Π΅Π½ΠΈΠΎΡ‚ ΡˆΡ‚Π°Π½Π΄ бСшС најлСсно Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ Ρ‚ΠΎΠ°, Π° Π½Π° ΡˆΡ‚Π°Π½Π΄ΠΎΡ‚ Π·Π° висока бСзбСдност бСшС соодвСтно ΠΏΠΎΡ‚Π΅ΡˆΠΊΠΎ.

ΠŸΠ΅Ρ‚ ΠΎΠ΄ ΡˆΠ΅ΡΡ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π±Π΅Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈ Π·Π° Π΄Π²Π° Π΄Π΅Π½Π°; ΠŸΡ€Π²ΠΎΠΏΠ»Π°ΡΠΈΡ€Π°Π½ΠΈΠΎΡ‚ учСсник Π·Π°Ρ€Π°Π±ΠΎΡ‚ΠΈ 233 ΠΏΠΎΠ΅Π½ΠΈ (ΠΏΠΎΠΌΠΈΠ½Π° Π΅Π΄Π½Π° Π½Π΅Π΄Π΅Π»Π° ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²ΡƒΠ²Π°Ρ˜ΡœΠΈ сС Π·Π° Π½Π°Ρ‚ΠΏΡ€Π΅Π²Π°Ρ€ΠΎΡ‚). Π’Ρ€ΠΎΡ˜Ρ†Π° Π΄ΠΎΠ±ΠΈΡ‚Π½ΠΈΡ†ΠΈ: I мСсто - a1exdandy, II - Rubikoid, III - Ze.

Π‘Π΅ΠΏΠ°ΠΊ, Π·Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° докторскитС Π΄Π΅Π½ΠΎΠ²ΠΈ, Π½ΠΈΡ‚Ρƒ Π΅Π΄Π΅Π½ ΠΎΠ΄ учСсницитС Π½Π΅ моТСшС Π΄Π° Π³ΠΈ Π½Π°Π΄ΠΌΠΈΠ½Π΅ ситС Ρ‚Ρ€ΠΈ ΡˆΡ‚Π°Π½Π΄ΠΎΠ²ΠΈ, ΠΏΠ° Ρ€Π΅ΡˆΠΈΠ²ΠΌΠ΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌΠ΅ онлајн Π½Π°Ρ‚ΠΏΡ€Π΅Π²Π°Ρ€ ΠΈ Π½Π°Ρ˜Ρ‚Π΅ΡˆΠΊΠ°Ρ‚Π° Π·Π°Π΄Π°Ρ‡Π° ја објавивмС Π½Π° ΠΏΠΎΡ‡Π΅Ρ‚ΠΎΠΊΠΎΡ‚ Π½Π° Ρ˜ΡƒΠ½ΠΈ. УчСсницитС Ρ‚Ρ€Π΅Π±Π°ΡˆΠ΅ Π΄Π° ја Π·Π°Π²Ρ€ΡˆΠ°Ρ‚ Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° Π²ΠΎ Ρ€ΠΎΠΊ ΠΎΠ΄ Π΅Π΄Π΅Π½ мСсСц, Π΄Π° Π³ΠΎ Π½Π°Ρ˜Π΄Π°Ρ‚ Π·Π½Π°ΠΌΠ΅Ρ‚ΠΎ ΠΈ Π΄Π΅Ρ‚Π°Π»Π½ΠΎ ΠΈ Π½Π° интСрСсСн Π½Π°Ρ‡ΠΈΠ½ Π΄Π° Π³ΠΎ ΠΎΠΏΠΈΡˆΠ°Ρ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.

Под Ρ€Π΅Π·ΠΈΠΌΠ΅Ρ‚ΠΎ ΠΎΠ±Ρ˜Π°Π²ΡƒΠ²Π°ΠΌΠ΅ Π°Π½Π°Π»ΠΈΠ·Π° Π·Π° Π½Π°Ρ˜Π΄ΠΎΠ±Ρ€ΠΎΡ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π° Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° ΠΎΠ΄ ΠΎΠ½ΠΈΠ΅ испратСни Π²ΠΎ Ρ‚Π΅ΠΊΠΎΡ‚ Π½Π° мСсСцот, ја ΠΎΡ‚ΠΊΡ€ΠΈ АлСксСј ΠšΠΎΠ²Ρ€ΠΈΠΆΠ½ΠΈΡ… (a1exdandy) ΠΎΠ΄ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ˜Π°Ρ‚Π° Π·Π° Π΄ΠΈΠ³ΠΈΡ‚Π°Π»Π½Π° бСзбСдност, кој Π³ΠΎ Π·Π°Π·Π΅Π΄Π΅ ΠΏΡ€Π²ΠΎΡ‚ΠΎ мСсто Π½Π° Π½Π°Ρ‚ΠΏΡ€Π΅Π²Π°Ρ€ΠΎΡ‚ Π·Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° докторскитС Π΄Π΅Π½ΠΎΠ²ΠΈ. Π’ΠΎ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΈ Π³ΠΎ прСнСсувамС Π½Π΅Π³ΠΎΠ²ΠΈΠΎΡ‚ тСкст со наши ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈ.

ΠŸΡ€Π²ΠΈΡ‡Π½Π° Π°Π½Π°Π»ΠΈΠ·Π°

Π—Π½Π°Ρ‡ΠΈ, Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° ΡΠΎΠ΄Ρ€ΠΆΠ΅ΡˆΠ΅ Π°Ρ€Ρ…ΠΈΠ²Π° со слСднивС Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ:

  • block_upload_traffic.pcapng
  • DB100.bin
  • совСти.txt

Π”Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° hints.txt Π³ΠΈ содрТи ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈΡ‚Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ совСти Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°ΡšΠ΅ Π½Π° Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π°. Π•Π²Π΅ ја Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° содрТина:

  1. ΠŸΠ΅Ρ‚Ρ€ΠΎΠ²ΠΈΡ‡ ΠΌΠΈ ΠΊΠ°ΠΆΠ° Π²Ρ‡Π΅Ρ€Π° Π΄Π΅ΠΊΠ° моТСш Π΄Π° Π²Ρ‡ΠΈΡ‚Π°Ρˆ Π±Π»ΠΎΠΊΠΎΠ²ΠΈ ΠΎΠ΄ PlcSim Π²ΠΎ Step7.
  2. На ΡˆΡ‚Π°Π½Π΄ΠΎΡ‚ сС ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡˆΠ΅ Siemens Simatic S7-300 series PLC.
  3. PlcSim Π΅ PLC Π΅ΠΌΡƒΠ»Π°Ρ‚ΠΎΡ€ кој Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° стартуватС ΠΈ Π΄Π΅Π±Π°Π³ΠΈΡ€Π°Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ Π·Π° Siemens 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 0401a0206 ..w............. 0100: 0103 0102 0 02 00000030 ................ 0501: 0202 1602 0501 0206 0100 0104 0102a00000040 7502 u................. 0401: 0206 0100 0105 0102 0 02 0501 00000050..........0202. 1602: 0501 0206 0100 0106 0102 3402 4 00000060 .........&..... 0401: 0206c0100 0107 0102 2602 0501 0202. : 00000070 4 02 0501 0206a0100 0108 0102 3302 ................ 0401: 3 00000080 0206 0100a 0109 0102 0 02 .........0501. 0202a1602: 00000090 0501b 0206 0100 010 0102 3702 0401 ......".....F... 0206b7: 000000 0 0100c 010 0102 2202 . .. 0501c0202: 4602d 0501 000000a0 0206 0100 010 0102 3302 ................ 0401d0206: 0100 3e 000000 0d010 0102 0 ....... .... 02e0501: 0202 1602 0501 0206 000000 0 0100 010 ........#...... 0102f6: 02 0401 0206 0100 010 000000 .....0 . … .....&. 0102: 1102 0501 0202c2302 0501 0206 0100 ....L......

Како ΡˆΡ‚ΠΎ сугСрира ΠΈΠΌΠ΅Ρ‚ΠΎ, Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° block_upload_traffic.pcapng содрТи дСпонија ΠΎΠ΄ Π±Π»ΠΎΠΊ ΡΠΎΠΎΠ±Ρ€Π°ΡœΠ°Ρ˜ Π·Π° ΠΏΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π½Π° PLC.

Π’Ρ€Π΅Π΄ΠΈ Π΄Π° сС Π½Π°ΠΏΠΎΠΌΠ΅Π½Π΅ Π΄Π΅ΠΊΠ° ΠΎΠ²Π°Π° ΡΠΎΠΎΠ±Ρ€Π°ΡœΠ°Ρ˜Π½Π° дСпонија Π½Π° мСстото Π½Π° Π½Π°Ρ‚ΠΏΡ€Π΅Π²Π°Ρ€ΠΎΡ‚ Π·Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΡ˜Π°Ρ‚Π° бСшС ΠΌΠ°Π»ΠΊΡƒ ΠΏΠΎΡ‚Π΅ΡˆΠΊΠΎ Π΄Π° сС Π΄ΠΎΠ±ΠΈΠ΅. Π—Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΎΠ²Π°, бСшС Π½Π΅ΠΎΠΏΡ…ΠΎΠ΄Π½ΠΎ Π΄Π° сС Ρ€Π°Π·Π±Π΅Ρ€Π΅ скриптата ΠΎΠ΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½Π°Ρ‚Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Π·Π° TeslaSCADA2. Од Π½Π΅Π³ΠΎ бСшС ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° сС Ρ€Π°Π·Π±Π΅Ρ€Π΅ ΠΊΠ°Π΄Π΅ сС Π½Π°ΠΎΡ“Π° Π΄Π΅ΠΏΠΎΠ½ΠΈΡ˜Π°Ρ‚Π° ΡˆΠΈΡ„Ρ€ΠΈΡ€Π°Π½Π° со RC4 ΠΈ кој ΠΊΠ»ΡƒΡ‡ Ρ‚Ρ€Π΅Π±Π°ΡˆΠ΅ Π΄Π° сС користи Π·Π° Π΄Π° сС Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΈΡ€Π°. Π”Π΅ΠΏΠΎΠ½ΠΈΠΈ ΠΎΠ΄ Π±Π»ΠΎΠΊΠΎΠ²ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π½Π° Π»ΠΎΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π΄ΠΎΠ±ΠΈΡ˜Π°Ρ‚ со ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΡ‚ Π½Π° ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΡ‚ S7. Π—Π° ΠΎΠ²Π° Π³ΠΎ користСв Π΄Π΅ΠΌΠΎ-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΡ‚ ΠΎΠ΄ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΡ‚ Snap7.

Π˜Π·Π²Π»Π΅ΠΊΡƒΠ²Π°ΡšΠ΅ Π±Π»ΠΎΠΊΠΎΠ²ΠΈ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° сигнал ΠΎΠ΄ ΡΠΎΠΎΠ±Ρ€Π°ΡœΠ°Ρ˜Π½Π° дСпонија

Π“Π»Π΅Π΄Π°Ρ˜ΡœΠΈ ја содрТината Π½Π° Π΄Π΅ΠΏΠΎΠ½ΠΈΡ˜Π°Ρ‚Π°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ Π΄Π΅ΠΊΠ° содрТи Π±Π»ΠΎΠΊΠΎΠ²ΠΈ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° сигнал OB1, FC1, FC2 ΠΈ FC3:

По стапкитС Π½Π° Industrial Ninja: ΠΊΠ°ΠΊΠΎ PLC бСшС Ρ…Π°ΠΊΠΈΡ€Π°Π½ Π½Π° Positive Hack Days 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 (pp). Π‘Π΅Π³Π° Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ ΠΊΠ°ΠΊΠΎ Π΄Π° Π³ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅. ΠΠ°Π²Π΅ΡΡ‚ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π·Π° Π·Π°Π΄Π°Ρ‡Π° сугСрира Π΄Π΅ΠΊΠ° Ρ‚Ρ€Π΅Π±Π° Π΄Π° користитС PlcSim Π·Π° ΠΎΠ²Π°.

Π”ΠΎΠ±ΠΈΠ²Π°ΡšΠ΅ инструкции Ρ‡ΠΈΡ‚Π»ΠΈΠ²ΠΈ ΠΎΠ΄ Π»ΡƒΡ“Π΅ ΠΎΠ΄ Π±Π»ΠΎΠΊΠΎΠ²ΠΈ

ΠŸΡ€Π²ΠΎ, Π΄Π° сС ΠΎΠ±ΠΈΠ΄Π΅ΠΌΠ΅ Π΄Π° Π³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°ΠΌΠ΅ S7-PlcSim со Π²Ρ‡ΠΈΡ‚ΡƒΠ²Π°ΡšΠ΅ Π½Π° Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Π±Π»ΠΎΠΊΠΎΠ²ΠΈ со ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡƒΠ²Π°Ρ‡ΠΊΠΈ инструкции (= Q 0.0) Π²ΠΎ Π½Π΅Π³ΠΎ со помош Π½Π° софтвСрот Simatic Manager ΠΈ Π·Π°Ρ‡ΡƒΠ²ΡƒΠ²Π°ΡšΠ΅ Π½Π° PLC Π΄ΠΎΠ±ΠΈΠ΅Π½ Π²ΠΎ Π΅ΠΌΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΎΡ‚ Π²ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° example.plc. Π“Π»Π΅Π΄Π°Ρ˜ΡœΠΈ ја содрТината Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ лСсно Π΄Π° Π³ΠΎ ΠΎΠ΄Ρ€Π΅Π΄ΠΈΡ‚Π΅ ΠΏΠΎΡ‡Π΅Ρ‚ΠΎΠΊΠΎΡ‚ Π½Π° ΠΏΡ€Π΅Π·Π΅ΠΌΠ΅Π½ΠΈΡ‚Π΅ Π±Π»ΠΎΠΊΠΎΠ²ΠΈ со потписот 70 70, ΡˆΡ‚ΠΎ Π³ΠΎ ΠΎΡ‚ΠΊΡ€ΠΈΠ²ΠΌΠ΅ ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎ. ΠŸΡ€Π΅Π΄ Π±Π»ΠΎΠΊΠΎΠ²ΠΈΡ‚Π΅, ΠΎΡ‡ΠΈΠ³Π»Π΅Π΄Π½ΠΎ, Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°Ρ‚Π° Π½Π° Π±Π»ΠΎΠΊΠΎΡ‚ Π΅ напишана ΠΊΠ°ΠΊΠΎ врСдност ΠΎΠ΄ 4 Π±Π°Ρ˜Ρ‚ΠΈ ΠΌΠ°Π»ΠΊΡƒ Сндиска.

По стапкитС Π½Π° Industrial Ninja: ΠΊΠ°ΠΊΠΎ PLC бСшС Ρ…Π°ΠΊΠΈΡ€Π°Π½ Π½Π° Positive Hack Days 9

ΠžΡ‚ΠΊΠ°ΠΊΠΎ Π΄ΠΎΠ±ΠΈΠ²ΠΌΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π° структурата Π½Π° plc-Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅, сС појави слСдниов Π°ΠΊΡ†ΠΈΠΎΠ½Π΅Π½ ΠΏΠ»Π°Π½ Π·Π° Ρ‡ΠΈΡ‚Π°ΡšΠ΅ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ‚Π΅ PLC S7:

  1. ΠšΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π³ΠΎ Simatic Manager, создавамС Π±Π»ΠΎΠΊ структура Π²ΠΎ S7-PlcSim слична Π½Π° ΠΎΠ½Π°Π° ΡˆΡ‚ΠΎ ја Π΄ΠΎΠ±ΠΈΠ²ΠΌΠ΅ ΠΎΠ΄ Π΄Π΅ΠΏΠΎΠ½ΠΈΡ˜Π°Ρ‚Π°. Π“ΠΎΠ»Π΅ΠΌΠΈΠ½ΠΈΡ‚Π΅ Π½Π° Π±Π»ΠΎΠΊΠΎΠ²ΠΈΡ‚Π΅ ΠΌΠΎΡ€Π° Π΄Π° ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π°Π°Ρ‚ (ΠΎΠ²Π° сС постигнува со ΠΏΠΎΠΏΠΎΠ»Π½ΡƒΠ²Π°ΡšΠ΅ Π½Π° Π±Π»ΠΎΠΊΠΎΠ²ΠΈΡ‚Π΅ со ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈΠΎΡ‚ Π±Ρ€ΠΎΡ˜ инструкции) ΠΈ Π½ΠΈΠ²Π½ΠΈΡ‚Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈ (OB1, FC1, FC2, FC3).
  2. Π—Π°Ρ‡ΡƒΠ²Π°Ρ˜Ρ‚Π΅ Π³ΠΎ PLC Π²ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°.
  3. Π‘ΠΎΠ΄Ρ€ΠΆΠΈΠ½Π°Ρ‚Π° Π½Π° Π±Π»ΠΎΠΊΠΎΠ²ΠΈΡ‚Π΅ Π²ΠΎ Π΄ΠΎΠ±ΠΈΠ΅Π½Π°Ρ‚Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° ја Π·Π°ΠΌΠ΅Π½ΡƒΠ²Π°ΠΌΠ΅ со Π±Π»ΠΎΠΊΠΎΠ²ΠΈΡ‚Π΅ ΠΎΠ΄ Π΄Π΅ΠΏΠΎΠ½ΠΈΡ˜Π°Ρ‚Π° Π·Π° ΡΠΎΠΎΠ±Ρ€Π°ΡœΠ°Ρ˜. ΠŸΠΎΡ‡Π΅Ρ‚ΠΎΠΊΠΎΡ‚ Π½Π° Π±Π»ΠΎΠΊΠΎΠ²ΠΈΡ‚Π΅ сС ΠΎΠ΄Ρ€Π΅Π΄ΡƒΠ²Π° со потписот.
  4. Π”ΠΎΠ±ΠΈΠ΅Π½Π°Ρ‚Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° ја Π²Ρ‡ΠΈΡ‚ΡƒΠ²Π°ΠΌΠ΅ Π²ΠΎ S7-PlcSim ΠΈ ја Π³Π»Π΅Π΄Π°ΠΌΠ΅ содрТината Π½Π° Π±Π»ΠΎΠΊΠΎΠ²ΠΈΡ‚Π΅ Π²ΠΎ Simatic Manager.

Π‘Π»ΠΎΠΊΠΎΠ²ΠΈΡ‚Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π·Π°ΠΌΠ΅Π½Π°Ρ‚, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, со слСдниов ΠΊΠΎΠ΄:

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 Π΄Π° ΠΊΠΎΠΌΡƒΠ½ΠΈΡ†ΠΈΡ€Π° ΠΏΡ€Π΅ΠΊΡƒ ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°, Π΄Π° поставува Π±Π»ΠΎΠΊΠΎΠ²ΠΈ Π½Π° PlcSim ΠΏΡ€Π΅ΠΊΡƒ Snap7 ΠΈ ΠΏΠΎΡ‚ΠΎΠ° Π΄Π° Π³ΠΈ ΠΏΡ€Π΅Π·Π΅ΠΌΠ°Π°Ρ‚ ΠΎΠ²ΠΈΠ΅ Π±Π»ΠΎΠΊΠΎΠ²ΠΈ ΠΊΠ°ΠΊΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΎΠ΄ PlcSim ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ ја Ρ€Π°Π·Π²ΠΎΡ˜Π½Π°Ρ‚Π° ΠΎΠΊΠΎΠ»ΠΈΠ½Π°.

Π‘ΠΎ ΠΎΡ‚Π²ΠΎΡ€Π°ΡšΠ΅ Π½Π° Π΄ΠΎΠ±ΠΈΠ΅Π½Π°Ρ‚Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Π²ΠΎ S7-PlcSim, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚Π΅ ΠΏΡ€Π΅ΠΏΠΈΡˆΠ°Π½ΠΈΡ‚Π΅ Π±Π»ΠΎΠΊΠΎΠ²ΠΈ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π³ΠΎ Simatic Manager. Π“Π»Π°Π²Π½ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π° Π½Π° ΡƒΡ€Π΅Π΄ΠΎΡ‚ сС Π·Π°ΠΏΠΈΡˆΡƒΠ²Π°Π°Ρ‚ Π²ΠΎ Π±Π»ΠΎΠΊΠΎΡ‚ FC1. ПосСбна забСлСшка Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° #TEMP0, која ΠΊΠΎΠ³Π° Π΅ Π²ΠΊΠ»ΡƒΡ‡Π΅Π½Π° сС Ρ‡ΠΈΠ½ΠΈ Π΄Π΅ΠΊΠ° ја поставува PLC ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π°Ρ‚Π° Π½Π° Ρ€Π°Ρ‡Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ Π²Ρ€Π· основа Π½Π° врСдноститС Π½Π° Π±ΠΈΡ‚Π½Π°Ρ‚Π° ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π° M2.2 ΠΈ M2.3. ВрСдноста #TEMP0 Π΅ поставСна со Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° FC3.

По стапкитС Π½Π° Industrial Ninja: ΠΊΠ°ΠΊΠΎ PLC бСшС Ρ…Π°ΠΊΠΈΡ€Π°Π½ Π½Π° Positive Hack Days 9

Π—Π° Π΄Π° Π³ΠΎ Ρ€Π΅ΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΡ‚, Ρ‚Ρ€Π΅Π±Π° Π΄Π° ја Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° FC3 ΠΈ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΡˆΡ‚ΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ Π·Π° Π΄Π° сС Π²Ρ€Π°Ρ‚ΠΈ Π»ΠΎΠ³ΠΈΡ‡Π½Π°.

Π‘Π»ΠΎΠΊΠΎΠ²ΠΈΡ‚Π΅ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° сигналот Π½Π° PLC Π½Π° ΡˆΡ‚Π°Π½Π΄ΠΎΡ‚ со ниска бСзбСдност Π½Π° мСстото Π½Π° Π½Π°Ρ‚ΠΏΡ€Π΅Π²Π°Ρ€ΠΎΡ‚ Π±Π΅Π° распорСдСни Π½Π° сличСн Π½Π°Ρ‡ΠΈΠ½, Π½ΠΎ Π·Π° Π΄Π° сС постави врСдноста Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° #TEMP0, Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ бСшС Π΄Π° сС напишС Π»ΠΈΠ½ΠΈΡ˜Π°Ρ‚Π° my ninja way Π²ΠΎ Π±Π»ΠΎΠΊΠΎΡ‚ DB1. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ‚Π° Π½Π° врСдноста Π²ΠΎ Π±Π»ΠΎΠΊΠΎΡ‚ бСшС Сдноставна ΠΈ Π½Π΅ Π±Π°Ρ€Π°ΡˆΠ΅ Π΄Π»Π°Π±ΠΎΠΊΠΎ познавањС Π½Π° програмскиот јазик Π½Π° Π±Π»ΠΎΠΊΠΎΡ‚. ΠžΡ‡ΠΈΠ³Π»Π΅Π΄Π½ΠΎ, Π½Π° Π½ΠΈΠ²ΠΎ Π½Π° висока бСзбСдност, ΠΏΠΎΡΡ‚ΠΈΠ³Π½ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Ρ€Π°Ρ‡Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π° ќС Π±ΠΈΠ΄Π΅ ΠΌΠ½ΠΎΠ³Ρƒ ΠΏΠΎΡ‚Π΅ΡˆΠΊΠΎ ΠΈ Π½Π΅ΠΎΠΏΡ…ΠΎΠ΄Π½ΠΎ Π΅ Π΄Π° сС Ρ€Π°Π·Π±Π΅Ρ€Π°Ρ‚ слоТСноста Π½Π° Ρ˜Π°Π·ΠΈΠΊΠΎΡ‚ STL (Π΅Π΄Π΅Π½ ΠΎΠ΄ Π½Π°Ρ‡ΠΈΠ½ΠΈΡ‚Π΅ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°ΡšΠ΅ Π½Π° S7 PLC).

ΠžΠ±Ρ€Π°Ρ‚Π΅Π½ Π±Π»ΠΎΠΊ FC3

Π‘ΠΎΠ΄Ρ€ΠΆΠΈΠ½Π° Π½Π° Π±Π»ΠΎΠΊΠΎΡ‚ FC3 Π²ΠΎ прСтставата STL:

      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

ΠšΠΎΠ΄ΠΎΡ‚ Π΅ ΠΏΡ€ΠΈΠ»ΠΈΡ‡Π½ΠΎ Π΄ΠΎΠ»Π³ ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅Π΄Π° ΠΊΠΎΠΌΠΏΠ»ΠΈΡ†ΠΈΡ€Π°Π½ Π·Π° нСкој ΡˆΡ‚ΠΎ Π½Π΅ Π΅ Π·Π°ΠΏΠΎΠ·Π½Π°Π΅Π½ со STL. НСма смисла Π΄Π° сС Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π° сСкоја ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ˜Π° Π²ΠΎ Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° овој Ρ‡Π»Π΅Π½; Π΄Π΅Ρ‚Π°Π»Π½ΠΈ упатства ΠΈ моТности Π½Π° Ρ˜Π°Π·ΠΈΠΊΠΎΡ‚ STL ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°Ρ˜Π΄Π°Ρ‚ Π²ΠΎ соодвСтниот ΠΏΡ€ΠΈΡ€Π°Ρ‡Π½ΠΈΠΊ: Бписок Π½Π° изјави (STL) Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°ΡšΠ΅ S7-300 ΠΈ S7-400. ОвдС ќС Π³ΠΎ прСтставам истиот ΠΊΠΎΠ΄ ΠΏΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° - ΠΏΡ€Π΅ΠΈΠΌΠ΅Π½ΡƒΠ²Π°ΡšΠ΅ Π½Π° Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈΡ‚Π΅ ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ ΠΈ додавањС ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈ ΠΊΠΎΠΈ Π³ΠΎ ΠΎΠΏΠΈΡˆΡƒΠ²Π°Π°Ρ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΡ‚ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° ΠΈ Π½Π΅ΠΊΠΎΠΈ STL Ρ˜Π°Π·ΠΈΡ‡Π½ΠΈ конструкции. Π”ΠΎΠ·Π²ΠΎΠ»Π΅Ρ‚Π΅ ΠΌΠΈ вСднаш Π΄Π° Π·Π°Π±Π΅Π»Π΅ΠΆΠ°ΠΌ Π΄Π΅ΠΊΠ° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΈΠΎΡ‚ Π±Π»ΠΎΠΊ содрТи Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π° машина која ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π° нСкој Π±Π°Ρ˜Ρ‚Π΅ΠΊΠΎΠ΄ Π»ΠΎΡ†ΠΈΡ€Π°Π½ Π²ΠΎ Π±Π»ΠΎΠΊΠΎΡ‚ DB100, Ρ‡ΠΈΡ˜Π° содрТина ја Π·Π½Π°Π΅ΠΌΠ΅. Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈΡ‚Π΅ Π·Π° Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π°Ρ‚Π° машина сС ΡΠΎΡΡ‚ΠΎΡ˜Π°Ρ‚ ΠΎΠ΄ 1 Π±Π°Ρ˜Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π΅Π½ ΠΊΠΎΠ΄ ΠΈ Π±Π°Ρ˜Ρ‚ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ, ΠΏΠΎ Π΅Π΄Π΅Π½ Π±Π°Ρ˜Ρ‚ Π·Π° сСкој Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚. Π‘ΠΈΡ‚Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄ΡƒΠ²Π°Π½ΠΈ инструкции ΠΈΠΌΠ°Π°Ρ‚ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ; јас Π³ΠΈ Π½Π°Π·Π½Π°Ρ‡ΠΈΠ² Π½ΠΈΠ²Π½ΠΈΡ‚Π΅ врСдности Π²ΠΎ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΡ‚Π΅ ΠΊΠ°ΠΊΠΎ X ΠΈ Y.

Код ΠΏΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π°]

# Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…
      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, Ρ‚ΠΎΠ³Π°Ρˆ сС Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π° Ρ€Π°Ρ‡Π½Π° PLC ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π° ΠΈ ќС Π±ΠΈΠ΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° сС Сксплодира ΠΈΠ»ΠΈ Π΄Π° сС ΠΈΠ·Π΄ΡƒΠ²Π° Π±Π°Π»ΠΎΠ½ΠΎΡ‚.


Π’ΠΎΠ° Π΅ сС! АлСксСј ΠΏΠΎΠΊΠ°ΠΆΠ° високо Π½ΠΈΠ²ΠΎ Π½Π° знаСњС Π΄ΠΎΡΡ‚ΠΎΡ˜Π½ΠΎ Π·Π° индустриски нинџа :) На ΠΏΠΎΠ±Π΅Π΄Π½ΠΈΠΊΠΎΡ‚ ΠΌΡƒ испративмС Π½Π΅Π·Π°Π±ΠΎΡ€Π°Π²Π½ΠΈ Π½Π°Π³Ρ€Π°Π΄ΠΈ. Π“ΠΎΠ»Π΅ΠΌΠ° благодарност Π΄ΠΎ ситС учСсници!

Π˜Π·Π²ΠΎΡ€: www.habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π΄ΠΎΠ²Π΅Ρ€Π»ΠΈΠ² хостинг Π·Π° ΡΠ°Ρ˜Ρ‚ΠΎΠ²ΠΈ со DDoS Π·Π°ΡˆΡ‚ΠΈΡ‚Π°, VPS VDS сСрвСри πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ сигурСн Π²Π΅Π±-хостинг со DDoS Π·Π°ΡˆΡ‚ΠΈΡ‚Π°, VPS VDS сСрвСри | ProHoster