เจชเจฟเจเจฒเฉ PHDays 9 'เจคเฉ เจ เจธเฉเจ เจเฉฑเจ เจเฉเจธ เจชเฉฐเจชเจฟเฉฐเจ เจชเจฒเจพเจเจ เจจเฉเฉฐ เจนเฉเจ เจเจฐเจจ เจฒเจ เจเฉฑเจ เจฎเฉเจเจพเจฌเจฒเจพ เจเจฏเฉเจเจฟเจค เจเฉเจคเจพ - เจฎเฉเจเจพเจฌเจฒเจพ . เจธเจพเจเจ 'เจคเฉ เจตเฉฑเจ-เจตเฉฑเจ เจธเฉเจฐเฉฑเจเจฟเจ เจฎเจพเจชเจฆเฉฐเจกเจพเจ (เจเฉเจ เจธเฉเจฐเฉฑเจเจฟเจ, เจเฉฑเจ เจธเฉเจฐเฉฑเจเจฟเจ, เจเฉฑเจ เจธเฉเจฐเฉฑเจเจฟเจ) เจฆเฉ เจจเจพเจฒ เจคเจฟเฉฐเจจ เจธเจเฉเจเจก เจธเจจ, เจเจธเฉ เจเจฆเจฏเฉเจเจฟเจ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจฆเฉ เจจเจเจฒ เจเจฐเจฆเฉ เจนเฉเจ: เจฆเจฌเจพเจ เจนเฉเจ เจนเจตเจพ เจจเฉเฉฐ เจเฉฑเจ เจเฉเจฌเจพเจฐเฉ เจตเจฟเฉฑเจ เจชเฉฐเจช เจเฉเจคเจพ เจเจฟเจ (เจ เจคเฉ เจซเจฟเจฐ เจเฉฑเจกเจฟเจ เจเจฟเจ)เฅค
เจตเฉฑเจ-เจตเฉฑเจ เจธเฉเจฐเฉฑเจเจฟเจ เจฎเจพเจชเจฆเฉฐเจกเจพเจ เจฆเฉ เจฌเจพเจตเจเฉเจฆ, เจธเจเฉเจเจกเจพเจ เจฆเฉ เจนเจพเจฐเจกเจตเฉเจ เจฐ เจฐเจเจจเจพ เจเฉฑเจเฉ เจเจฟเจนเฉ เจธเฉ: เจธเฉเจฎเฉเจเจธ เจธเจฟเจฎเจเจฟเจ เจชเฉเจเจฒเจธเฉ S7-300 เจธเฉเจฐเฉเจเจผ; เจเจฎเจฐเจเฉเจเจธเฉ เจกเจฟเจซเจฒเฉเจธเจผเจจ เจฌเจเจจ เจ เจคเฉ เจฆเจฌเจพเจ เจฎเจพเจชเจฃ เจตเจพเจฒเจพ เจฏเฉฐเจคเจฐ (เจชเฉเจเจฒเจธเฉ เจกเจฟเจเฉเจเจฒ เจเจจเจชเฉเจเจธ (เจกเฉเจเจ) เจจเจพเจฒ เจเฉเฉเจฟเจ เจนเฉเจเจ); เจฎเจนเจฟเฉฐเจเจพเจ เจ เจคเฉ เจนเจตเจพ เจฆเฉ เจจเจฟเจเจพเจฐ เจฒเจ เจเฉฐเจฎ เจเจฐเจจ เจตเจพเจฒเฉ เจตเจพเจฒเจต (PLC (DO) เจฆเฉ เจกเจฟเจเฉเจเจฒ เจเจเจเจชเฉเฉฑเจ เจจเจพเจฒ เจเฉเฉเฉ) - เจนเฉเจ เจพเจ เจเจฟเฉฑเจคเจฐ เจฆเฉเจเฉเฅค

