เด‡เตปเดกเดธเตเดŸเตเดฐเดฟเดฏเตฝ เดจเดฟเตปเดœเดฏเตเดŸเต† เดšเตเดตเดŸเตเดชเดฟเดŸเดฟเดšเตเดšเต: เดชเต‹เดธเดฟเดฑเตเดฑเต€เดตเต เดนเดพเด•เตเด•เต เดกเต‡เดฏเตโ€Œเดธเต 9-เตฝ เด’เดฐเต PLC เดŽเด™เตเด™เดจเต† เดนเดพเด•เตเด•เต เดšเต†เดฏเตเดฏเดชเตเดชเต†เดŸเตเดŸเต

เด‡เตปเดกเดธเตเดŸเตเดฐเดฟเดฏเตฝ เดจเดฟเตปเดœเดฏเตเดŸเต† เดšเตเดตเดŸเตเดชเดฟเดŸเดฟเดšเตเดšเต: เดชเต‹เดธเดฟเดฑเตเดฑเต€เดตเต เดนเดพเด•เตเด•เต เดกเต‡เดฏเตโ€Œเดธเต 9-เตฝ เด’เดฐเต PLC เดŽเด™เตเด™เดจเต† เดนเดพเด•เตเด•เต เดšเต†เดฏเตเดฏเดชเตเดชเต†เดŸเตเดŸเต

เด•เดดเดฟเดžเตเดž PHDays 9-เตฝ เดžเด™เตเด™เตพ เด’เดฐเต เด—เตเดฏเดพเดธเต เดชเดฎเตเดชเดฟเด‚เด—เต เดชเตเดฒเดพเดจเตเดฑเต เดนเดพเด•เตเด•เต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เดฎเดคเตเดธเดฐเด‚ เดจเดŸเดคเตเดคเดฟ - เดฎเดคเตเดธเดฐเด‚ เดตเตเดฏเดพเดตเดธเดพเดฏเดฟเด• เดจเดฟเตปเดœ. เด’เดฐเต‡ เดตเตเดฏเดพเดตเดธเดพเดฏเดฟเด• เดชเตเดฐเด•เตเดฐเดฟเดฏเดฏเต† เด…เดจเตเด•เดฐเดฟเด•เตเด•เตเดจเตเดจ เดตเตเดฏเดคเตเดฏเดธเตเดค เดธเตเดฐเด•เตเดทเดพ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เดณเตเดณเตเดณ (เดธเต†เด•เตเดฏเต‚เดฐเดฟเดฑเตเดฑเดฟ เด‡เดฒเตเดฒ, เดฒเต‹ เดธเต†เด•เตเดฏเต‚เดฐเดฟเดฑเตเดฑเดฟ, เดนเตˆ เดธเต†เด•เตเดฏเต‚เดฐเดฟเดฑเตเดฑเดฟ) เดธเตˆเดฑเตเดฑเดฟเตฝ เดฎเต‚เดจเตเดจเต เดธเตเดฑเตเดฑเดพเตปเดกเตเด•เตพ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเตเดจเตเดจเต: เดธเดฎเตเดฎเตผเดฆเตเดฆเดคเตเดคเดฟเตป เด•เต€เดดเดฟเดฒเตเดณเตเดณ เดตเดพเดฏเต เด’เดฐเต เดฌเดฒเต‚เดฃเดฟเดฒเต‡เด•เตเด•เต เดชเดฎเตเดชเต เดšเต†เดฏเตเดคเต (เดชเดฟเดจเตเดจเต€เดŸเต เดฑเดฟเดฒเต€เดธเต เดšเต†เดฏเตเดคเต).

