ΠΠ° ΠΏΠΎΡΠ»Π΅Π΄ΡΠ΅ΠΌ ΠΠ₯ΠΠ°ΠΈΡ 9 ΠΎΠ΄ΡΠΆΠ°Π»ΠΈ ΡΠΌΠΎ ΡΠ°ΠΊΠΌΠΈΡΠ΅ΡΠ΅ Π·Π° Ρ
Π°ΠΊΠΎΠ²Π°ΡΠ΅ ΠΏΠΎΡΡΡΠΎΡΠ΅ΡΠ° Π·Π° ΠΏΡΠΌΠΏΠ°ΡΠ΅ Π³Π°ΡΠ° - ΡΠ°ΠΊΠΌΠΈΡΠ΅ΡΠ΅
Π£ΠΏΡΠΊΠΎΡ ΡΠ°Π·Π»ΠΈΡΠΈΡΠΈΠΌ Π±Π΅Π·Π±Π΅Π΄Π½ΠΎΡΠ½ΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠΌΠ°, Ρ Π°ΡΠ΄Π²Π΅ΡΡΠΊΠΈ ΡΠ°ΡΡΠ°Π² ΡΡΠΈΠ±ΠΈΠ½Π° ΡΠ΅ Π±ΠΈΠΎ ΠΈΡΡΠΈ: Π‘ΠΈΠ΅ΠΌΠ΅Π½Ρ Π‘ΠΈΠΌΠ°ΡΠΈΡ ΠΠΠ¦ ΡΠ΅ΡΠΈΡΠ° Π‘7-300; Π΄ΡΠ³ΠΌΠ΅ Π·Π° ΠΈΡΠΏΡΡ ΠΈΠ²Π°ΡΠ΅ Ρ Π½ΡΠΆΠ΄ΠΈ ΠΈ ΡΡΠ΅ΡΠ°Ρ Π·Π° ΠΌΠ΅ΡΠ΅ΡΠ΅ ΠΏΡΠΈΡΠΈΡΠΊΠ° (ΠΏΠΎΠ²Π΅Π·Π°Π½ ΡΠ° Π΄ΠΈΠ³ΠΈΡΠ°Π»Π½ΠΈΠΌ ΡΠ»Π°Π·ΠΈΠΌΠ° ΠΠΠ¦-Π° (ΠΠ)); Π²Π΅Π½ΡΠΈΠ»ΠΈ ΠΊΠΎΡΠΈ ΡΠ°Π΄Π΅ Π·Π° Π½Π°Π΄ΡΠ²Π°Π²Π°ΡΠ΅ ΠΈ ΠΈΡΠΏΡΡ ΠΈΠ²Π°ΡΠ΅ Π²Π°Π·Π΄ΡΡ Π° (ΠΏΠΎΠ²Π΅Π·Π°Π½ΠΈ Π½Π° Π΄ΠΈΠ³ΠΈΡΠ°Π»Π½Π΅ ΠΈΠ·Π»Π°Π·Π΅ ΠΠΠ¦-Π° (ΠΠ)) - Π²ΠΈΠ΄Π΅ΡΠΈ ΡΠ»ΠΈΠΊΡ ΠΈΡΠΏΠΎΠ΄.
ΠΠΠ¦ ΡΠ΅, Ρ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈ ΠΎΠ΄ ΠΎΡΠΈΡΠ°Π²Π°ΡΠ° ΠΏΡΠΈΡΠΈΡΠΊΠ° ΠΈΡ ΡΠΊΠ»Π°Π΄Ρ ΡΠ° ΡΠ²ΠΎΡΠΈΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΎΠΌ, Π΄ΠΎΠ½Π΅ΠΎ ΠΎΠ΄Π»ΡΠΊΡ Π΄Π° ΠΈΠ·Π΄ΡΠ²Π° ΠΈΠ»ΠΈ Π½Π°Π΄ΡΠ²Π° Π»ΠΎΠΏΡΡ (ΠΎΡΠ²ΠΎΡΠΈΠΎ ΠΈ Π·Π°ΡΠ²ΠΎΡΠΈΠΎ ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ°ΡΡΡΠ΅ Π²Π΅Π½ΡΠΈΠ»Π΅). ΠΠ΅ΡΡΡΠΈΠΌ, ΡΠ²ΠΈ ΡΡΠ°Π½Π΄ΠΎΠ²ΠΈ ΡΡ ΠΈΠΌΠ°Π»ΠΈ ΡΡΡΠ½ΠΈ ΡΠ΅ΠΆΠΈΠΌ ΡΠΏΡΠ°Π²ΡΠ°ΡΠ°, ΡΡΠΎ ΡΠ΅ ΠΎΠΌΠΎΠ³ΡΡΠΈΠ»ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΡΡΠ°ΡΠ° Π²Π΅Π½ΡΠΈΠ»Π° Π±Π΅Π· ΠΈΠΊΠ°ΠΊΠ²ΠΈΡ
ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅ΡΠ°.
Π’ΡΠΈΠ±ΠΈΠ½Π΅ ΡΡ ΡΠ΅ ΡΠ°Π·Π»ΠΈΠΊΠΎΠ²Π°Π»Π΅ ΠΏΠΎ ΡΠ»ΠΎΠΆΠ΅Π½ΠΎΡΡΠΈ ΠΎΠΌΠΎΠ³ΡΡΠ°Π²Π°ΡΠ° ΠΎΠ²ΠΎΠ³ ΡΠ΅ΠΆΠΈΠΌΠ°: Π½Π° Π½Π΅Π·Π°ΡΡΠΈΡΠ΅Π½ΠΎΠΌ ΡΡΠ°Π½Π΄Ρ ΡΠΎ ΡΠ΅ Π±ΠΈΠ»ΠΎ Π½Π°ΡΠ»Π°ΠΊΡΠ΅ ΡΡΠ°Π΄ΠΈΡΠΈ, Π° Π½Π° ΡΡΠ°Π½Π΄Ρ Π²ΠΈΡΠΎΠΊΠ΅ Π±Π΅Π·Π±Π΅Π΄Π½ΠΎΡΡΠΈ ΡΠ΅ ΡΡ ΠΎΠ΄Π½ΠΎ ΡΠΎΠΌΠ΅ Π±ΠΈΠ»ΠΎ ΡΠ΅ΠΆΠ΅.
ΠΠ΅Ρ ΠΎΠ΄ ΡΠ΅ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ΅ΡΠ΅Π½ΠΎ ΡΠ΅ Π·Π° Π΄Π²Π° Π΄Π°Π½Π°; ΠΡΠ²ΠΎΠΏΠ»Π°ΡΠΈΡΠ°Π½ΠΈ ΡΠ΅ ΠΎΡΠ²ΠΎΡΠΈΠΎ 233 Π±ΠΎΠ΄Π° (Π½Π΅Π΄Π΅ΡΡ Π΄Π°Π½Π° ΡΠ΅ ΠΏΡΠΈΠΏΡΠ΅ΠΌΠ°ΠΎ Π·Π° ΡΠ°ΠΊΠΌΠΈΡΠ΅ΡΠ΅). Π’ΡΠΈ ΠΏΠΎΠ±Π΅Π΄Π½ΠΈΠΊΠ°: Π ΠΌΠ΅ΡΡΠΎ - Π°1Π΅ΠΊΠ΄Π°Π½Π΄ΠΈ, ΠΠ - Π ΡΠ±ΠΈΠΊΠΎΠΈΠ΄, ΠΠΠ - ΠΠ΅.
ΠΠ΅ΡΡΡΠΈΠΌ, ΡΠΎΠΊΠΎΠΌ ΠΠ₯ΠΠ°ΠΈΡ-Π° Π½ΠΈΠΊΠΎ ΠΎΠ΄ ΡΡΠ΅ΡΠ½ΠΈΠΊΠ° Π½ΠΈΡΠ΅ ΡΡΠΏΠ΅ΠΎ Π΄Π° ΡΠ°Π²Π»Π°Π΄Π° ΡΠ²Π΅ ΡΡΠΈ ΡΡΠΈΠ±ΠΈΠ½Π΅, ΠΏΠ° ΡΠΌΠΎ ΠΎΠ΄Π»ΡΡΠΈΠ»ΠΈ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌΠΎ ΠΎΠ½Π»Π°ΡΠ½ ΡΠ°ΠΊΠΌΠΈΡΠ΅ΡΠ΅ ΠΈ ΠΏΠΎΡΠ΅ΡΠΊΠΎΠΌ ΡΡΠ½Π° ΠΎΠ±ΡΠ°Π²ΠΈΠ»ΠΈ Π½Π°ΡΡΠ΅ΠΆΠΈ Π·Π°Π΄Π°ΡΠ°ΠΊ. Π£ΡΠ΅ΡΠ½ΠΈΡΠΈ ΡΡ ΠΌΠΎΡΠ°Π»ΠΈ Π΄Π° ΡΡΠ°Π΄Π΅ Π·Π°Π΄Π°ΡΠ°ΠΊ Ρ ΡΠΎΠΊΡ ΠΎΠ΄ ΠΌΠ΅ΡΠ΅Ρ Π΄Π°Π½Π°, ΠΏΡΠΎΠ½Π°ΡΡ Π·Π°ΡΡΠ°Π²Ρ ΠΈ Π΄Π΅ΡΠ°ΡΠ½ΠΎ ΠΈ Π½Π° Π·Π°Π½ΠΈΠΌΡΠΈΠ² Π½Π°ΡΠΈΠ½ ΠΎΠΏΠΈΡΡ ΡΠ΅ΡΠ΅ΡΠ΅.
ΠΡΠΏΠΎΠ΄ ΡΠ΅Π·Π° ΠΎΠ±ΡΠ°Π²ΡΡΡΠ΅ΠΌΠΎ Π°Π½Π°Π»ΠΈΠ·Ρ Π½Π°ΡΠ±ΠΎΡΠ΅Π³ ΡΠ΅ΡΠ΅ΡΠ° Π·Π°Π΄Π°ΡΠΊΠ° ΠΎΠ΄ ΠΎΠ½ΠΈΡ
ΠΏΠΎΡΠ»Π°ΡΠΈΡ
ΡΠΎΠΊΠΎΠΌ ΠΌΠ΅ΡΠ΅ΡΠ°, ΠΏΡΠΎΠ½Π°ΡΠ°ΠΎ Π³Π° ΡΠ΅ ΠΠ»Π΅ΠΊΡΠ΅Ρ ΠΠΎΠ²ΡΠΈΠΆΠ½ΠΈΡ
(Π°1Π΅ΠΊΠ΄Π°Π½Π΄ΠΈ) ΠΈΠ· ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΠ΅ ΠΠΈΠ³ΠΈΡΠ°Π» Π‘Π΅ΡΡΡΠΈΡΠΈ, ΠΊΠΎΡΠΈ ΡΠ΅ Π·Π°ΡΠ·Π΅ΠΎ XNUMX. ΠΌΠ΅ΡΡΠΎ Π½Π° ΡΠ°ΠΊΠΌΠΈΡΠ΅ΡΡ ΡΠΎΠΊΠΎΠΌ ΠΠ₯ΠΠ°ΠΈΡ-Π°. Π£ Π½Π°ΡΡΠ°Π²ΠΊΡ Π΄ΠΎΠ½ΠΎΡΠΈΠΌΠΎ ΡΠ΅Π½ ΡΠ΅ΠΊΡΡ ΡΠ° Π½Π°ΡΠΈΠΌ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈΠΌΠ°.
ΠΠ½ΠΈΡΠΈΡΠ°Π»Π½Π° Π°Π½Π°Π»ΠΈΠ·Π°
ΠΠ°ΠΊΠ»Π΅, Π·Π°Π΄Π°ΡΠ°ΠΊ ΡΠ΅ ΡΠ°Π΄ΡΠΆΠ°ΠΎ Π°ΡΡ ΠΈΠ²Ρ ΡΠ° ΡΠ»Π΅Π΄Π΅ΡΠΈΠΌ ΡΠ°ΡΠ»ΠΎΠ²ΠΈΠΌΠ°:
- Π±Π»ΠΎΡΠΊ_ΡΠΏΠ»ΠΎΠ°Π΄_ΡΡΠ°ΡΡΠΈΡ.ΠΏΡΠ°ΠΏΠ½Π³
- ΠΠ100.Π±ΠΈΠ½
- Ρ ΠΈΠ½ΡΡ.ΡΠΊΡ
ΠΠ°ΡΠΎΡΠ΅ΠΊΠ° Ρ ΠΈΠ½ΡΡ.ΡΠΊΡ ΡΠ°Π΄ΡΠΆΠΈ ΠΏΠΎΡΡΠ΅Π±Π½Π΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΠ΅ ΠΈ ΡΠ°Π²Π΅ΡΠ΅ Π·Π° ΡΠ΅ΡΠ°Π²Π°ΡΠ΅ Π·Π°Π΄Π°ΡΠΊΠ°. ΠΠ²ΠΎ ΡΠ΅Π³ΠΎΠ²ΠΎΠ³ ΡΠ°Π΄ΡΠΆΠ°ΡΠ°:
- ΠΠ΅ΡΡΠΎΠ²ΠΈΡ ΠΌΠΈ ΡΠ΅ ΡΡΡΠ΅ ΡΠ΅ΠΊΠ°ΠΎ Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΠΈΡΠ°ΡΠΈ Π±Π»ΠΎΠΊΠΎΠ²Π΅ ΡΠ° ΠΠ»ΡΠ‘ΠΈΠΌ-Π° Ρ Π‘ΡΠ΅ΠΏ7.
- ΠΠ° ΡΡΠ°Π½Π΄Ρ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅Π½ Π‘ΠΈΠ΅ΠΌΠ΅Π½Ρ Π‘ΠΈΠΌΠ°ΡΠΈΡ Π‘7-300 ΡΠ΅ΡΠΈΡΠ° ΠΠΠ¦.
- ΠΠ»ΡΠ‘ΠΈΠΌ ΡΠ΅ ΠΠΠ¦ Π΅ΠΌΡΠ»Π°ΡΠΎΡ ΠΊΠΎΡΠΈ Π²Π°ΠΌ ΠΎΠΌΠΎΠ³ΡΡΠ°Π²Π° ΠΏΠΎΠΊΡΠ΅ΡΠ°ΡΠ΅ ΠΈ ΠΎΡΠΊΠ»Π°ΡΠ°ΡΠ΅ Π³ΡΠ΅ΡΠ°ΠΊΠ° Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΠΌΠ° Π·Π° Π‘ΠΈΠ΅ΠΌΠ΅Π½Ρ Π‘7 ΠΠΠ¦-ΠΎΠ²Π΅.
Π§ΠΈΠ½ΠΈ ΡΠ΅ Π΄Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΠΠ100.Π±ΠΈΠ½ ΡΠ°Π΄ΡΠΆΠΈ ΠΠ100 ΠΠΠ¦ Π±Π»ΠΎΠΊ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°: 00000000: 0100 0102 6Π΅02 0401 0206 0100 0101 0102 ....Π½......... 00000010: 1002 0501 0202 2002 0501 0206 0100 . ..... ......... 0102: 00000020 0102 7702 0401 0206 0100 0103 0102Π°0 ..Π²............. 02: 00000030 0501 0202 1602 0501 0206 0100 ................ 0104: 0102 00000040 7502 0401 0206 0100 0105Π°0102 0 Ρ............. 02: 0501 00000050 0202 1602 0501 0206 0100 0106............0102. 3402: 4 00000060 0401 0206 0100 0107 0102 2602 ......... & ..... 0501: 0202Π¦00000070 4 02 0501 0206 0100 0108 0102 Π ......... 3302. .. 0401 : 3 00000080 0206 0100 0109Π°0102 0 02 0501 ................ 0202: 1602 00000090 0501 0206Π° 0100 010 0102 3702 .......... 0401Π°0206: 7 000000Π± 0 0100 010 0102 2202 0501 ......".....Π€... 0202Π±4602: 0501 000000 0Ρ 0206 0100 010 ...... .. 0102Ρ3302: 0401Π΄ 0206 0100Π°3 000000 0 010 0102 0 ................ 02Π΄0501: 0202 1602Π΅ 0501 0206Π΄000000 0 0100 ...010 .... .... 0102Π΅6: 02 0401 0206 0100 010 000000 0 0102 ........#...... 1102Ρ0501: 0202 2302 0501 0206 0100 000000 0 ...... ..... 0110: 0102 3502 0401 0206 0100 0111 0102 5 ............................ 00000100: 1202 0501 0202 2502 0501 0206 .....0100 ..... 0112 ... .....&... 00000110: 0102 3302 0401Ρ0206 0100 0113 0102 ....Π......
ΠΠ°ΠΎ ΡΡΠΎ ΠΈΠΌΠ΅ ΡΡΠ³Π΅ΡΠΈΡΠ΅, Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° Π±Π»ΠΎΡΠΊ_ΡΠΏΠ»ΠΎΠ°Π΄_ΡΡΠ°ΡΡΠΈΡ.ΠΏΡΠ°ΠΏΠ½Π³ ΡΠ°Π΄ΡΠΆΠΈ ΠΈΡΠΏΠΈΡ ΡΠ°ΠΎΠ±ΡΠ°ΡΠ°ΡΠ° Π·Π° ΠΎΡΠΏΡΠ΅ΠΌΠ°ΡΠ΅ Π±Π»ΠΎΠΊΠΎΠ²Π° Ρ ΠΠΠ¦.
ΠΡΠ΅Π΄ΠΈ Π½Π°ΠΏΠΎΠΌΠ΅Π½ΡΡΠΈ Π΄Π° ΡΠ΅ ΠΎΠ²Ρ Π΄Π΅ΠΏΠΎΠ½ΠΈΡΡ ΡΠ°ΠΎΠ±ΡΠ°ΡΠ°ΡΠ° Π½Π° ΠΌΠ΅ΡΡΡ ΡΠ°ΠΊΠΌΠΈΡΠ΅ΡΠ° ΡΠΎΠΊΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΠ΅ Π±ΠΈΠ»ΠΎ ΠΌΠ°Π»ΠΎ ΡΠ΅ΠΆΠ΅ Π΄ΠΎΠ±ΠΈΡΠΈ. ΠΠ° Π±ΠΈΡΡΠ΅ ΡΠΎ ΡΡΠ°Π΄ΠΈΠ»ΠΈ, Π±ΠΈΠ»ΠΎ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ ΡΠ°Π·ΡΠΌΠ΅ΡΠΈ ΡΠΊΡΠΈΠΏΡΡ ΠΈΠ· ΠΏΡΠΎΡΠ΅ΠΊΡΠ½Π΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅ Π·Π° Π’Π΅ΡΠ»Π°Π‘Π¦ΠΠΠ2. ΠΠ· ΡΠ΅Π³Π° ΡΠ΅ Π±ΠΈΠ»ΠΎ ΠΌΠΎΠ³ΡΡΠ΅ ΡΠ°Π·ΡΠΌΠ΅ΡΠΈ Π³Π΄Π΅ ΡΠ΅ Π½Π°Π»Π°Π·ΠΈ Π΄Π΅ΠΏΠΎΠ½ΠΈΡΠ° ΡΠΈΡΡΠΎΠ²Π°Π½Π° ΠΏΠΎΠΌΠΎΡΡ Π Π¦4 ΠΈ ΠΊΠΎΡΠΈ ΠΊΡΡΡ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π° Π΄Π΅ΡΠΈΡΡΠΎΠ²Π°ΡΠ΅. ΠΡΠΌΠΏΠΎΠ²ΠΈ Π±Π»ΠΎΠΊΠΎΠ²Π° ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° Π½Π° Π»ΠΎΠΊΠ°ΡΠΈΡΠΈ ΠΌΠΎΠ³Ρ ΡΠ΅ Π΄ΠΎΠ±ΠΈΡΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ΠΌ ΠΊΠ»ΠΈΡΠ΅Π½ΡΠ° Π‘7 ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°. ΠΠ° ΠΎΠ²ΠΎ ΡΠ°ΠΌ ΠΊΠΎΡΠΈΡΡΠΈΠΎ Π΄Π΅ΠΌΠΎ ΠΊΠ»ΠΈΡΠ΅Π½Ρ ΠΈΠ· Π‘Π½Π°ΠΏ7 ΠΏΠ°ΠΊΠ΅ΡΠ°.
ΠΠΊΡΡΡΠ°Ρ ΠΎΠ²Π°ΡΠ΅ Π±Π»ΠΎΠΊΠΎΠ²Π° Π·Π° ΠΎΠ±ΡΠ°Π΄Ρ ΡΠΈΠ³Π½Π°Π»Π° ΠΈΠ· ΡΠ°ΠΎΠ±ΡΠ°ΡΠ°ΡΠ½Π΅ Π΄Π΅ΠΏΠΎΠ½ΠΈΡΠ΅
ΠΠ»Π΅Π΄Π°ΡΡΡΠΈ ΡΠ°Π΄ΡΠΆΠ°Ρ Π΄Π°ΠΌΠΏΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡ Π²Π°ΡΠΈΡΠΈ Π΄Π° ΡΠ°Π΄ΡΠΆΠΈ Π±Π»ΠΎΠΊΠΎΠ²Π΅ Π·Π° ΠΎΠ±ΡΠ°Π΄Ρ ΡΠΈΠ³Π½Π°Π»Π° ΠΠ1, Π€Π¦1, Π€Π¦2 ΠΈ Π€Π¦3:
ΠΠ²ΠΈ Π±Π»ΠΎΠΊΠΎΠ²ΠΈ ΠΌΠΎΡΠ°ΡΡ Π±ΠΈΡΠΈ ΡΠΊΠ»ΠΎΡΠ΅Π½ΠΈ. ΠΠ²ΠΎ ΡΠ΅ ΠΌΠΎΠΆΠ΅ ΡΡΠ°Π΄ΠΈΡΠΈ, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠΌΠΎΡΡ ΡΠ»Π΅Π΄Π΅ΡΠ΅ ΡΠΊΡΠΈΠΏΡΠ΅, Π½Π°ΠΊΠΎΠ½ ΡΡΠΎ ΡΠ΅ ΠΏΡΠ΅ΡΡ
ΠΎΠ΄Π½ΠΎ ΠΊΠΎΠ½Π²Π΅ΡΡΠΎΠ²Π°ΠΎ ΡΠ°ΠΎΠ±ΡΠ°ΡΠ°Ρ ΠΈΠ· ΠΏΡΠ°ΠΏΠ½Π³ ΡΠΎΡΠΌΠ°ΡΠ° Ρ ΠΏΡΠ°ΠΏ:
#!/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 (ΠΏΠΏ). Π‘Π°Π΄Π° ΠΌΠΎΡΠ°ΡΠ΅ Π½Π°ΡΡΠΈΡΠΈ ΠΊΠ°ΠΊΠΎ ΠΈΡ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΡΠΈ. ΠΠ°Π³ΠΎΠ²Π΅ΡΡΠ°Ρ Π·Π° Π΄ΠΎΠ΄Π΅ΡΠΈΠ²Π°ΡΠ΅ ΡΡΠ³Π΅ΡΠΈΡΠ΅ Π΄Π° Π·Π° ΠΎΠ²ΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΠΠ»ΡΠ‘ΠΈΠΌ.
ΠΠΎΠ±ΠΈΡΠ°ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠ° ΡΠΈΡΡΠΈΠ²ΠΈΡ ΡΡΠ΄ΠΈ ΠΈΠ· Π±Π»ΠΎΠΊΠΎΠ²Π°
ΠΡΠ²ΠΎ, ΠΏΠΎΠΊΡΡΠ°ΡΠΌΠΎ Π΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°ΠΌΠΎ Π‘7-ΠΠ»ΡΠ‘ΠΈΠΌ ΡΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ΠΌΠΎ Ρ ΡΠ΅Π³Π° ΡΡΠΈΡΠ°ΡΠΈ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ Π±Π»ΠΎΠΊΠΎΠ²Π° ΡΠ° ΠΏΠΎΠ½Π°Π²ΡΠ°ΡΡΡΠΈΠΌ ΡΠΏΡΡΡΡΠ²ΠΈΠΌΠ° (= Π 0.0) ΠΏΠΎΠΌΠΎΡΡ ΡΠΎΡΡΠ²Π΅ΡΠ° Π‘ΠΈΠΌΠ°ΡΠΈΡ ΠΠ°Π½Π°Π³Π΅Ρ ΠΈ ΡΠ°ΡΡΠ²Π°ΡΠΈ ΠΠΠ¦ Π΄ΠΎΠ±ΠΈΡΠ΅Π½ Ρ Π΅ΠΌΡΠ»Π°ΡΠΎΡΡ Ρ Π΄Π°ΡΠΎΡΠ΅ΠΊΡ Π΅ΠΊΠ°ΠΌΠΏΠ»Π΅.ΠΏΠ»Ρ. ΠΠ»Π΅Π΄Π°ΡΡΡΠΈ ΡΠ°Π΄ΡΠΆΠ°Ρ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅, Π»Π°ΠΊΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠ΄ΡΠ΅Π΄ΠΈΡΠΈ ΠΏΠΎΡΠ΅ΡΠ°ΠΊ ΠΏΡΠ΅ΡΠ·Π΅ΡΠΈΡ Π±Π»ΠΎΠΊΠΎΠ²Π° ΠΏΠΎ ΠΏΠΎΡΠΏΠΈΡΡ 70 70, ΠΊΠΎΡΠΈ ΡΠΌΠΎ ΡΠ°Π½ΠΈΡΠ΅ ΠΎΡΠΊΡΠΈΠ»ΠΈ. ΠΡΠ΅ Π±Π»ΠΎΠΊΠΎΠ²Π°, ΠΎΡΠΈΠ³Π»Π΅Π΄Π½ΠΎ, Π²Π΅Π»ΠΈΡΠΈΠ½Π° Π±Π»ΠΎΠΊΠ° ΡΠ΅ Π·Π°ΠΏΠΈΡΠ°Π½Π° ΠΊΠ°ΠΎ 4-Π±Π°ΡΡΠ½Π° Π²ΡΠ΅Π΄Π½ΠΎΡΡ ΠΌΠ°Π»ΠΎΠ³ Π΅Π½Π΄ΠΈΡΠ°Π½Π°.
ΠΠ°ΠΊΠΎΠ½ ΡΡΠΎ ΡΠΌΠΎ Π΄ΠΎΠ±ΠΈΠ»ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΠ΅ ΠΎ ΡΡΡΡΠΊΡΡΡΠΈ ΠΏΠ»Ρ ΡΠ°ΡΠ»ΠΎΠ²Π°, ΠΏΠΎΡΠ°Π²ΠΈΠΎ ΡΠ΅ ΡΠ»Π΅Π΄Π΅ΡΠΈ Π°ΠΊΡΠΈΠΎΠ½ΠΈ ΠΏΠ»Π°Π½ Π·Π° ΡΠΈΡΠ°ΡΠ΅ ΠΠΠ¦ Π‘7 ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°:
- ΠΠΎΡΠΈΡΡΠ΅ΡΠΈ Π‘ΠΈΠΌΠ°ΡΠΈΡ ΠΠ°Π½Π°Π³Π΅Ρ, ΠΊΡΠ΅ΠΈΡΠ°ΠΌΠΎ ΡΡΡΡΠΊΡΡΡΡ Π±Π»ΠΎΠΊΠΎΠ²Π° Ρ Π‘7-ΠΠ»ΡΠ‘ΠΈΠΌ-Ρ ΡΠ»ΠΈΡΠ½Ρ ΠΎΠ½ΠΎΡ ΠΊΠΎΡΡ ΡΠΌΠΎ Π΄ΠΎΠ±ΠΈΠ»ΠΈ ΠΈΠ· Π΄ΡΠΌΠΏ-Π°. ΠΠ΅Π»ΠΈΡΠΈΠ½Π΅ Π±Π»ΠΎΠΊΠΎΠ²Π° ΠΌΠΎΡΠ°ΡΡ Π΄Π° ΡΠ΅ ΠΏΠΎΠ΄ΡΠ΄Π°ΡΠ°ΡΡ (ΠΎΠ²ΠΎ ΡΠ΅ ΠΏΠΎΡΡΠΈΠΆΠ΅ ΠΏΠΎΠΏΡΡΠ°Π²Π°ΡΠ΅ΠΌ Π±Π»ΠΎΠΊΠΎΠ²Π° ΠΏΠΎΡΡΠ΅Π±Π½ΠΈΠΌ Π±ΡΠΎΡΠ΅ΠΌ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠ°) ΠΈ ΡΠΈΡ ΠΎΠ²ΠΈΠΌ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΈΠΌΠ° (ΠΠ1, Π€Π¦1, Π€Π¦2, Π€Π¦3).
- Π‘Π°ΡΡΠ²Π°ΡΡΠ΅ ΠΠΠ¦ Ρ Π΄Π°ΡΠΎΡΠ΅ΠΊΡ.
- Π‘Π°Π΄ΡΠΆΠ°Ρ Π±Π»ΠΎΠΊΠΎΠ²Π° Ρ ΡΠ΅Π·ΡΠ»ΡΡΡΡΡΠΎΡ Π΄Π°ΡΠΎΡΠ΅ΡΠΈ Π·Π°ΠΌΠ΅ΡΡΡΠ΅ΠΌΠΎ Π±Π»ΠΎΠΊΠΎΠ²ΠΈΠΌΠ° ΠΈΠ· Π΄Π΅ΠΏΠΎΠ½ΠΈΡΠ΅ ΡΠ°ΠΎΠ±ΡΠ°ΡΠ°ΡΠ°. ΠΠΎΡΠ΅ΡΠ°ΠΊ Π±Π»ΠΎΠΊΠΎΠ²Π° ΡΠ΅ ΠΎΠ΄ΡΠ΅ΡΠ΅Π½ ΠΏΠΎΡΠΏΠΈΡΠΎΠΌ.
- ΠΠΎΠ±ΠΈΡΠ΅Π½ΠΈ ΡΠ°ΡΠ» ΡΡΠΈΡΠ°Π²Π°ΠΌΠΎ Ρ Π‘7-ΠΠ»ΡΠ‘ΠΈΠΌ ΠΈ Π³Π»Π΅Π΄Π°ΠΌΠΎ ΡΠ°Π΄ΡΠΆΠ°Ρ Π±Π»ΠΎΠΊΠΎΠ²Π° Ρ Π‘ΠΈΠΌΠ°ΡΠΈΡ ΠΠ°Π½Π°Π³Π΅Ρ-Ρ.
ΠΠ»ΠΎΠΊΠΎΠ²ΠΈ ΡΠ΅ ΠΌΠΎΠ³Ρ Π·Π°ΠΌΠ΅Π½ΠΈΡΠΈ, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ»Π΅Π΄Π΅ΡΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ:
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)
ΠΠ»Π΅ΠΊΡΠ΅Ρ ΡΠ΅ ΠΊΡΠ΅Π½ΡΠΎ ΠΌΠΎΠΆΠ΄Π° ΡΠ΅ΠΆΠΈΠΌ, Π°Π»ΠΈ ΠΈΠΏΠ°ΠΊ ΠΈΡΠΏΡΠ°Π²Π½ΠΈΠΌ ΠΏΡΡΠ΅ΠΌ. ΠΡΠ΅ΡΠΏΠΎΡΡΠ°Π²ΠΈΠ»ΠΈ ΡΠΌΠΎ Π΄Π° ΡΠ΅ ΡΡΠ΅ΡΠ½ΠΈΡΠΈ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ ΠΠ΅ΡΠ’ΠΎΠΠ»ΡΠ‘ΠΈΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌ ΠΊΠ°ΠΊΠΎ Π±ΠΈ ΠΠ»ΡΠ‘ΠΈΠΌ ΠΌΠΎΠ³Π°ΠΎ Π΄Π° ΠΊΠΎΠΌΡΠ½ΠΈΡΠΈΡΠ° ΠΏΡΠ΅ΠΊΠΎ ΠΌΡΠ΅ΠΆΠ΅, ΡΡΠΈΡΠ°Π²Π° Π±Π»ΠΎΠΊΠΎΠ²Π΅ Ρ ΠΠ»ΡΠ‘ΠΈΠΌ ΠΏΡΠ΅ΠΊΠΎ Π‘Π½Π°ΠΏ7, Π° Π·Π°ΡΠΈΠΌ ΠΏΡΠ΅ΡΠ·ΠΈΠΌΠ° ΠΎΠ²Π΅ Π±Π»ΠΎΠΊΠΎΠ²Π΅ ΠΊΠ°ΠΎ ΠΏΡΠΎΡΠ΅ΠΊΠ°Ρ ΡΠ° ΠΠ»ΡΠ‘ΠΈΠΌ-Π° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠΈ ΡΠ°Π·Π²ΠΎΡΠ½ΠΎ ΠΎΠΊΡΡΠΆΠ΅ΡΠ΅.
ΠΡΠ²Π°ΡΠ°ΡΠ΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΡΡΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅ Ρ Π‘7-ΠΠ»ΡΠ‘ΠΈΠΌ-Ρ, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΠΈΡΠ°ΡΠΈ ΠΏΡΠ΅ΠΏΠΈΡΠ°Π½Π΅ Π±Π»ΠΎΠΊΠΎΠ²Π΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠΈ Π‘ΠΈΠΌΠ°ΡΠΈΡ ΠΠ°Π½Π°Π³Π΅Ρ. ΠΠ»Π°Π²Π½Π΅ ΡΡΠ½ΠΊΡΠΈΡΠ΅ ΡΠΏΡΠ°Π²ΡΠ°ΡΠ° ΡΡΠ΅ΡΠ°ΡΠ΅ΠΌ ΡΡ ΡΠ½ΠΈΠΌΡΠ΅Π½Π΅ Ρ Π±Π»ΠΎΠΊΡ Π€Π¦1. ΠΠ΄ ΠΏΠΎΡΠ΅Π±Π½Π΅ ΠΏΠ°ΠΆΡΠ΅ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΡΠΈΠ²Π° #Π’ΠΠΠ0, ΠΊΠΎΡΠ° ΠΊΠ°Π΄Π° ΡΠ΅ ΡΠΊΡΡΡΠ΅Π½Π° ΡΠΈΠ½ΠΈ ΡΠ΅ Π΄Π° ΠΏΠΎΡΡΠ°Π²ΡΠ° ΠΠΠ¦ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π½Π° ΡΡΡΠ½ΠΈ ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΠΎΡΠ½ΠΎΠ²Ρ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ Π2.2 ΠΈ Π2.3 Π±ΠΈΡΠ° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ΅. ΠΡΠ΅Π΄Π½ΠΎΡΡ #Π’ΠΠΠ0 ΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΡΠ΅Π½Π° ΡΡΠ½ΠΊΡΠΈΡΠΎΠΌ Π€Π¦3.
ΠΠ° Π±ΠΈΡΡΠ΅ ΡΠ΅ΡΠΈΠ»ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ ΡΠ΅ Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡΡ Π€Π¦3 ΠΈ ΡΠ°Π·ΡΠΌΠ΅ΡΠ΅ ΡΡΠ° ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΡΡΠ°Π΄ΠΈ Π΄Π° Π±ΠΈ Π²ΡΠ°ΡΠΈΠ»Π° Π»ΠΎΠ³ΠΈΡΠ½Ρ.
ΠΠ»ΠΎΠΊΠΎΠ²ΠΈ Π·Π° ΠΎΠ±ΡΠ°Π΄Ρ ΠΠΠ¦ ΡΠΈΠ³Π½Π°Π»Π° Π½Π° ΡΡΠ°Π½Π΄Ρ ΠΠΎΠ² Π‘Π΅ΡΡΡΠΈΡΠΈ Π½Π° ΠΌΠ΅ΡΡΡ ΡΠ°ΠΊΠΌΠΈΡΠ΅ΡΠ° Π±ΠΈΠ»ΠΈ ΡΡ ΡΠ°ΡΠΏΠΎΡΠ΅ΡΠ΅Π½ΠΈ Π½Π° ΡΠ»ΠΈΡΠ°Π½ Π½Π°ΡΠΈΠ½, Π°Π»ΠΈ Π΄Π° Π±ΠΈ ΡΠ΅ ΠΏΠΎΠ΄Π΅ΡΠΈΠ»Π° Π²ΡΠ΅Π΄Π½ΠΎΡΡ ΠΏΡΠΎΠΌΠ΅Π½ΡΠΈΠ²Π΅ #Π’ΠΠΠ0, Π±ΠΈΠ»ΠΎ ΡΠ΅ Π΄ΠΎΠ²ΠΎΡΠ½ΠΎ ΡΠΏΠΈΡΠ°ΡΠΈ Π»ΠΈΠ½ΠΈΡΡ ΠΌΠΈ Π½ΠΈΡΠ° Π²Π°ΠΈ Ρ ΠΠ1 Π±Π»ΠΎΠΊ. ΠΡΠΎΠ²Π΅ΡΠ° Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ Ρ Π±Π»ΠΎΠΊΡ Π±ΠΈΠ»Π° ΡΠ΅ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½Π° ΠΈ Π½ΠΈΡΠ΅ Π·Π°Ρ ΡΠ΅Π²Π°Π»Π° Π΄ΡΠ±ΠΎΠΊΠΎ ΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅ ΡΠ΅Π·ΠΈΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°ΡΠ° Π±Π»ΠΎΠΊΠ°. ΠΡΠΈΠ³Π»Π΅Π΄Π½ΠΎ, Π½Π° Π½ΠΈΠ²ΠΎΡ Π²ΠΈΡΠΎΠΊΠ΅ Π±Π΅Π·Π±Π΅Π΄Π½ΠΎΡΡΠΈ, ΠΏΠΎΡΡΠΈΠ·Π°ΡΠ΅ ΡΡΡΠ½Π΅ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ ΡΠ΅ Π±ΠΈΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΆΠ΅ ΠΈ Π½Π΅ΠΎΠΏΡ ΠΎΠ΄Π½ΠΎ ΡΠ΅ ΡΠ°Π·ΡΠΌΠ΅ΡΠΈ Π·Π°ΠΌΡΡΠ΅Π½ΠΎΡΡΠΈ Π‘Π’Π ΡΠ΅Π·ΠΈΠΊΠ° (ΡΠ΅Π΄Π°Π½ ΠΎΠ΄ Π½Π°ΡΠΈΠ½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°ΡΠ° Π‘7 ΠΠΠ¦-Π°).
Π Π΅Π²Π΅ΡΠ·Π½ΠΈ Π±Π»ΠΎΠΊ Π€Π¦3
Π‘Π°Π΄ΡΠΆΠ°Ρ Π€Π¦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
ΠΠΎΠ΄ ΡΠ΅ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ Π΄ΡΠ³Π°ΡΠ°ΠΊ ΠΈ Π½Π΅ΠΊΠΎΠΌΠ΅ ΠΊΠΎ Π½ΠΈΡΠ΅ ΡΠΏΠΎΠ·Π½Π°Ρ ΡΠ° Π‘Π’Π-ΠΎΠΌ ΠΌΠΎΠΆΠ΅ ΠΈΠ·Π³Π»Π΅Π΄Π°ΡΠΈ ΠΊΠΎΠΌΠΏΠ»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ. ΠΠ΅ΠΌΠ° ΡΠΌΠΈΡΠ»Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΡΠΈ ΡΠ²Π°ΠΊΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΡ Ρ ΠΎΠΊΠ²ΠΈΡΡ ΠΎΠ²ΠΎΠ³ ΡΠ»Π°Π½ΠΊΠ°; Π΄Π΅ΡΠ°ΡΠ½Π° ΡΠΏΡΡΡΡΠ²Π° ΠΈ ΠΌΠΎΠ³ΡΡΠ½ΠΎΡΡΠΈ Π‘Π’Π ΡΠ΅Π·ΠΈΠΊΠ° ΠΌΠΎΠ³Ρ ΡΠ΅ Π½Π°ΡΠΈ Ρ ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ°ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΡΡΡΠ½ΠΈΠΊΡ:
Π¨ΠΈΡΡΠ° Π½Π°ΠΊΠΎΠ½ ΠΎΠ±ΡΠ°Π΄Π΅]
# ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
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
ΠΠΎΡΡΠΎ ΡΡΠ΅ Π΄ΠΎΠ±ΠΈΠ»ΠΈ ΠΈΠ΄Π΅ΡΡ ΠΎ ΡΠΏΡΡΡΡΠ²ΠΈΠΌΠ° Π²ΠΈΡΡΡΠ΅Π»Π½Π΅ ΠΌΠ°ΡΠΈΠ½Π΅, Ρ Π°ΡΠ΄Π΅ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΠΌΠΎ ΠΌΠ°Π»ΠΈ Π΄ΠΈΡΠ°ΠΌΠ±Π»Π΅Ρ Π·Π° ΡΠ°ΡΡΠ»Π°ΡΠΈΠ²Π°ΡΠ΅ Π±Π°ΡΡΠΊΠΎΠ΄Π° Ρ ΠΠ100 Π±Π»ΠΎΠΊΡ:
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)
ΠΠ°ΠΎ ΡΡΠΎ Π²ΠΈΠ΄ΠΈΡΠ΅, ΠΎΠ²Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠ°Π²Π° ΡΠ²Π°ΠΊΠΈ ΠΊΠ°ΡΠ°ΠΊΡΠ΅Ρ ΠΈΠ· ΠΠ101 Π΄Π° Π»ΠΈ ΡΠ΅ ΡΠ΅Π΄Π½Π°ΠΊ ΠΎΠ΄ΡΠ΅ΡΠ΅Π½ΠΎΡ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ. ΠΠΎΠ½Π°ΡΠ½Π° Π»ΠΈΠ½ΠΈΡΠ° Π·Π° ΠΏΡΠΎΠ»Π°Π·Π°ΠΊ ΡΠ²ΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠ° ΡΠ΅: Π½0Π² Ρ 4Ρ3 7Ρ 3 ΠΌ4573Ρ. ΠΠΊΠΎ ΡΠ΅ ΠΎΠ²Π° Π»ΠΈΠ½ΠΈΡΠ° ΠΏΠΎΡΡΠ°Π²ΠΈ Ρ Π±Π»ΠΎΠΊ ΠΠ101, ΡΠ°Π΄Π° ΡΠ΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ° ΡΡΡΠ½Π° ΠΠΠ¦ ΠΊΠΎΠ½ΡΡΠΎΠ»Π° ΠΈ Π±ΠΈΡΠ΅ ΠΌΠΎΠ³ΡΡΠ΅ Π΅ΠΊΡΠΏΠ»ΠΎΠ΄ΠΈΡΠ°ΡΠΈ ΠΈΠ»ΠΈ ΠΈΡΠΏΡΡ Π°ΡΠΈ Π±Π°Π»ΠΎΠ½.β¨
Π’ΠΎ ΡΠ΅ ΡΠ²Π΅! ΠΠ»Π΅ΠΊΡΠ΅Ρ ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°ΠΎ Π²ΠΈΡΠΎΠΊ Π½ΠΈΠ²ΠΎ Π·Π½Π°ΡΠ° Π΄ΠΎΡΡΠΎΡΠ°Π½ ΠΈΠ½Π΄ΡΡΡΡΠΈΡΡΠΊΠΎΠ³ Π½ΠΈΠ½ΡΠ΅ :) ΠΠΎΠ±Π΅Π΄Π½ΠΈΠΊΡ ΡΠΌΠΎ ΠΏΠΎΡΠ»Π°Π»ΠΈ Π½Π΅Π·Π°Π±ΠΎΡΠ°Π²Π½Π΅ Π½Π°Π³ΡΠ°Π΄Π΅. ΠΠ΅Π»ΠΈΠΊΠΎ Ρ
Π²Π°Π»Π° ΡΠ²ΠΈΠΌ ΡΡΠ΅ΡΠ½ΠΈΡΠΈΠΌΠ°!
ΠΠ·Π²ΠΎΡ: Π²Π²Π².Ρ
Π°Π±Ρ.ΡΠΎΠΌ