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

PLC, Π²ΠΎ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡ ΠΎΠ΄ ΠΎΡΡΠΈΡΡΠ²Π°ΡΠ°ΡΠ° Π½Π° ΠΏΡΠΈΡΠΈΡΠΎΠΊΠΎΡ ΠΈ Π²ΠΎ ΡΠΎΠ³Π»Π°ΡΠ½ΠΎΡΡ ΡΠΎ ΡΠ²ΠΎΡΠ°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°, Π΄ΠΎΠ½Π΅ΡΠ΅ ΠΎΠ΄Π»ΡΠΊΠ° Π·Π° ΠΈΠ·Π΄ΡΠ²ΡΠ²Π°ΡΠ΅ ΠΈΠ»ΠΈ Π½Π°Π΄ΡΠ²ΡΠ²Π°ΡΠ΅ Π½Π° ΡΠΎΠΏΠΊΠ°ΡΠ° (Π³ΠΈ ΠΎΡΠ²ΠΎΡΠΈ ΠΈ Π·Π°ΡΠ²ΠΎΡΠΈ ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½ΠΈΡΠ΅ Π²Π΅Π½ΡΠΈΠ»ΠΈ). Π‘Π΅ΠΏΠ°ΠΊ, ΡΠΈΡΠ΅ ΡΡΠ°Π½Π΄ΠΎΠ²ΠΈ ΠΈΠΌΠ°Π° ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΡΠ°ΡΠ½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π°, ΡΡΠΎ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ Π΄Π° ΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°Π°Ρ ΡΠΎΡΡΠΎΡΠ±ΠΈΡΠ΅ Π½Π° Π²Π΅Π½ΡΠΈΠ»ΠΈΡΠ΅ Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΡΠ²Π°ΡΠ°.
Π¨ΡΠ°Π½Π΄ΠΎΠ²ΠΈΡΠ΅ ΡΠ΅ ΡΠ°Π·Π»ΠΈΠΊΡΠ²Π°Π° ΠΏΠΎ ΡΠ»ΠΎΠΆΠ΅Π½ΠΎΡΡΠ° Π½Π° ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΠΎΠ²ΠΎΡ ΡΠ΅ΠΆΠΈΠΌ: Π½Π° Π½Π΅Π·Π°ΡΡΠΈΡΠ΅Π½ΠΈΠΎΡ ΡΡΠ°Π½Π΄ Π±Π΅ΡΠ΅ Π½Π°ΡΠ»Π΅ΡΠ½ΠΎ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ ΡΠΎΠ°, Π° Π½Π° ΡΡΠ°Π½Π΄ΠΎΡ Π·Π° Π²ΠΈΡΠΎΠΊΠ° Π±Π΅Π·Π±Π΅Π΄Π½ΠΎΡΡ Π±Π΅ΡΠ΅ ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½ΠΎ ΠΏΠΎΡΠ΅ΡΠΊΠΎ.
ΠΠ΅Ρ ΠΎΠ΄ ΡΠ΅ΡΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Π±Π΅Π° ΡΠ΅ΡΠ΅Π½ΠΈ Π·Π° Π΄Π²Π° Π΄Π΅Π½Π°; ΠΡΠ²ΠΎΠΏΠ»Π°ΡΠΈΡΠ°Π½ΠΈΠΎΡ ΡΡΠ΅ΡΠ½ΠΈΠΊ Π·Π°ΡΠ°Π±ΠΎΡΠΈ 233 ΠΏΠΎΠ΅Π½ΠΈ (ΠΏΠΎΠΌΠΈΠ½Π° Π΅Π΄Π½Π° Π½Π΅Π΄Π΅Π»Π° ΠΏΠΎΠ΄Π³ΠΎΡΠ²ΡΠ²Π°ΡΡΠΈ ΡΠ΅ Π·Π° Π½Π°ΡΠΏΡΠ΅Π²Π°ΡΠΎΡ). Π’ΡΠΎΡΡΠ° Π΄ΠΎΠ±ΠΈΡΠ½ΠΈΡΠΈ: I ΠΌΠ΅ΡΡΠΎ - a1exdandy, II - Rubikoid, III - Ze.
Π‘Π΅ΠΏΠ°ΠΊ, Π·Π° Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π΄ΠΎΠΊΡΠΎΡΡΠΊΠΈΡΠ΅ Π΄Π΅Π½ΠΎΠ²ΠΈ, Π½ΠΈΡΡ Π΅Π΄Π΅Π½ ΠΎΠ΄ ΡΡΠ΅ΡΠ½ΠΈΡΠΈΡΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΈ Π½Π°Π΄ΠΌΠΈΠ½Π΅ ΡΠΈΡΠ΅ ΡΡΠΈ ΡΡΠ°Π½Π΄ΠΎΠ²ΠΈ, ΠΏΠ° ΡΠ΅ΡΠΈΠ²ΠΌΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌΠ΅ ΠΎΠ½Π»Π°ΡΠ½ Π½Π°ΡΠΏΡΠ΅Π²Π°Ρ ΠΈ Π½Π°ΡΡΠ΅ΡΠΊΠ°ΡΠ° Π·Π°Π΄Π°ΡΠ° ΡΠ° ΠΎΠ±ΡΠ°Π²ΠΈΠ²ΠΌΠ΅ Π½Π° ΠΏΠΎΡΠ΅ΡΠΎΠΊΠΎΡ Π½Π° ΡΡΠ½ΠΈ. Π£ΡΠ΅ΡΠ½ΠΈΡΠΈΡΠ΅ ΡΡΠ΅Π±Π°ΡΠ΅ Π΄Π° ΡΠ° Π·Π°Π²ΡΡΠ°Ρ Π·Π°Π΄Π°ΡΠ°ΡΠ° Π²ΠΎ ΡΠΎΠΊ ΠΎΠ΄ Π΅Π΄Π΅Π½ ΠΌΠ΅ΡΠ΅Ρ, Π΄Π° Π³ΠΎ Π½Π°ΡΠ΄Π°Ρ Π·Π½Π°ΠΌΠ΅ΡΠΎ ΠΈ Π΄Π΅ΡΠ°Π»Π½ΠΎ ΠΈ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ΅Π½ Π½Π°ΡΠΈΠ½ Π΄Π° Π³ΠΎ ΠΎΠΏΠΈΡΠ°Ρ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ.
ΠΠΎΠ΄ ΡΠ΅Π·ΠΈΠΌΠ΅ΡΠΎ ΠΎΠ±ΡΠ°Π²ΡΠ²Π°ΠΌΠ΅ Π°Π½Π°Π»ΠΈΠ·Π° Π·Π° Π½Π°ΡΠ΄ΠΎΠ±ΡΠΎΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π·Π° Π·Π°Π΄Π°ΡΠ°ΡΠ° ΠΎΠ΄ ΠΎΠ½ΠΈΠ΅ ΠΈΡΠΏΡΠ°ΡΠ΅Π½ΠΈ Π²ΠΎ ΡΠ΅ΠΊΠΎΡ Π½Π° ΠΌΠ΅ΡΠ΅ΡΠΎΡ, ΡΠ° ΠΎΡΠΊΡΠΈ ΠΠ»Π΅ΠΊΡΠ΅Ρ ΠΠΎΠ²ΡΠΈΠΆΠ½ΠΈΡ (a1exdandy) ΠΎΠ΄ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΠ°ΡΠ° Π·Π° Π΄ΠΈΠ³ΠΈΡΠ°Π»Π½Π° Π±Π΅Π·Π±Π΅Π΄Π½ΠΎΡΡ, ΠΊΠΎΡ Π³ΠΎ Π·Π°Π·Π΅Π΄Π΅ ΠΏΡΠ²ΠΎΡΠΎ ΠΌΠ΅ΡΡΠΎ Π½Π° Π½Π°ΡΠΏΡΠ΅Π²Π°ΡΠΎΡ Π·Π° Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π΄ΠΎΠΊΡΠΎΡΡΠΊΠΈΡΠ΅ Π΄Π΅Π½ΠΎΠ²ΠΈ. ΠΠΎ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΈ Π³ΠΎ ΠΏΡΠ΅Π½Π΅ΡΡΠ²Π°ΠΌΠ΅ Π½Π΅Π³ΠΎΠ²ΠΈΠΎΡ ΡΠ΅ΠΊΡΡ ΡΠΎ Π½Π°ΡΠΈ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈ.
ΠΡΠ²ΠΈΡΠ½Π° Π°Π½Π°Π»ΠΈΠ·Π°
ΠΠ½Π°ΡΠΈ, Π·Π°Π΄Π°ΡΠ°ΡΠ° ΡΠΎΠ΄ΡΠΆΠ΅ΡΠ΅ Π°ΡΡ ΠΈΠ²Π° ΡΠΎ ΡΠ»Π΅Π΄Π½ΠΈΠ²Π΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ:
- block_upload_traffic.pcapng
- DB100.bin
- ΡΠΎΠ²Π΅ΡΠΈ.txt
ΠΠ°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° hints.txt Π³ΠΈ ΡΠΎΠ΄ΡΠΆΠΈ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΈ ΡΠΎΠ²Π΅ΡΠΈ Π·Π° ΡΠ΅ΡΠ°Π²Π°ΡΠ΅ Π½Π° Π·Π°Π΄Π°ΡΠ°ΡΠ°. ΠΠ²Π΅ ΡΠ° Π½Π΅Π³ΠΎΠ²Π°ΡΠ° ΡΠΎΠ΄ΡΠΆΠΈΠ½Π°:
- ΠΠ΅ΡΡΠΎΠ²ΠΈΡ ΠΌΠΈ ΠΊΠ°ΠΆΠ° Π²ΡΠ΅ΡΠ° Π΄Π΅ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Π΄Π° Π²ΡΠΈΡΠ°Ρ Π±Π»ΠΎΠΊΠΎΠ²ΠΈ ΠΎΠ΄ PlcSim Π²ΠΎ Step7.
- ΠΠ° ΡΡΠ°Π½Π΄ΠΎΡ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Siemens Simatic S7-300 series PLC.
- 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:

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