เดตเตเดฏเดคเตเดฏเดธเตเดค เดธเตเดฐเด•เตเดทเดพ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเตเดจเตเดจเดฟเดŸเตเดŸเตเด‚, เดธเตเดฑเตเดฑเดพเตปเดกเตเด•เดณเตเดŸเต† เดนเดพเตผเดกเตโ€Œเดตเต†เดฏเตผ เด˜เดŸเดจ เด’เดจเตเดจเตเดคเดจเตเดจเต†เดฏเดพเดฏเดฟเดฐเตเดจเตเดจเต: เดธเต€เดฎเต†เตปเดธเต เดธเดฟเดฎเดพเดฑเตเดฑเดฟเด•เต PLC S7-300 เดธเต€เดฐเต€เดธเต; เดŽเดฎเตผเดœเตปเดธเดฟ เดกเดฟเดซเตเดฒเต‡เดทเตป เดฌเดŸเตเดŸเดฃเตเด‚ เดฎเตผเดฆเตเดฆเด‚ เด…เดณเด•เตเด•เตเดจเตเดจ เด‰เดชเด•เดฐเดฃเดตเตเด‚ (เดชเดฟเดŽเตฝเดธเดฟ เดกเดฟเดœเดฟเดฑเตเดฑเตฝ เด‡เตปเดชเตเดŸเตเดŸเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต (เดกเดฟเด) เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต); เดตเดพเดฏเตเดตเดฟเดจเตเดฑเต† เดชเดฃเดชเตเดชเต†เดฐเตเดชเตเดชเดคเตเดคเดฟเดจเตเด‚ เดชเดฃเดชเตเดชเต†เดฐเตเดชเตเดชเดคเตเดคเดฟเดจเตเด‚ เดตเต‡เดฃเตเดŸเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจ เดตเดพเตฝเดตเตเด•เตพ (PLC (DO) เดฏเตเดŸเต† เดกเดฟเดœเดฟเดฑเตเดฑเตฝ เด”เดŸเตเดŸเตเดชเตเดŸเตเดŸเตเด•เดณเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต) - เดšเตเดตเดŸเต†เดฏเตเดณเตเดณ เดšเดฟเดคเตเดฐเด‚ เด•เดพเดฃเตเด•.

เด‡เตปเดกเดธเตเดŸเตเดฐเดฟเดฏเตฝ เดจเดฟเตปเดœเดฏเตเดŸเต† เดšเตเดตเดŸเตเดชเดฟเดŸเดฟเดšเตเดšเต: เดชเต‹เดธเดฟเดฑเตเดฑเต€เดตเต เดนเดพเด•เตเด•เต เดกเต‡เดฏเตโ€Œเดธเต 9-เตฝ เด’เดฐเต PLC เดŽเด™เตเด™เดจเต† เดนเดพเด•เตเด•เต เดšเต†เดฏเตเดฏเดชเตเดชเต†เดŸเตเดŸเต

PLC, เดชเตเดฐเดทเตผ เดฑเต€เดกเดฟเด‚เด—เตเด•เดณเต† เด†เดถเตเดฐเดฏเดฟเดšเตเดšเต, เด…เดคเดฟเดจเตเดฑเต† เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเดจเต เด…เดจเตเดธเตƒเดคเดฎเดพเดฏเดฟ, เดชเดจเตเดคเต เดกเต€เดซเตเดฒเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต‹ เด‰เดฏเตผเดคเตเดคเตเดจเตเดจเดคเดฟเดจเต‹ เด’เดฐเต เดคเต€เดฐเตเดฎเดพเดจเด‚ เดŽเดŸเตเดคเตเดคเต (เด…เดจเตเดฌเดจเตเดง เดตเดพเตฝเดตเตเด•เตพ เดคเตเดฑเดจเตเดจเต เด…เดŸเดšเตเดšเต). เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เดŽเดฒเตเดฒเดพ เดธเตเดฑเตเดฑเดพเตปเดกเตเด•เดณเดฟเดฒเตเด‚ เด’เดฐเต เดฎเดพเดจเตเดตเตฝ เด•เตบเดŸเตเดฐเต‹เตพ เดฎเต‹เดกเต เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเตเดจเตเดจเต, เด‡เดคเต เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเด™เตเด™เดณเดฟเดฒเตเดฒเดพเดคเต† เดตเดพเตฝเดตเตเด•เดณเตเดŸเต† เด…เดตเดธเตเดฅเด•เตพ เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต เดธเดพเดงเตเดฏเดฎเดพเด•เตเด•เดฟ.