PLC, เจชเฉเจฐเฉเจธเจผเจฐ เจฐเฉเจกเจฟเฉฐเจ 'เจคเฉ เจจเจฟเจฐเจญเจฐ เจเจฐเจฆเฉ เจนเฉเจ เจ
เจคเฉ เจเจธเจฆเฉ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจฆเฉ เจ
เจจเฉเจธเจพเจฐ, เจเฉเจเจฆ เจจเฉเฉฐ เจกเจฟเจซเจฒเฉเจ เจเจฐเจจ เจเจพเจ เจซเฉเฉฑเจฒเจฃ เจฆเจพ เจซเฉเจธเจฒเจพ เจเฉเจคเจพ (เจ
เจจเฉเจธเจพเจฐเฉ เจตเจพเจฒเจต เจเฉเจฒเฉเจนเฉ เจ
เจคเฉ เจฌเฉฐเจฆ เจเฉเจคเฉ)เฅค เจนเจพเจฒเจพเจเจเจฟ, เจธเจพเจฐเฉ เจธเจเฉเจเจกเจพเจ เจตเจฟเฉฑเจ เจเฉฑเจ เจฎเฉเจจเฉเจ
เจฒ เจเฉฐเจเจฐเฉเจฒ เจฎเฉเจก เจธเฉ, เจเจฟเจธ เจจเฉ เจฌเจฟเจจเจพเจ เจเจฟเจธเฉ เจชเจพเจฌเฉฐเจฆเฉเจเจ เจฆเฉ เจตเจพเจฒเจต เจฆเฉเจเจ เจธเจฅเจฟเจคเฉเจเจ เจจเฉเฉฐ เจจเจฟเจฏเฉฐเจคเจฐเจฟเจค เจเจฐเจจเจพ เจธเฉฐเจญเจต เจฌเจฃเจพเจเจ.
เจเจธ เจฎเฉเจก เจจเฉเฉฐ เจธเจฎเจฐเฉฑเจฅ เจฌเจฃเจพเจเจฃ เจฆเฉ เจเฉเฉฐเจเจฒเจคเจพ เจตเจฟเฉฑเจ เจธเจเฉเจเจก เจตเฉฑเจเฉ-เจตเฉฑเจเจฐเฉ เจธเจจ: เจ เจธเฉเจฐเฉฑเจเจฟเจ เจค เจธเจเฉเจเจก 'เจคเฉ เจ เจเจฟเจนเจพ เจเจฐเจจเจพ เจธเจญ เจคเฉเจ เจเจธเจพเจจ เจธเฉ, เจ เจคเฉ เจเฉฑเจ เจธเฉเจฐเฉฑเจเจฟเจ เจธเจเฉเจเจก 'เจคเฉ เจเจน เจเจธเฉ เจคเจฐเฉเจนเจพเจ เจตเจงเฉเจฐเฉ เจฎเฉเจธเจผเจเจฒ เจธเฉเฅค
เจเฉ เจตเจฟเฉฑเจเฉเจ เจชเฉฐเจ เจธเจฎเฉฑเจธเจฟเจเจตเจพเจ เจฆเฉ เจฆเจฟเจจเจพเจ เจตเจฟเฉฑเจ เจนเฉฑเจฒ เจนเฉ เจเจเจเจ; เจชเจนเจฟเจฒเฉ เจธเจฅเจพเจจ เจฆเฉ เจญเจพเจเฉเจฆเจพเจฐ เจจเฉ 233 เจ เฉฐเจ เจชเฉเจฐเจพเจชเจค เจเฉเจคเฉ (เจเจธเจจเฉ เจฎเฉเจเจพเจฌเจฒเฉ เจฆเฉ เจคเจฟเจเจฐเฉ เจตเจฟเฉฑเจ เจเฉฑเจ เจนเจซเจผเจคเจพ เจฌเจฟเจคเจพเจเจ)เฅค เจคเจฟเฉฐเจจ เจเฉเจคเฉ: I เจธเจฅเจพเจจ - a1exdandy, II - Rubikoid, III - Ze.
เจนเจพเจฒเจพเจเจเจฟ, PHDays เจฆเฉเจฐเจพเจจ, เจเฉเจ เจตเฉ เจญเจพเจเฉเจฆเจพเจฐ เจคเจฟเฉฐเจจเฉเจ เจธเจเฉเจเจกเจพเจ เจจเฉเฉฐ เจชเจพเจฐ เจเจฐเจจ เจฆเฉ เจฏเฉเจ เจจเจนเฉเจ เจธเฉ, เจเจธเจฒเจ เจ เจธเฉเจ เจเฉฑเจ เจเจจเจฒเจพเจเจจ เจฎเฉเจเจพเจฌเจฒเจพ เจเจฐเจจ เจฆเจพ เจซเฉเจธเจฒเจพ เจเฉเจคเจพ เจ เจคเฉ เจเฉเจจ เจฆเฉ เจธเจผเฉเจฐเฉ เจตเจฟเฉฑเจ เจธเจญ เจคเฉเจ เจเจเจพ เจเฉฐเจฎ เจชเฉเจฐเจเจพเจธเจผเจฟเจค เจเฉเจคเจพเฅค เจญเจพเจเฉเจฆเจพเจฐเจพเจ เจจเฉเฉฐ เจเฉฑเจ เจฎเจนเฉเจจเฉ เจฆเฉ เจ เฉฐเจฆเจฐ เจเจพเจฐเจ เจจเฉเฉฐ เจชเฉเจฐเจพ เจเจฐเจจเจพ เจธเฉ, เจซเจฒเฉเจ เจฒเฉฑเจญเจฃเจพ เจธเฉ, เจ เจคเฉ เจนเฉฑเจฒ เจจเฉเฉฐ เจตเจฟเจธเจฅเจพเจฐ เจตเจฟเฉฑเจ เจ เจคเฉ เจฆเจฟเจฒเจเจธเจช เจคเจฐเฉเจเฉ เจจเจพเจฒ เจตเจฐเจฃเจจ เจเจฐเจจเจพ เจธเฉเฅค
เจเฉฑเจ เจฆเฉ เจนเฉเจ เจพเจ เจ เจธเฉเจ เจฎเจนเฉเจจเฉ เจญเจฐ เจตเจฟเฉฑเจ เจญเฉเจเฉ เจเจ เจเฉฐเจฎเจพเจ เจฆเฉ เจธเจญ เจคเฉเจ เจตเจงเฉเจ เจนเฉฑเจฒ เจฆเจพ เจตเจฟเจธเจผเจฒเฉเจธเจผเจฃ เจชเฉเจฐเจเจพเจธเจผเจฟเจค เจเจฐเจฆเฉ เจนเจพเจ, เจเจน เจกเจฟเจเฉเจเจฒ เจธเฉเจฐเฉฑเจเจฟเจ เจเฉฐเจชเจจเฉ เจฆเฉ เจ เจฒเฉเจเจธเฉ เจเฉเจตเจฐเจฟเจเจผเจจเฉเจ (a1exdandy) เจฆเฉเจเจฐเจพ เจชเจพเจเจ เจเจฟเจ เจธเฉ, เจเจฟเจธเจจเฉ PHDays เจฆเฉเจฐเจพเจจ เจฎเฉเจเจพเจฌเจฒเฉ เจตเจฟเฉฑเจ เจชเจนเจฟเจฒเจพ เจธเจฅเจพเจจ เจชเฉเจฐเจพเจชเจค เจเฉเจคเจพ เจธเฉเฅค เจนเฉเจ เจพเจ เจ เจธเฉเจ เจเจชเจฃเฉเจเจ เจเจฟเฉฑเจชเจฃเฉเจเจ เจจเจพเจฒ เจเจธเจฆเจพ เจชเจพเจ เจชเฉเจธเจผ เจเจฐเจฆเฉ เจนเจพเจเฅค
เจธเจผเฉเจฐเฉเจเจคเฉ เจตเจฟเจธเจผเจฒเฉเจธเจผเจฃ
เจเจธ เจฒเจ, เจเจพเจฐเจ เจตเจฟเฉฑเจ เจนเฉเจ เจฒเจฟเจเฉเจเจ เจซเจพเจเจฒเจพเจ เจตเจพเจฒเจพ เจเฉฑเจ เจชเฉเจฐเจพเจฒเฉเจ เจธเจผเจพเจฎเจฒ เจนเฉ:
- block_upload_traffic.pcapng
- DB100.bin
- hints.txt
hints.txt เจซเจพเจเจฒ เจตเจฟเฉฑเจ เจเฉฐเจฎ เจจเฉเฉฐ เจนเฉฑเจฒ เจเจฐเจจ เจฒเจ เจฒเฉเฉเฉเจเจฆเฉ เจเจพเจฃเจเจพเจฐเฉ เจ เจคเฉ เจธเฉฐเจเฉเจค เจธเจผเจพเจฎเจฒ เจนเจจเฅค เจเฉฑเจฅเฉ เจเจธเจฆเฉ เจธเจฎเฉฑเจเจฐเฉ เจนเฉ:
- เจชเฉเจเจฐเฉเจตเจฟเจ เจจเฉ เจฎเฉเจจเฉเฉฐ เจเฉฑเจฒเฉเจน เจฆเฉฑเจธเจฟเจ เจเจฟ เจคเฉเจธเฉเจ PlcSim เจคเฉเจ เจธเจเฉเจช 7 เจตเจฟเฉฑเจ เจฌเจฒเจพเจ เจฒเฉเจก เจเจฐ เจธเจเจฆเฉ เจนเฉเฅค
- เจธเฉเจฎเฉเจเจธ เจธเจฟเจฎเฉเจเจฟเจ S7-300 เจธเฉเจฐเฉเจเจผ PLC เจธเจเฉเจเจก 'เจคเฉ เจตเจฐเจคเฉ เจเจ เจธเฉเฅค
- PlcSim เจเฉฑเจ PLC เจเจฎเฉเจฒเฉเจเจฐ เจนเฉ เจเฉ เจคเฉเจนเจพเจจเฉเฉฐ เจธเฉเจฎเฉเจเจธ S7 PLC เจฒเจ เจชเฉเจฐเฉเจเจฐเจพเจฎเจพเจ เจจเฉเฉฐ เจเจฒเจพเจเจฃ เจ เจคเฉ เจกเฉเจฌเฉฑเจ เจเจฐเจจ เจฆเฉ เจเจเจพเจเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉเฅค
DB100.bin เจซเจพเจเจฒ เจตเจฟเฉฑเจ DB100 PLC เจกเจพเจเจพ เจฌเจฒเจพเจ เจธเจผเจพเจฎเจฒ เจนเฉเฉฐเจฆเจพ เจเจพเจชเจฆเจพ เจนเฉ: 00000000: 0100 0102 6e02 0401 0206 0100 0101 0102 ....n........ 00000010 1002 ............. ................ 0501: 0202 2002 0501 0206 0100 0102 00000020a0102 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 0102a3302 0401 3 00000080................. ' โฆ .... 0206e0100: 0109 0102 0 02 0501 0202 1602 00000090 ........#...... 0501f0206: 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 0100c3 000000 0 010 ....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 เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉเฅค
เจฌเจฒเจพเจเจพเจ เจคเฉเจ เจฎเจจเฉเฉฑเจเฉ-เจชเฉเฉเจนเจจ เจฏเฉเจ เจจเจฟเจฐเจฆเฉเจธเจผ เจชเฉเจฐเจพเจชเจค เจเจฐเจจเจพ
เจชเจนเจฟเจฒเจพเจ, เจเจ เจธเจฟเจฎเฉเจเจฟเจ เจฎเฉเจจเฉเจเจฐ เจธเฉเจซเจเจตเฉเจ เจฐ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจเจธ เจตเจฟเฉฑเจ เจฆเฉเจนเจฐเจพเจเจฃ เจตเจพเจฒเฉเจเจ เจนเจฆเจพเจเจคเจพเจ (= Q 7) เจฆเฉ เจจเจพเจฒ เจเจ เจฌเจฒเจพเจเจพเจ เจจเฉเฉฐ เจฒเฉเจก เจเจฐเจเฉ, เจ เจคเฉ เจเจฎเฉเจฒเฉเจเจฐ เจตเจฟเฉฑเจ เจชเฉเจฐเจพเจชเจค PLC เจจเฉเฉฐ example.plc เจซเจพเจเจฒ เจตเจฟเฉฑเจ เจธเฉเจฐเฉฑเจเจฟเจ เจค เจเจฐเจเฉ S0.0-PlcSim เจจเฉเฉฐ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจเจฐเจจ เจฆเฉ เจเฉเจธเจผเจฟเจธเจผ เจเจฐเฉเจเฅค เจซเจพเจเจฒ เจฆเฉ เจธเจฎเฉฑเจเจฐเฉ เจจเฉเฉฐ เจฆเฉเจ เจเฉ, เจคเฉเจธเฉเจ เจฆเจธเจคเจเจค 70 70 เจฆเฉเจเจฐเจพ เจกเจพเจเจจเจฒเฉเจก เจเฉเจคเฉ เจฌเจฒเจพเจเจพเจ เจฆเฉ เจธเจผเฉเจฐเฉเจเจค เจจเฉเฉฐ เจเจธเจพเจจเฉ เจจเจพเจฒ เจจเจฟเจฐเจงเจพเจฐเจค เจเจฐ เจธเจเจฆเฉ เจนเฉ, เจเฉ เจ เจธเฉเจ เจชเจนเจฟเจฒเจพเจ เจเฉเจเจฟเจ เจธเฉ. เจฌเจฒเจพเจเจพเจ เจคเฉเจ เจชเจนเจฟเจฒเจพเจ, เจเจผเจพเจนเจฐ เจคเฉเจฐ 'เจคเฉ, เจฌเจฒเจพเจ เจฆเจพ เจเจเจพเจฐ 4-เจฌเจพเจเจ เจฒเจฟเจเจฒ-เจเจเจกเฉเจ เจจ เจฎเฉเฉฑเจฒ เจตเจเฉเจ เจฒเจฟเจเจฟเจ เจเจฟเจ เจนเฉเฅค

