ΠΠ° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ PHDays 9 ΠΏΡΠΎΠ²Π΅Π΄ΠΎΡ ΠΌΠ΅ ΡΡΡΡΠ΅Π·Π°Π½ΠΈΠ΅ Π·Π° Ρ Π°ΠΊΠ²Π°Π½Π΅ Π½Π° Π³Π°Π·ΠΎΠ²Π° ΠΏΠΎΠΌΠΏΠ° - ΡΡΡΡΠ΅Π·Π°Π½ΠΈΠ΅ . ΠΠ° ΠΏΠ»ΠΎΡΠ°Π΄ΠΊΠ°ΡΠ° ΠΈΠΌΠ°ΡΠ΅ ΡΡΠΈ ΡΠ°Π½Π΄Π° Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π·Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ (ΠΠ΅Π· ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ, ΠΠΈΡΠΊΠ° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ, ΠΠΈΡΠΎΠΊΠ° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ), Π΅ΠΌΡΠ»ΠΈΡΠ°ΡΠΈ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡΡ ΠΏΡΠΎΠΌΠΈΡΠ»Π΅Π½ ΠΏΡΠΎΡΠ΅Ρ: Π²ΡΠ·Π΄ΡΡ ΠΏΠΎΠ΄ Π½Π°Π»ΡΠ³Π°Π½Π΅ ΡΠ΅ Π½Π°Π³Π½Π΅ΡΡΠ²Π° Π² Π±Π°Π»ΠΎΠ½ (ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π²Π°).
ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ, Ρ Π°ΡΠ΄ΡΠ΅ΡΠ½ΠΈΡΡ ΡΡΡΡΠ°Π² Π½Π° ΡΠ°Π½Π΄ΠΎΠ²Π΅ΡΠ΅ Π±Π΅ΡΠ΅ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡΡ: Siemens Simatic PLC ΡΠ΅ΡΠΈΡ S7-300; Π±ΡΡΠΎΠ½ Π·Π° Π°Π²Π°ΡΠΈΠΉΠ½ΠΎ ΠΈΠ·ΠΏΡΡΠΊΠ°Π½Π΅ Π½Π° Π²ΡΠ·Π΄ΡΡ ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π·Π° ΠΈΠ·ΠΌΠ΅ΡΠ²Π°Π½Π΅ Π½Π° Π½Π°Π»ΡΠ³Π°Π½Π΅ΡΠΎ (ΡΠ²ΡΡΠ·Π°Π½ΠΈ ΠΊΡΠΌ ΡΠΈΡΡΠΎΠ²ΠΈ Π²Ρ ΠΎΠ΄ΠΎΠ²Π΅ Π½Π° PLC (DI)); ΠΊΠ»Π°ΠΏΠ°Π½ΠΈ, ΡΠ°Π±ΠΎΡΠ΅ΡΠΈ Π·Π° Π½Π°Π΄ΡΠ²Π°Π½Π΅ ΠΈ ΠΈΠ·ΠΏΡΡΠΊΠ°Π½Π΅ Π½Π° Π²ΡΠ·Π΄ΡΡ (ΡΠ²ΡΡΠ·Π°Π½ΠΈ ΠΊΡΠΌ ΡΠΈΡΡΠΎΠ²ΠΈΡΠ΅ ΠΈΠ·Ρ ΠΎΠ΄ΠΈ Π½Π° PLC (DO)) - Π²ΠΈΠΆΡΠ΅ ΡΠΈΠ³ΡΡΠ°ΡΠ° ΠΏΠΎ-Π΄ΠΎΠ»Ρ.