เดˆ เดฎเต‹เดกเต เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดฎเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฑเต† เดธเด™เตเด•เต€เตผเดฃเตเดฃเดคเดฏเดฟเตฝ เดธเตเดฑเตเดฑเดพเตปเดกเตเด•เตพ เดตเตเดฏเดคเตเดฏเดพเดธเดชเตเดชเต†เดŸเตเดŸเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต: เดธเตเดฐเด•เตเดทเดฟเดคเดฎเดฒเตเดฒเดพเดคเตเดค เดธเตเดฑเตเดฑเดพเตปเดกเดฟเตฝ เด‡เดคเต เดšเต†เดฏเตเดฏเดพเตป เดเดฑเตเดฑเดตเตเด‚ เดŽเดณเตเดชเตเดชเดฎเดพเดฏเดฟเดฐเตเดจเตเดจเต, เด‰เดฏเตผเดจเตเดจ เดธเตเดฐเด•เตเดทเดพ เดธเตเดฑเตเดฑเดพเตปเดกเดฟเตฝ เด…เดคเต เด•เต‚เดŸเตเดคเตฝ เดฌเตเดฆเตเดงเดฟเดฎเตเดŸเตเดŸเดพเดฏเดฟเดฐเตเดจเตเดจเต.

เดฐเดฃเตเดŸเต เดฆเดฟเดตเดธเด‚ เด•เตŠเดฃเตเดŸเต เด†เดฑเต เดชเตเดฐเดถเตเดจเด™เตเด™เดณเดฟเตฝ เด…เดžเตเดšเต†เดฃเตเดฃเด‚ เดชเดฐเดฟเดนเดฐเดฟเดšเตเดšเต; เด’เดจเตเดจเดพเด‚ เดธเตเดฅเดพเดจเด•เตเด•เดพเดฐเตป 233 เดชเต‹เดฏเดฟเดจเตเดฑเตเด•เตพ เดจเต‡เดŸเดฟ (เด…เดฆเตเดฆเต‡เดนเด‚ เดฎเดคเตเดธเดฐเดคเตเดคเดฟเดจเดพเดฏเดฟ เด’เดฐเต เด†เดดเตเดš เดšเต†เดฒเดตเดดเดฟเดšเตเดšเต). เดฎเต‚เดจเตเดจเต เดตเดฟเดœเดฏเดฟเด•เตพ: เดžเดพเตป เดธเตเดฅเดพเดจเด‚ - a1exdandy, II - Rubikoid, III - Ze.

เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, PHDays เดธเดฎเดฏเดคเตเดคเต, เดชเด™เตเด•เต†เดŸเตเดคเตเดค เด†เตผเด•เตเด•เตเด‚ เดฎเต‚เดจเตเดจเต เดธเตเดฑเตเดฑเดพเตปเดกเตเด•เดณเตเด‚ เดฎเดฑเดฟเด•เดŸเด•เตเด•เดพเตป เด•เดดเดฟเดžเตเดžเดฟเดฒเตเดฒ, เด…เดคเดฟเดจเดพเตฝ เดžเด™เตเด™เตพ เด’เดฐเต เด“เตบเดฒเตˆเตป เดฎเดคเตเดธเดฐเด‚ เดจเดŸเดคเตเดคเดพเตป เดคเต€เดฐเตเดฎเดพเดจเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดเดฑเตเดฑเดตเตเด‚ เดฌเตเดฆเตเดงเดฟเดฎเตเดŸเตเดŸเตเดณเตเดณ เดŸเดพเดธเตเด•เต เดœเต‚เตบ เด†เดฆเตเดฏเด‚ เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดคเต. เดชเด™เตเด•เต†เดŸเตเด•เตเด•เตเดจเตเดจเดตเตผ เด’เดฐเต เดฎเดพเดธเดคเตเดคเดฟเดจเตเดณเตเดณเดฟเตฝ เดšเตเดฎเดคเดฒ เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเด•เตเด•เดฏเตเด‚ เดชเดคเดพเด• เด•เดฃเตเดŸเต†เดคเตเดคเตเด•เดฏเตเด‚ เดตเดฟเดถเดฆเดฎเดพเดฏเตเด‚ เดฐเดธเด•เดฐเดฎเดพเดฏ เดฐเต€เดคเดฟเดฏเดฟเดฒเตเด‚ เดชเดฐเดฟเดนเดพเดฐเด‚ เดตเดฟเดตเดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดตเต‡เดฃเด‚.