plc เจซเจพเจเจฒเจพเจ เจฆเฉ เจฌเจฃเจคเจฐ เจฌเจพเจฐเฉ เจเจพเจฃเจเจพเจฐเฉ เจชเฉเจฐเจพเจชเจค เจเจฐเจจ เจคเฉเจ เจฌเจพเจ
เจฆ, PLC S7 เจชเฉเจฐเฉเจเจฐเจพเจฎเจพเจ เจจเฉเฉฐ เจชเฉเฉเจนเจจ เจฒเจ เจนเฉเจ เจฒเจฟเจเฉ เจเจพเจฐเจตเจพเจ เจฏเฉเจเจจเจพ เจฆเจฟเจเจพเจ เจฆเจฟเฉฑเจคเฉ:
- เจธเจฟเจฎเจเจฟเจ เจฎเฉเจจเฉเจเจฐ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเฉเจ, เจ เจธเฉเจ S7-PlcSim เจตเจฟเฉฑเจ เจเฉฑเจ เจฌเจฒเจพเจ เจฌเจฃเจคเจฐ เจฌเจฃเจพเจเจเจฆเฉ เจนเจพเจ เจเจฟเจตเฉเจ เจเจฟ เจ เจธเฉเจ เจกเฉฐเจช เจคเฉเจ เจชเฉเจฐเจพเจชเจค เจเฉเจคเจพ เจนเฉ. เจฌเจฒเจพเจ เจฆเฉ เจเจเจพเจฐเจพเจ เจฆเจพ เจฎเฉเจฒ เจนเฉเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ (เจเจน เจฌเจฒเจพเจเจพเจ เจจเฉเฉฐ เจฒเฉเฉเฉเจเจฆเฉ เจเจฟเจฃเจคเฉ เจฆเฉเจเจ เจนเจฆเจพเจเจคเจพเจ เจจเจพเจฒ เจญเจฐ เจเฉ เจชเฉเจฐเจพเจชเจค เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉ) เจ เจคเฉ เจเจนเจจเจพเจ เจฆเฉ เจชเจเจพเจฃเจเจฐเจคเจพ (OB1, FC1, FC2, FC3)เฅค
- PLC เจจเฉเฉฐ เจเฉฑเจ เจซเจพเจเจฒ เจตเจฟเฉฑเจ เจธเฉเจต เจเจฐเฉเฅค
- เจ เจธเฉเจ เจจเจคเฉเจเฉ เจตเจพเจฒเฉ เจซเจพเจเจฒ เจตเจฟเฉฑเจ เจฌเจฒเจพเจเจพเจ เจฆเฉ เจธเจฎเฉฑเจเจฐเฉ เจจเฉเฉฐ เจเฉเจฐเฉเจซเจฟเจ เจกเฉฐเจช เจคเฉเจ เจฌเจฒเจพเจเจพเจ เจจเจพเจฒ เจฌเจฆเจฒเจฆเฉ เจนเจพเจ. เจฌเจฒเจพเจเจพเจ เจฆเฉ เจธเจผเฉเจฐเฉเจเจค เจฆเจธเจคเจเจค เจฆเฉเจเจฐเจพ เจจเจฟเจฐเจงเจพเจฐเจค เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเฉ.
- เจ เจธเฉเจ เจจเจคเฉเจเฉ เจตเจพเจฒเฉ เจซเจพเจเจฒ เจจเฉเฉฐ S7-PlcSim เจตเจฟเฉฑเจ เจฒเฉเจก เจเจฐเจฆเฉ เจนเจพเจ เจ เจคเฉ เจธเจฟเจฎเจเจฟเจ เจฎเฉเจจเฉเจเจฐ เจตเจฟเฉฑเจ เจฌเจฒเจพเจเจพเจ เจฆเฉ เจธเจฎเฉฑเจเจฐเฉ เจจเฉเฉฐ เจฆเฉเจเจฆเฉ เจนเจพเจ.
เจฌเจฒเจพเจเจพเจ เจจเฉเฉฐ เจฌเจฆเจฒเจฟเจ เจเจพ เจธเจเจฆเจพ เจนเฉ, เจเจฆเจพเจนเจฐเจจ เจฒเจ, เจนเฉเจ เจพเจ เจฆเจฟเฉฑเจคเฉ เจเฉเจก เจจเจพเจฒ:
with open('original.plc', 'rb') as f:
plc = f.read()
blocks = []
for fname in ['OB1.bin', 'FC1.bin', 'FC2.bin', 'FC3.bin']:
with open(fname, 'rb') as f:
blocks.append(f.read())
i = plc.find(b'pp')
for block in blocks:
plc = plc[:i] + block + plc[i+len(block):]
i = plc.find(b'pp', i + 1)
with open('target.plc', 'wb') as f:
f.write(plc)เจ เจฒเฉเจเจธเฉ เจจเฉ เจธเจผเจพเจเจฆ เจตเจงเฉเจฐเฉ เจฎเฉเจธเจผเจเจฒ, เจชเจฐ เจ เจเฉ เจตเฉ เจธเจนเฉ เจฐเจธเจคเจพ เจฒเจฟเจ. เจ เจธเฉเจ เจเจน เจฎเฉฐเจจเจฟเจ เจนเฉ เจเจฟ เจญเจพเจเฉเจฆเจพเจฐ NetToPlcSim เจชเฉเจฐเฉเจเจฐเจพเจฎ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจเจเฉ เจคเจพเจ เจเฉ PlcSim เจจเฉเฉฑเจเจตเจฐเจ 'เจคเฉ เจธเฉฐเจเจพเจฐ เจเจฐ เจธเจเฉ, Snap7 เจฐเจพเจนเฉเจ PlcSim 'เจคเฉ เจฌเจฒเจพเจ เจ เฉฑเจชเจฒเฉเจก เจเจฐ เจธเจเฉ, เจ เจคเฉ เจซเจฟเจฐ เจตเจฟเจเจพเจธ เจตเจพเจคเจพเจตเจฐเจฃ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเฉเจ PlcSim เจคเฉเจ เจเจนเจจเจพเจ เจฌเจฒเจพเจเจพเจ เจจเฉเฉฐ เจเฉฑเจ เจชเฉเจฐเฉเจเฉเจเจ เจตเจเฉเจ เจกเจพเจเจจเจฒเฉเจก เจเจฐ เจธเจเฉเฅค
เจจเจคเฉเจเฉ เจตเจพเจฒเฉ เจซเจพเจเจฒ เจจเฉเฉฐ S7-PlcSim เจตเจฟเฉฑเจ เจเฉเจฒเฉเจน เจเฉ, เจคเฉเจธเฉเจ เจธเจฟเจฎเจเจฟเจ เจฎเฉเจจเฉเจเจฐ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจเจตเจฐเจฐเจพเจเจ เจเฉเจคเฉ เจฌเจฒเจพเจเจพเจ เจจเฉเฉฐ เจชเฉเฉเจน เจธเจเจฆเฉ เจนเฉเฅค เจฎเฉเฉฑเจ เจกเจฟเจตเจพเจเจธ เจเฉฐเจเจฐเฉเจฒ เจซเฉฐเจเจธเจผเจจ เจฌเจฒเจพเจ FC1 เจตเจฟเฉฑเจ เจฐเจฟเจเจพเจฐเจก เจเฉเจคเฉ เจเจ เจนเจจเฅค เจเจพเจธ เจคเฉเจฐ 'เจคเฉ เจจเฉเจ #TEMP0 เจตเฉเจฐเฉเจเจฌเจฒ เจนเฉ, เจเฉ เจเจฟ เจเจพเจฒเฉ เจนเฉเจฃ 'เจคเฉ M2.2 เจ เจคเฉ M2.3 เจฌเจฟเฉฑเจ เจฎเฉเจฎเฉเจฐเฉ เจฎเฉเฉฑเจฒเจพเจ เจฆเฉ เจเจงเจพเจฐ 'เจคเฉ PLC เจเฉฐเจเจฐเฉเจฒ เจจเฉเฉฐ เจฎเฉเจจเฉเจ เจฒ เจฎเฉเจก 'เจคเฉ เจธเฉเฉฑเจ เจเจฐเจฆเจพ เจชเฉเจฐเจคเฉเจค เจนเฉเฉฐเจฆเจพ เจนเฉเฅค #TEMP0 เจฎเฉเฉฑเจฒ เจซเฉฐเจเจธเจผเจจ FC3 เจฆเฉเจเจฐเจพ เจธเฉเฉฑเจ เจเฉเจคเจพ เจเจฟเจ เจนเฉเฅค