PLC, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈΡΡΠ° Π½Π° Π½Π°Π»ΡΠ³Π°Π½Π΅ΡΠΎ ΠΈ Π² ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΡΡΡ ΡΠ²ΠΎΡΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°, Π²Π·Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π° ΠΈΠ·ΠΏΡΡΠ½Π΅ ΠΈΠ»ΠΈ Π½Π°Π΄ΡΠ΅ ΡΠΎΠΏΠΊΠ°ΡΠ° (ΠΎΡΠ²Π°ΡΡ ΠΈ Π·Π°ΡΠ²Π°ΡΡ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡΠ΅ ΠΊΠ»Π°ΠΏΠ°Π½ΠΈ). ΠΡΠΈΡΠΊΠΈ ΡΡΠ΅Π½Π΄ΠΎΠ²Π΅ ΠΎΠ±Π°ΡΠ΅ ΠΈΠΌΠ°Ρ
Π° ΡΡΡΠ΅Π½ ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΡΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°Ρ ΡΡΡΡΠΎΡΠ½ΠΈΡΡΠ° Π½Π° ΠΊΠ»Π°ΠΏΠ°Π½ΠΈΡΠ΅ Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ.
Π‘ΡΠΎΠΉΠΊΠΈΡΠ΅ ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π°Ρ Π° ΠΏΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡΠ° Π½Π° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠΎΠ·ΠΈ ΡΠ΅ΠΆΠΈΠΌ: Π½Π° Π½Π΅Π·Π°ΡΠΈΡΠ΅Π½Π°ΡΠ° ΡΡΠΎΠΉΠΊΠ° Π±Π΅ΡΠ΅ Π½Π°ΠΉ-Π»Π΅ΡΠ½ΠΎ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ ΡΠΎΠ²Π°, Π° Π½Π° ΡΡΠΎΠΉΠΊΠ°ΡΠ° Ρ Π²ΠΈΡΠΎΠΊΠ° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ Π±Π΅ΡΠ΅ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΎ ΠΏΠΎ-ΡΡΡΠ΄Π½ΠΎ.
ΠΠ΅Ρ ΠΎΡ ΡΠ΅ΡΡΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π±ΡΡ Π° ΡΠ΅ΡΠ΅Π½ΠΈ Π·Π° Π΄Π²Π° Π΄Π½ΠΈ; ΠΠ»Π°ΡΠΈΡΠ°Π½ΠΈΡΡ Π½Π° ΠΏΡΡΠ²ΠΎ ΠΌΡΡΡΠΎ ΡΡΠ°ΡΡΠ½ΠΈΠΊ ΡΠΏΠ΅ΡΠ΅Π»ΠΈ 233 ΡΠΎΡΠΊΠΈ (ΠΏΡΠ΅ΠΊΠ°ΡΠ° Π΅Π΄Π½Π° ΡΠ΅Π΄ΠΌΠΈΡΠ° Π² ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° Π·Π° ΡΡΡΡΠ΅Π·Π°Π½ΠΈΠ΅ΡΠΎ). Π’ΡΠΈΠΌΠ° ΠΏΠΎΠ±Π΅Π΄ΠΈΡΠ΅Π»ΠΈ: I ΠΌΡΡΡΠΎ - a1exdandy, II - Rubicoid, III - Ze.
ΠΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° PHDays ΠΎΠ±Π°ΡΠ΅ Π½ΠΈΠΊΠΎΠΉ ΠΎΡ ΡΡΠ°ΡΡΠ½ΠΈΡΠΈΡΠ΅ Π½Π΅ ΡΡΠΏΡ Π΄Π° ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»Π΅Π΅ ΠΈ ΡΡΠΈΡΠ΅ ΡΡΠΎΠΉΠΊΠΈ, Π·Π°ΡΠΎΠ²Π° ΡΠ΅ΡΠΈΡ ΠΌΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΎΠ½Π»Π°ΠΉΠ½ ΡΡΡΡΠ΅Π·Π°Π½ΠΈΠ΅ ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Ρ ΠΌΠ΅ Π½Π°ΠΉ-ΡΡΡΠ΄Π½Π°ΡΠ° Π·Π°Π΄Π°ΡΠ° Π² Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° ΡΠ½ΠΈ. Π£ΡΠ°ΡΡΠ½ΠΈΡΠΈΡΠ΅ ΡΡΡΠ±Π²Π°ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΡΡ Π·Π°Π΄Π°ΡΠ°ΡΠ° Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° Π΅Π΄ΠΈΠ½ ΠΌΠ΅ΡΠ΅Ρ, Π΄Π° Π½Π°ΠΌΠ΅ΡΡΡ Π·Π½Π°ΠΌΠ΅ΡΠΎ ΠΈ Π΄Π° ΠΎΠΏΠΈΡΠ°Ρ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΈ ΠΏΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ΅Π½ Π½Π°ΡΠΈΠ½.
ΠΠΎ-Π΄ΠΎΠ»Ρ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°ΠΌΠ΅ Π°Π½Π°Π»ΠΈΠ· Π½Π° Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠΎΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π·Π°Π΄Π°ΡΠ°ΡΠ° ΠΎΡ ΠΈΠ·ΠΏΡΠ°ΡΠ΅Π½ΠΈΡΠ΅ ΠΏΡΠ΅Π· ΠΌΠ΅ΡΠ΅ΡΠ°, Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΎ ΠΎΡ ΠΠ»Π΅ΠΊΡΠ΅ΠΉ ΠΠΎΠ²ΡΠΈΠΆΠ½ΡΡ (a1exdandy) ΠΎΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΡΠ° Digital Security, ΠΊΠΎΠΉΡΠΎ Π·Π°Π΅ XNUMX-Π²ΠΎ ΠΌΡΡΡΠΎ Π² ΡΡΡΡΠ΅Π·Π°Π½ΠΈΠ΅ΡΠΎ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° PHDays. ΠΠΎ-Π΄ΠΎΠ»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠΌΠ΅ Π½Π΅Π³ΠΎΠ²ΠΈΡ ΡΠ΅ΠΊΡΡ Ρ Π½Π°ΡΠΈΡΠ΅ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈ.
ΠΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π΅Π½ Π°Π½Π°Π»ΠΈΠ·
Π ΡΠ°ΠΊΠ°, Π·Π°Π΄Π°ΡΠ°ΡΠ° ΡΡΠ΄ΡΡΠΆΠ°ΡΠ΅ Π°ΡΡ ΠΈΠ² ΡΡΡ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅:
- block_upload_traffic.pcapng
- DB100.bin
- hints.txt
Π€Π°ΠΉΠ»ΡΡ hints.txt ΡΡΠ΄ΡΡΠΆΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ°ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ Π·Π° ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° Π·Π°Π΄Π°ΡΠ°ΡΠ°. ΠΡΠΎ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ ΠΌΡ:
- ΠΡΠ΅ΡΠ° ΠΠ΅ΡΡΠΎΠ²ΠΈΡ ΠΌΠΈ ΠΊΠ°Π·Π°, ΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π·Π°ΡΠ΅ΠΆΠ΄Π°ΡΠ΅ Π±Π»ΠΎΠΊΠΎΠ²Π΅ ΠΎΡ PlcSim Π² Step7.
- ΠΠ° ΡΠ°Π½Π΄Π° Π±Π΅ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ PLC Π½Π° Siemens Simatic S7-300.
- 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: 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 u............... 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 L.........0206. .. 0100 : 0109 0102 0 02 0501a0202 1602 00000090 0501 ................ 0206: 0100 010 0102 3702a 0401 0206 7 000000 .........0. .... 0100a010: 0102 2202b 0501 0202 4602 0501 000000 0 ......".....F... 0206b0100: 010 0102 3302c 0401 0206 0100 3 000000 ........0. .... .. 010c0102: 0d 02 0501a0202 1602 0501 0206 000000 0 ................ 0100d010: 0102 6e 02 0401d0206 0100 010 000000 0f ......m. .... .... 0102e1102: 0501 0202 2302 0501 0206 0100 000000 0 ........#...... 0110f0102: 3502 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 0501c0206 0100 XNUMX XNUMX ....L......
ΠΠ°ΠΊΡΠΎ ΠΏΠΎΠ΄ΡΠΊΠ°Π·Π²Π° ΠΈΠΌΠ΅ΡΠΎ, ΡΠ°ΠΉΠ»ΡΡ block_upload_traffic.pcapng ΡΡΠ΄ΡΡΠΆΠ° Π΄ΡΠΌΠΏ Π½Π° ΡΡΠ°ΡΠΈΠΊΠ° Π·Π° ΠΊΠ°ΡΠ²Π°Π½Π΅ Π½Π° Π±Π»ΠΎΠΊΠΎΠ²Π΅ ΠΊΡΠΌ PLC.
Π‘ΡΡΡΠ²Π° ΡΠΈ Π΄Π° ΡΠ΅ ΠΎΡΠ±Π΅Π»Π΅ΠΆΠΈ, ΡΠ΅ ΡΠΎΠ·ΠΈ ΡΡΠ°ΡΠΈΠΊ Π½Π° ΠΌΡΡΡΠΎΡΠΎ Π½Π° ΡΡΡΡΠ΅Π·Π°Π½ΠΈΠ΅ΡΠΎ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΡΠ° Π±Π΅ΡΠ΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-ΡΡΡΠ΄Π΅Π½ Π·Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅. ΠΠ° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΎΠ²Π°, Π±Π΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΡΠΊΡΠΈΠΏΡΠ° ΠΎΡ ΡΠ°ΠΉΠ»Π° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Π·Π° TeslaSCADA2. ΠΡ Π½Π΅Π³ΠΎ Π±Π΅ΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΡΠ°Π·Π±Π΅ΡΠ΅ ΠΊΡΠ΄Π΅ ΡΠ΅ Π½Π°ΠΌΠΈΡΠ° Π΄ΡΠΌΠΏΡΡ, ΡΠΈΡΡΠΎΠ²Π°Π½ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° RC4, ΠΈ ΠΊΠ°ΠΊΡΠ² ΠΊΠ»ΡΡ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° Π΄Π΅ΡΠΈΡΡΠΈΡΠ°Π½Π΅ΡΠΎ ΠΌΡ. ΠΠ·Ρ Π²ΡΡΠ»ΡΠ½ΠΈΡ Π½Π° Π±Π»ΠΎΠΊΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΈ Π½Π° ΠΌΡΡΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π½Π° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° S7. ΠΠ° ΡΠ΅Π»ΡΠ° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π΄Π΅ΠΌΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΎΡ ΠΏΠ°ΠΊΠ΅ΡΠ° Snap7.
ΠΠ·Π²Π»ΠΈΡΠ°Π½Π΅ Π½Π° Π±Π»ΠΎΠΊΠΎΠ²Π΅ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΠΈΠ³Π½Π°Π»Π° ΠΎΡ Π΄ΡΠΌΠΏ Π½Π° ΡΡΠ°ΡΠΈΠΊΠ°
Π Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΉΠΊΠΈ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° Π΄ΡΠΌΠΏΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅, ΡΠ΅ ΡΠΎΠΉ ΡΡΠ΄ΡΡΠΆΠ° Π±Π»ΠΎΠΊΠΎΠ²Π΅ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΠΈΠ³Π½Π°Π»ΠΈ OB1, FC1, FC2 ΠΈ FC3:

Π’Π΅Π·ΠΈ Π±Π»ΠΎΠΊΠΎΠ²Π΅ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΡΠ΅ΠΌΠ°Ρ
Π½Π°ΡΠΈ. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡΠ°Π½Π΅ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΡΡ ΡΠ»Π΅Π΄Π½ΠΈΡ ΡΠΊΡΠΈΠΏΡ, ΠΊΠ°ΡΠΎ ΠΏΡΠ΅Π΄ΠΈ ΡΠΎΠ²Π° ΡΡΠ°ΡΠΈΠΊΡΡ Π΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½ ΠΎΡ ΡΠΎΡΠΌΠ°Ρ 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-Π±Π°ΠΉΡΠΎΠ²Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ ΠΎΡ ΠΌΠ°Π»ΠΊΠΈΡ ΠΊΡΠ°ΠΉ.

Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡ
ΠΌΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° Π½Π° plc ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅, ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ ΡΠ»Π΅Π΄Π½ΠΈΡΡ ΠΏΠ»Π°Π½ Π·Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π·Π° ΡΠ΅ΡΠ΅Π½Π΅ Π½Π° PLC S7 ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ:
- ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Simatic Manager, ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ Π±Π»ΠΎΠΊΠΎΠ²Π° ΡΡΡΡΠΊΡΡΡΠ° Π² S7-PlcSim, ΠΏΠΎΠ΄ΠΎΠ±Π½Π° Π½Π° ΡΠ°Π·ΠΈ, ΠΊΠΎΡΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡ ΠΌΠ΅ ΠΎΡ Π΄ΡΠΌΠΏΠ°. Π Π°Π·ΠΌΠ΅ΡΠΈΡΠ΅ Π½Π° Π±Π»ΠΎΠΊΠΎΠ²Π΅ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΠ²ΠΏΠ°Π΄Π°Ρ (ΡΠΎΠ²Π° ΡΠ΅ ΠΏΠΎΡΡΠΈΠ³Π° ΡΡΠ΅Π· ΠΏΠΎΠΏΡΠ»Π²Π°Π½Π΅ Π½Π° Π±Π»ΠΎΠΊΠΎΠ²Π΅ΡΠ΅ Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡ Π±ΡΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ) ΠΈ ΡΠ΅Ρ Π½ΠΈΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΈ (OB1, FC1, FC2, FC3).
- ΠΠ°ΠΏΠ°Π·Π΅ΡΠ΅ PLC Π²ΡΠ² ΡΠ°ΠΉΠ».
- ΠΠ°ΠΌΠ΅Π½ΡΠΌΠ΅ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° Π±Π»ΠΎΠΊΠΎΠ²Π΅ΡΠ΅ Π² ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠ» Ρ Π±Π»ΠΎΠΊΠΎΠ²Π΅ΡΠ΅ ΠΎΡ Π΄ΡΠΌΠΏΠ° Π½Π° ΡΡΠ°ΡΠΈΠΊΠ°. ΠΠ°ΡΠ°Π»ΠΎΡΠΎ Π½Π° Π±Π»ΠΎΠΊΠΎΠ²Π΅ΡΠ΅ ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΎΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°.
- ΠΠ°ΡΠ΅ΠΆΠ΄Π°ΠΌΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠ» Π² 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.