เด•เดŸเตเดŸเดฟเดจเต เดšเตเดตเดŸเต† เดžเด™เตเด™เตพ เดฎเดพเดธเดคเตเดคเดฟเตฝ เด…เดฏเดšเตเดšเดตเดฐเดฟเตฝ เดจเดฟเดจเตเดจเต เดŸเดพเดธเตโ€Œเด•เตเด•เดฟเดจเตเดณเตเดณ เดเดฑเตเดฑเดตเตเด‚ เดฎเดฟเด•เดšเตเดš เดชเดฐเดฟเดนเดพเดฐเดคเตเดคเดฟเดจเตเดฑเต† เด’เดฐเต เดตเดฟเดถเด•เดฒเดจเด‚ เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต, เด‡เดคเต PHDays เดธเดฎเดฏเดคเตเดคเต เดฎเดคเตเดธเดฐเดคเตเดคเดฟเตฝ เด’เดจเตเดจเดพเด‚ เดธเตเดฅเดพเดจเด‚ เดจเต‡เดŸเดฟเดฏ เดกเดฟเดœเดฟเดฑเตเดฑเตฝ เดธเต†เด•เตเดฏเต‚เดฐเดฟเดฑเตเดฑเดฟ เด•เดฎเตเดชเดจเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ Alexey Kovrizhnykh (a1exdandy) เด•เดฃเตเดŸเต†เดคเตเดคเดฟ. เดžเด™เตเด™เดณเตเดŸเต† เด…เดญเดฟเดชเตเดฐเดพเดฏเด™เตเด™เตพเด•เตเด•เตŠเดชเตเดชเด‚ เดžเด™เตเด™เตพ เด…เดคเดฟเดจเตเดฑเต† เดตเดพเดšเด•เด‚ เดšเตเดตเดŸเต† เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต.

เดชเตเดฐเดพเดฐเด‚เดญ เดตเดฟเดถเด•เดฒเดจเด‚

เด…เดคเดฟเดจเดพเตฝ, เดŸเดพเดธเตโ€Œเด•เตเด•เดฟเตฝ เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดซเดฏเดฒเตเด•เดณเตเดณเตเดณ เด’เดฐเต เด†เตผเด•เตเด•เตˆเดตเต เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต:

  • block_upload_traffic.pcapng
  • DB100.bin
  • hints.txt

hints.txt เดซเดฏเดฒเดฟเตฝ เดŸเดพเดธเตเด•เต เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด†เดตเดถเตเดฏเดฎเดพเดฏ เดตเดฟเดตเดฐเด™เตเด™เดณเตเด‚ เดธเต‚เดšเดจเด•เดณเตเด‚ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เด…เดคเดฟเดจเตเดฑเต† เด‰เดณเตเดณเดŸเด•เตเด•เด‚ เด‡เดคเดพ:

  1. เดจเดฟเด™เตเด™เตพเด•เตเด•เต PlcSim-เตฝ เดจเดฟเดจเตเดจเต Step7-เดฒเต‡เด•เตเด•เต เดฌเตเดฒเต‹เด•เตเด•เตเด•เตพ เดฒเต‹เดกเต เดšเต†เดฏเตเดฏเดพเดฎเต†เดจเตเดจเต เดชเต†เดŸเตเดฐเต‹เดตเดฟเดšเตเดšเต เด‡เดจเตเดจเดฒเต† เดŽเดจเตเดจเต‹เดŸเต เดชเดฑเดžเตเดžเต.
  2. เดธเต€เดฎเต†เตปเดธเต เดธเดฟเดฎเดพเดฑเตเดฑเดฟเด•เต เดŽเดธเต7-300 เดธเต€เดฐเต€เดธเต เดชเดฟเดŽเตฝเดธเดฟ เดธเตเดฑเตเดฑเดพเตปเดกเดฟเตฝ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต.
  3. Siemens S7 PLC-เด•เตพเด•เตเด•เดพเดฏเดฟ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เดพเดจเตเด‚ เดกเต€เดฌเด—เต เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต PLC เดŽเดฎเตเดฒเต‡เดฑเตเดฑเดฑเดพเดฃเต PlcSim.

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 00000040a7502 0401 u............ 0206: 0100 0105 0102 0 02 0501 00000050 0202............1602. 0501: 0206 0100 0106 0102 3402 4 00000060 0401 .........&..... 0206: 0100c0107 0102 2602 0501 0202 00000070 4 : 02 0501 0206 0100 0108a0102 3302 0401 3 ................ 00000080: 0206 0100 0109 0102a 0 02 0501 0202 .........1602. 00000090a0501: 0206 0100b 010 0102 3702 0401 0206 7 ...".....F... 000000b0: 0100 010 0102c 2202 0501 0202 4602........ .. 0501c000000: 0d 0206 0100a010 0102 3302 0401 0206 0100 ................ 3d000000: 0 010e 0102 0d02 0501 0202 .... 1602e0501: 0206 000000 0 0100 010 0102 6 02 ........#...... 0401f0206: 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 2502c0501 0206 0100 0112 ....L......