เจธเจฎเฉฑเจธเจฟเจ เจจเฉเฉฐ เจนเฉฑเจฒ เจเจฐเจจ เจฒเจ, เจคเฉเจนเจพเจจเฉเฉฐ FC3 เจซเฉฐเจเจธเจผเจจ เจฆเจพ เจตเจฟเจธเจผเจฒเฉเจธเจผเจฃ เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉ เจ
เจคเฉ เจเจน เจธเจฎเจเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉ เจเจฟ เจเฉ เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉ เจคเจพเจ เจเฉ เจเจน เจเฉฑเจ เจฒเจพเจเจผเฉเจเจฒ เจตเจพเจชเจธ เจเจฐเฉเฅค
เจฎเฉเจเจพเจฌเจฒเฉ เจตเจพเจฒเฉ เจฅเจพเจ 'เจคเฉ เจเฉฑเจ เจธเฉเจฐเฉฑเจเจฟเจ เจธเจเฉเจเจก 'เจคเฉ PLC เจธเจฟเจเจจเจฒ เจชเฉเจฐเฉเจธเฉเจธเจฟเฉฐเจ เจฌเจฒเจพเจเจพเจ เจจเฉเฉฐ เจเจธเฉ เจคเจฐเฉเจนเจพเจ เจตเจฟเจตเจธเจฅเจฟเจค เจเฉเจคเจพ เจเจฟเจ เจธเฉ, เจชเจฐ #TEMP0 เจตเฉเจฐเฉเจเจฌเจฒ เจฆเจพ เจฎเฉเฉฑเจฒ เจธเฉเฉฑเจ เจเจฐเจจ เจฒเจ, DB1 เจฌเจฒเจพเจ เจตเจฟเฉฑเจ เจฎเฉเจฐเฉ เจจเจฟเฉฐเจเจพ เจฒเจพเจเจจ เจจเฉเฉฐ เจฒเจฟเจเจฃเจพ เจเจพเจซเจผเฉ เจธเฉเฅค เจเฉฑเจ เจฌเจฒเจพเจ เจตเจฟเฉฑเจ เจฎเฉเฉฑเจฒ เจฆเฉ เจเจพเจเจ เจเจฐเจจเจพ เจธเจฟเฉฑเจงเจพ เจธเฉ เจ เจคเฉ เจฌเจฒเจพเจ เจชเฉเจฐเฉเจเจฐเจพเจฎเจฟเฉฐเจ เจญเจพเจธเจผเจพ เจฆเฉ เจกเฉเฉฐเจเฉ เจเจฟเจเจจ เจฆเฉ เจฒเฉเฉ เจจเจนเฉเจ เจธเฉเฅค เจธเจชเฉฑเจธเจผเจ เจคเฉเจฐ 'เจคเฉ, เจเฉฑเจ เจธเฉเจฐเฉฑเจเจฟเจ เจชเฉฑเจงเจฐ 'เจคเฉ, เจฆเจธเจคเฉ เจจเจฟเจฏเฉฐเจคเจฐเจฃ เจชเฉเจฐเจพเจชเจค เจเจฐเจจเจพ เจฌเจนเฉเจค เจเจผเจฟเจเจฆเจพ เจฎเฉเจธเจผเจเจฒ เจนเฉเจตเฉเจเจพ เจ เจคเฉ STL เจญเจพเจธเจผเจพ เจฆเฉเจเจ เจชเฉเจเฉเจฆเจเฉเจเจ เจจเฉเฉฐ เจธเจฎเจเจฃเจพ เจเจผเจฐเฉเจฐเฉ เจนเฉ (S7 PLC เจจเฉเฉฐ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจเจฐเจจ เจฆเจพ เจเฉฑเจ เจคเจฐเฉเจเจพ)เฅค
เจเจฒเจเจพ เจฌเจฒเจพเจ FC3
STL เจจเฉเจฎเจพเจเฉฐเจฆเจเฉ เจตเจฟเฉฑเจ FC3 เจฌเจฒเจพเจ เจฆเฉเจเจ เจธเจฎเฉฑเจเจฐเฉเจเจ:
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
