เชเซเชฒเซเชฒเชพ PHDays 9 เชฎเชพเช เช
เชฎเซ เชเซเชธ เชชเชฎเซเชชเชฟเชเช เชชเซเชฒเชพเชจเซเชเชจเซ เชนเซเช เชเชฐเชตเชพ เชฎเชพเชเซ เชธเซเชชเชฐเซเชงเชพ เชฏเซเชเซ เชนเชคเซ - เชธเซเชชเชฐเซเชงเชพ
เชตเชฟเชตเชฟเชง เชธเชฒเชพเชฎเชคเซ เชชเชฐเชฟเชฎเชพเชฃเซ เชนเซเชตเชพ เชเชคเชพเช, เชธเซเชเซเชจเซเชกเชจเซ เชนเชพเชฐเซเชกเชตเซเชฐ เชฐเชเชจเชพ เชธเชฎเชพเชจ เชนเชคเซ: เชธเชฟเชฎเซเชจเซเชธ เชธเชฟเชฎเซเชเชฟเช PLC S7-300 เชถเซเชฐเซเชฃเซ; เชเชเซเชเชเซ เชกเชฟเชซเซเชฒเซเชถเชจ เชฌเชเชจ เช เชจเซ เชฆเชฌเชพเชฃ เชฎเชพเชชเชตเชพเชจเซเช เชเชชเชเชฐเชฃ (เชชเซเชเชฒเชธเซ เชกเชฟเชเชฟเชเชฒ เชเชจเชชเซเชเซเชธ (DI) เชธเชพเชฅเซ เชเซเชกเชพเชฏเซเชฒ); เชซเซเชเชพเชตเชพ เช เชจเซ เชนเชตเชพเชจเชพ เชกเชฟเชซเซเชฒเซเชถเชจ เชฎเชพเชเซ เชเชพเชฐเซเชฏเชฐเชค เชตเชพเชฒเซเชต (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 เชเชฎเซเชฏเซเชฒเซเชเชฐ เชเซ เชเซ เชคเชฎเชจเซ 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 0206a0100 ..w............. ............ 0103 0102............0. 02: 00000030 0501 0202 1602 0501 0206 0100 0104 ......... & ..... 0102: 00000040c7502 0401 0206 0100 0105 0102 0 02 0501 เชเชฒ ......... 00000050. : 0202 1602 0501 0206 0100a0106 0102 3402 4 ................ 00000060: 0401 0206 0100 0107a 0102 2602 0501 0202 .......... 00000070a4: 02 0501b 0206 0100 0108 0102 3302 0401 ......".....F... 3b00000080: 0206 0100 0109c 0102 0 02 .... .. 0501c0202: 1602d 00000090 0501a0206 0100 010 0102 3702 0401 ................ 0206d7: 000000 0e 0100 010d0102 2202 0501 0202 4602 0501 000000 0. .... 0206e0100: 010 0102 3302 0401 0206 0100 3 000000 ........#...... 0f010: 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 0501c0206 0100 000000 0 ....เชเชฒ......
เชจเชพเชฎ เชธเซเชเชตเซ เชเซ เชคเซเชฎ, 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 เชญเชพเชทเชพเชจเซ เชตเชฟเชเชคเชตเชพเชฐ เชธเซเชเชจเชพเช เช
เชจเซ เชเซเชทเชฎเชคเชพเช เชธเชเชฌเชเชงเชฟเชค เชฎเชพเชฐเซเชเชฆเชฐเซเชถเชฟเชเชพเชฎเชพเช เชฎเชณเซ เชถเชเซ เชเซ:
เชชเซเชฐเซเชธเซเชธเชฟเชเช เชชเชเซ เชเซเชก]
# ะะฝะธัะธะฐะปะธะทะฐัะธั ัะฐะทะปะธัะฝัั
ะฟะตัะตะผะตะฝะฝัั
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