เดชเต‡เดฐเต เดธเต‚เดšเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเต เดชเต‹เดฒเต†, block_upload_traffic.pcapng เดซเดฏเดฒเดฟเตฝ PLC-เดฏเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดฌเตเดฒเต‹เด•เตเด•เต เด…เดชเตโ€Œเดฒเต‹เดกเต เดŸเตเดฐเดพเดซเดฟเด•เตเด•เดฟเดจเตเดฑเต† เด’เดฐเต เดกเดฎเตเดชเต เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต.

เด•เต‹เตบเดซเดฑเตปเดธเต เดธเดฎเดฏเดคเตเดคเต เดฎเดคเตเดธเดฐ เดธเตˆเดฑเตเดฑเดฟเดฒเต† เดˆ เดŸเตเดฐเดพเดซเดฟเด•เต เดกเด‚เดชเต เดฒเดญเดฟเด•เตเด•เดพเตป เด•เตเดฑเดšเตเดšเตเด•เต‚เดŸเดฟ เดฌเตเดฆเตเดงเดฟเดฎเตเดŸเตเดŸเดพเดฏเดฟเดฐเตเดจเตเดจเต เดŽเดจเตเดจเดคเต เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเดพเดฃเต. เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, TeslaSCADA2-เดจเตเดณเตเดณ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดซเดฏเดฒเดฟเตฝ เดจเดฟเดจเตเดจเต เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเด•เต‡เดฃเตเดŸเดคเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต. RC4 เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดŽเตปเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดšเต†เดฏเตเดค เดกเด‚เดชเต เดŽเดตเดฟเดŸเต†เดฏเดพเดฃเต†เดจเตเดจเตเด‚ เด…เดคเต เดกเต€เด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดšเต†เดฏเตเดฏเดพเตป เดŽเดจเตเดคเต เด•เต€ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดฃเดฎเต†เดจเตเดจเตเด‚ เด…เดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเด•เดพเตป เดธเดพเดงเดฟเดšเตเดšเต. เดธเตˆเดฑเตเดฑเดฟเดฒเต† เดกเดพเดฑเตเดฑ เดฌเตเดฒเต‹เด•เตเด•เตเด•เดณเตเดŸเต† เดกเด‚เดชเตเด•เตพ S7 เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ เด•เตเดฒเดฏเดจเตเดฑเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดฒเดญเดฟเด•เตเด•เตเด‚. เด‡เดคเดฟเดจเดพเดฏเดฟ เดžเดพเตป Snap7 เดชเดพเด•เตเด•เต‡เดœเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดกเต†เดฎเต‹ เด•เตเดฒเดฏเดจเตเดฑเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต.

เด’เดฐเต เดŸเตเดฐเดพเดซเดฟเด•เต เดกเดฎเตเดชเดฟเตฝ เดจเดฟเดจเตเดจเต เดธเดฟเด—เตเดจเตฝ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เต เดฌเตเดฒเต‹เด•เตเด•เตเด•เตพ เดตเต‡เตผเดคเดฟเดฐเดฟเดšเตเดšเต†เดŸเตเด•เตเด•เตเดจเตเดจเต

เดกเดฎเตเดชเดฟเดจเตเดฑเต† เด‰เดณเตเดณเดŸเด•เตเด•เด™เตเด™เตพ เดจเต‹เด•เตเด•เตเดฎเตเดชเต‹เตพ, เด…เดคเดฟเตฝ OB1, FC1, FC2, FC3 เดŽเดจเตเดจเต€ เดธเดฟเด—เตเดจเตฝ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เต เดฌเตเดฒเต‹เด•เตเด•เตเด•เตพ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เดจเตเดจเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเด‚:

เด‡เตปเดกเดธเตเดŸเตเดฐเดฟเดฏเตฝ เดจเดฟเตปเดœเดฏเตเดŸเต† เดšเตเดตเดŸเตเดชเดฟเดŸเดฟเดšเตเดšเต: เดชเต‹เดธเดฟเดฑเตเดฑเต€เดตเต เดนเดพเด•เตเด•เต เดกเต‡เดฏเตโ€Œเดธเต 9-เตฝ เด’เดฐเต PLC เดŽเด™เตเด™เดจเต† เดนเดพเด•เตเด•เต เดšเต†เดฏเตเดฏเดชเตเดชเต†เดŸเตเดŸเต