ΠΠ° Π΄Π° ΡΠ°Π·ΡΠ΅ΡΠΈΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΡΡΡΠ±Π²Π° Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡΡΠ° FC3 ΠΈ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ, ΡΠ°ΠΊΠ° ΡΠ΅ Π΄Π° Π²ΡΡΠ½Π΅ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠ° Π΅Π΄ΠΈΠ½ΠΈΡΠ°.
ΠΠ»ΠΎΠΊΠΎΠ²Π΅ΡΠ΅ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΠΈΠ³Π½Π°Π»Π° Π½Π° PLC Π½Π° ΡΠ°Π½Π΄Π° Ρ Π½ΠΈΡΠΊΠ° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ Π½Π° ΠΌΡΡΡΠΎΡΠΎ Π½Π° ΡΡΡΡΠ΅Π·Π°Π½ΠΈΠ΅ΡΠΎ Π±ΡΡ Π° ΠΏΠΎΠ΄ΡΠ΅Π΄Π΅Π½ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π°ΡΠΈΠ½, Π½ΠΎ Π·Π° Π΄Π° ΡΠ΅ Π·Π°Π΄Π°Π΄Π΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° #TEMP0, Π±Π΅ΡΠ΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Π΄Π° ΡΠ΅ Π½Π°ΠΏΠΈΡΠ΅ Π»ΠΈΠ½ΠΈΡΡΠ° ΠΏΠΎ ΠΌΠΎΡ Π½ΠΈΠ½Π΄ΠΆΠ° Π½Π°ΡΠΈΠ½ Π² Π±Π»ΠΎΠΊΠ° DB1. ΠΡΠΎΠ²Π΅ΡΠΊΠ°ΡΠ° Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π² Π±Π»ΠΎΠΊ Π±Π΅ΡΠ΅ Π»Π΅ΡΠ½Π° ΠΈ Π½Π΅ ΠΈΠ·ΠΈΡΠΊΠ²Π°ΡΠ΅ Π·Π°Π΄ΡΠ»Π±ΠΎΡΠ΅Π½ΠΈ ΠΏΠΎΠ·Π½Π°Π½ΠΈΡ Π½Π° Π΅Π·ΠΈΠΊΠ° Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ Π½Π° Π±Π»ΠΎΠΊΠΎΠ²Π΅. ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ Π΅, ΡΠ΅ Π½Π° Π½ΠΈΠ²ΠΎ High Security ΠΏΠΎΡΡΠΈΠ³Π°Π½Π΅ΡΠΎ Π½Π° ΡΡΡΠ½ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΡΡΡΠ΄Π½ΠΎ ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΡΠ°Π·Π±Π΅ΡΠ°Ρ ΡΡΠ½ΠΊΠΎΡΡΠΈΡΠ΅ Π½Π° Π΅Π·ΠΈΠΊΠ° 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 Π΅Π·ΠΈΠΊΠΎΠ²ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ. ΠΠ΅ΠΊΠ° Π²Π΅Π΄Π½Π°Π³Π° Π΄Π° ΠΎΡΠ±Π΅Π»Π΅ΠΆΠ°, ΡΠ΅ Π²ΡΠΏΡΠΎΡΠ½ΠΈΡΡ Π±Π»ΠΎΠΊ ΡΡΠ΄ΡΡΠΆΠ° Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π°, ΠΊΠΎΡΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° Π½ΡΠΊΠ°ΠΊΡΠ² Π±Π°ΠΉΡ ΠΊΠΎΠ΄, Π½Π°ΠΌΠΈΡΠ°Ρ ΡΠ΅ Π² Π±Π»ΠΎΠΊΠ° 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