เดˆ เดฌเตเดฒเต‹เด•เตเด•เตเด•เตพ เดจเต€เด•เตเด•เด‚ เดšเต†เดฏเตเดฏเดฃเด‚. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด‡เดคเต เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเด‚, เดฎเตเดฎเตเดชเต 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 (เดชเดฟเดชเดฟ) เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเต เดจเดฟเด™เตเด™เตพ เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เตเด‚. เด…เดต เดŽเด™เตเด™เดจเต† เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดฏเดฃเดฎเต†เดจเตเดจเต เด‡เดชเตเดชเต‹เตพ เดจเดฟเด™เตเด™เตพ เดชเด เดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เด‡เดคเดฟเดจเดพเดฏเดฟ เดจเดฟเด™เตเด™เตพ PlcSim เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดฃเดฎเต†เดจเตเดจเต เด…เดธเตˆเตปเดฎเต†เดจเตเดฑเต เดธเต‚เดšเดจ เดธเต‚เดšเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต.

เดฌเตเดฒเต‹เด•เตเด•เตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดฎเดจเตเดทเตเดฏเตผเด•เตเด•เต เดตเดพเดฏเดฟเด•เตเด•เดพเดตเตเดจเตเดจ เดจเดฟเตผเดฆเตเดฆเต‡เดถเด™เตเด™เตพ เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเต

เด†เดฆเตเดฏเด‚, เดธเดฟเดฎเดพเดฑเตเดฑเดฟเด•เต เดฎเดพเดจเต‡เดœเตผ เดธเต‹เดซเตโ€Œเดฑเตเดฑเตโ€Œเดตเต†เดฏเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด†เดตเตผเดคเตเดคเดฟเดšเตเดšเตเดณเตเดณ เดจเดฟเตผเดฆเตเดฆเต‡เดถเด™เตเด™เดณเตเดณเตเดณ (= Q 7) เดจเดฟเดฐเดตเดงเดฟ เดฌเตเดฒเต‹เด•เตเด•เตเด•เตพ เดฒเต‹เดกเตเดšเต†เดฏเตโ€Œเดคเต S0.0-PlcSim เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เดšเต†เดฏเตเดฏเดพเตป เดถเตเดฐเดฎเดฟเด•เตเด•เดพเด‚, เด•เต‚เดŸเดพเดคเต† เดŽเดฎเตเดฒเต‡เดฑเตเดฑเดฑเดฟเตฝ เดฒเดญเดฟเดšเตเดš PLC เด‰เดฆเดพเดนเดฐเดฃเด‚.plc เดซเดฏเดฒเดฟเดฒเต‡เด•เตเด•เต เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เตเด•. เดซเดฏเดฒเดฟเดจเตเดฑเต† เด‰เดณเตเดณเดŸเด•เตเด•เด™เตเด™เตพ เดจเต‹เด•เตเด•เตเดจเตเดจเดคเดฟเดฒเต‚เดŸเต†, เดžเด™เตเด™เตพ เดจเต‡เดฐเดคเตเดคเต† เด•เดฃเตเดŸเต†เดคเตเดคเดฟเดฏ 70 70 เดŽเดจเตเดจ เด’เดชเตเดชเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตเดค เดฌเตเดฒเต‹เด•เตเด•เตเด•เดณเตเดŸเต† เดคเตเดŸเด•เตเด•เด‚ เดŽเดณเตเดชเตเดชเดคเตเดคเดฟเตฝ เดจเดฟเตผเดฃเตเดฃเดฏเดฟเด•เตเด•เดพเดจเดพเด•เตเด‚. เดฌเตเดฒเต‹เด•เตเด•เตเด•เตพเด•เตเด•เต เดฎเตเดฎเตเดชเต, เดฌเตเดฒเต‹เด•เตเด•เดฟเดจเตเดฑเต† เดตเดฒเตเดชเตเดชเด‚ 4-เดฌเตˆเดฑเตเดฑเต เดฒเดฟเดฑเตเดฑเดฟเตฝ-เดŽเตปเดกเดฟเดฏเตป เดฎเต‚เดฒเตเดฏเดฎเดพเดฏเดฟ เดŽเดดเตเดคเดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต.

เด‡เตปเดกเดธเตเดŸเตเดฐเดฟเดฏเตฝ เดจเดฟเตปเดœเดฏเตเดŸเต† เดšเตเดตเดŸเตเดชเดฟเดŸเดฟเดšเตเดšเต: เดชเต‹เดธเดฟเดฑเตเดฑเต€เดตเต เดนเดพเด•เตเด•เต เดกเต‡เดฏเตโ€Œเดธเต 9-เตฝ เด’เดฐเต PLC เดŽเด™เตเด™เดจเต† เดนเดพเด•เตเด•เต เดšเต†เดฏเตเดฏเดชเตเดชเต†เดŸเตเดŸเต

plc เดซเดฏเดฒเตเด•เดณเตเดŸเต† เด˜เดŸเดจเดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดตเดฟเดตเดฐเด™เตเด™เตพ เดžเด™เตเด™เตพเด•เตเด•เต เดฒเดญเดฟเดšเตเดšเดคเดฟเดจเต เดถเต‡เดทเด‚, PLC S7 เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เตพ เดตเดพเดฏเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดชเตเดฐเดตเตผเดคเตเดคเดจ เดชเดฆเตเดงเดคเดฟ เดชเตเดฐเดคเตเดฏเด•เตเดทเดชเตเดชเต†เดŸเตเดŸเต:

  1. เดธเดฟเดฎเดพเดฑเตเดฑเดฟเด•เต เดฎเดพเดจเต‡เดœเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, เดกเดฎเตเดชเดฟเตฝ เดจเดฟเดจเตเดจเต เดฒเดญเดฟเดšเตเดšเดคเดฟเดจเต เดธเดฎเดพเดจเดฎเดพเดฏเดฟ เดžเด™เตเด™เตพ S7-PlcSim-เตฝ เด’เดฐเต เดฌเตเดฒเต‹เด•เตเด•เต เด˜เดŸเดจ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต. เดฌเตเดฒเต‹เด•เตเด•เต เดตเดฒเตเดชเตเดชเด™เตเด™เตพ เดชเตŠเดฐเตเดคเตเดคเดชเตเดชเต†เดŸเดฃเด‚ (เด†เดตเดถเตเดฏเดฎเดพเดฏ เดŽเดฃเตเดฃเด‚ เดจเดฟเตผเดฆเตเดฆเต‡เดถเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดฌเตเดฒเต‹เด•เตเด•เตเด•เตพ เดชเต‚เดฐเดฟเดชเตเดชเดฟเดšเตเดšเต เด‡เดคเต เดจเต‡เดŸเตเดจเตเดจเต) เด…เดตเดฏเตเดŸเต† เดเดกเดจเตเดฑเดฟเดซเดฏเดฑเตเด•เดณเตเด‚ (OB1, FC1, FC2, FC3).
  2. PLC เด’เดฐเต เดซเดฏเดฒเดฟเดฒเต‡เด•เตเด•เต เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เตเด•.
  3. เดคเดคเตเดซเดฒเดฎเดพเดฏเตเดฃเตเดŸเดพเด•เตเดจเตเดจ เดซเดฏเดฒเดฟเดฒเต† เดฌเตเดฒเต‹เด•เตเด•เตเด•เดณเตเดŸเต† เด‰เดณเตเดณเดŸเด•เตเด•เด™เตเด™เตพ เดŸเตเดฐเดพเดซเดฟเด•เต เดกเดฎเตเดชเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดฌเตเดฒเต‹เด•เตเด•เตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดžเด™เตเด™เตพ เดฎเดพเดฑเตเดฑเดฟเดธเตเดฅเดพเดชเดฟเด•เตเด•เตเดจเตเดจเต. เดฌเตเดฒเต‹เด•เตเด•เตเด•เดณเตเดŸเต† เด†เดฐเด‚เดญเด‚ เดจเดฟเตผเดฃเตเดฃเดฏเดฟเด•เตเด•เตเดจเตเดจเดคเต เด’เดชเตเดชเต เด•เตŠเดฃเตเดŸเดพเดฃเต.
  4. เดคเดคเตเดซเดฒเดฎเดพเดฏเตเดฃเตเดŸเดพเด•เตเดจเตเดจ เดซเดฏเตฝ เดžเด™เตเด™เตพ 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 เด†เดฃเต.

เด‡เตปเดกเดธเตเดŸเตเดฐเดฟเดฏเตฝ เดจเดฟเตปเดœเดฏเตเดŸเต† เดšเตเดตเดŸเตเดชเดฟเดŸเดฟเดšเตเดšเต: เดชเต‹เดธเดฟเดฑเตเดฑเต€เดตเต เดนเดพเด•เตเด•เต เดกเต‡เดฏเตโ€Œเดธเต 9-เตฝ เด’เดฐเต PLC เดŽเด™เตเด™เดจเต† เดนเดพเด•เตเด•เต เดšเต†เดฏเตเดฏเดชเตเดชเต†เดŸเตเดŸเต

เดชเตเดฐเดถเตเดจเด‚ เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เดพเตป, เดจเดฟเด™เตเด™เตพ FC3 เดซเด‚เด—เตเดทเตป เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดŽเดจเตเดคเดพเดฃเต เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเต†เดจเตเดจเต เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเด•เตเด•เดฏเตเด‚ เดตเต‡เดฃเด‚, เด…เด™เตเด™เดจเต† เด…เดคเต เด’เดฐเต เดฒเต‹เดœเดฟเด•เตเด•เตฝ เด’เดจเตเดจเต เดจเตฝเด•เตเดจเตเดจเต.

เดฎเดคเตเดธเดฐ เดธเตˆเดฑเตเดฑเดฟเดฒเต† เดฒเต‹ เดธเต†เด•เตเดฏเต‚เดฐเดฟเดฑเตเดฑเดฟ เดธเตเดฑเตเดฑเดพเตปเดกเดฟเดฒเต† PLC เดธเดฟเด—เตเดจเตฝ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เต เดฌเตเดฒเต‹เด•เตเด•เตเด•เตพ เดธเดฎเดพเดจเดฎเดพเดฏ เดฐเต€เดคเดฟเดฏเดฟเตฝ เด•เตเดฐเดฎเต€เด•เดฐเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต, เดŽเดจเตเดจเดพเตฝ #TEMP0 เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเดฟเดจเตเดฑเต† เดฎเต‚เดฒเตเดฏเด‚ เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เดพเตป, DB1 เดฌเตเดฒเต‹เด•เตเด•เดฟเดฒเต‡เด•เตเด•เต เดฒเตˆเตป my ninja เดตเดดเดฟ เดŽเดดเตเดคเดฟเดฏเดพเตฝ เดฎเดคเดฟเดฏเดพเดฏเดฟเดฐเตเดจเตเดจเต. เด’เดฐเต เดฌเตเดฒเต‹เด•เตเด•เดฟเดฒเต† เดฎเต‚เดฒเตเดฏเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเต เดฒเดณเดฟเดคเดฎเดพเดฏเดฟเดฐเตเดจเตเดจเต เด•เต‚เดŸเดพเดคเต† เดฌเตเดฒเต‹เด•เตเด•เต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เต เดญเดพเดทเดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เด†เดดเดคเตเดคเดฟเดฒเตเดณเตเดณ เด…เดฑเดฟเดตเต เด†เดตเดถเตเดฏเดฎเดฟเดฒเตเดฒ. เดตเตเดฏเด•เตเดคเดฎเดพเดฏเตเด‚, เดนเตˆ เดธเต†เด•เตเดฏเต‚เดฐเดฟเดฑเตเดฑเดฟ เดคเดฒเดคเตเดคเดฟเตฝ, เดฎเดพเดจเตเดตเตฝ เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเด‚ เด•เตˆเดตเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต เดตเดณเดฐเต† เดฌเตเดฆเตเดงเดฟเดฎเตเดŸเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚ เด•เต‚เดŸเดพเดคเต† 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 เดญเดพเดทเดฏเตเดŸเต† เดตเดฟเดถเดฆเดฎเดพเดฏ เดจเดฟเตผเดฆเตเดฆเต‡เดถเด™เตเด™เดณเตเด‚ เด•เดดเดฟเดตเตเด•เดณเตเด‚ เด…เดจเตเดฌเดจเตเดง เดฎเดพเดจเตเดตเดฒเดฟเตฝ เด•เดพเดฃเดพเด‚: S7-300, S7-400 เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เดฟเดจเตเดณเตเดณ เดธเตเดฑเตเดฑเต‡เดฑเตเดฑเตโ€Œเดฎเต†เดจเตเดฑเต เดฒเดฟเดธเตเดฑเตเดฑเต (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

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•