Industrial Ninja-แƒก แƒ™แƒ•แƒแƒšแƒ“แƒแƒ™แƒ•แƒแƒš: แƒ แƒแƒ’แƒแƒ  แƒ’แƒแƒขแƒ”แƒฎแƒ”แƒก PLC Positive Hack Days 9-แƒ–แƒ”

Industrial Ninja-แƒก แƒ™แƒ•แƒแƒšแƒ“แƒแƒ™แƒ•แƒแƒš: แƒ แƒแƒ’แƒแƒ  แƒ’แƒแƒขแƒ”แƒฎแƒ”แƒก PLC Positive Hack Days 9-แƒ–แƒ”

แƒ‘แƒแƒšแƒ PhDays 9-แƒ–แƒ” แƒฉแƒแƒ•แƒแƒขแƒแƒ แƒ”แƒ— แƒ™แƒแƒœแƒ™แƒฃแƒ แƒกแƒ˜ แƒ’แƒแƒ–แƒ˜แƒก แƒกแƒแƒขแƒฃแƒ›แƒ‘แƒ˜ แƒฅแƒแƒ แƒฎแƒœแƒ˜แƒก แƒ’แƒแƒขแƒ”แƒฎแƒ•แƒ˜แƒก แƒ›แƒ˜แƒ–แƒœแƒ˜แƒ— - แƒ™แƒแƒœแƒ™แƒฃแƒ แƒกแƒ˜ แƒกแƒแƒ›แƒ แƒ”แƒฌแƒ•แƒ”แƒšแƒ แƒœแƒ˜แƒœแƒซแƒ. แƒแƒ“แƒ’แƒ˜แƒšแƒ–แƒ” แƒ˜แƒงแƒ แƒกแƒแƒ›แƒ˜ แƒกแƒขแƒ”แƒœแƒ“แƒ˜ แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ˜แƒก แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ˜แƒ— (แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”, แƒ“แƒแƒ‘แƒแƒšแƒ˜ แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ, แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ), แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ”แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ”แƒ‘แƒแƒ“แƒœแƒ”แƒœ แƒ˜แƒ›แƒแƒ•แƒ” แƒกแƒแƒ›แƒ แƒ”แƒฌแƒ•แƒ”แƒšแƒ แƒžแƒ แƒแƒชแƒ”แƒกแƒก: แƒฌแƒœแƒ”แƒ•แƒ˜แƒก แƒฅแƒ•แƒ”แƒจ แƒ›แƒงแƒแƒคแƒ˜ แƒฐแƒแƒ”แƒ แƒ˜ แƒฉแƒแƒ”แƒ“แƒ˜แƒœแƒ”แƒ‘แƒ แƒ‘แƒฃแƒจแƒขแƒจแƒ˜ (แƒ“แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ’แƒแƒ›แƒแƒฃแƒจแƒ•แƒ”แƒก).

แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒฃแƒฎแƒ”แƒ“แƒแƒ•แƒแƒ“, แƒกแƒแƒ“แƒ’แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒขแƒ”แƒฅแƒœแƒ˜แƒ™แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒ“แƒ’แƒ”แƒœแƒšแƒแƒ‘แƒ แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒ˜แƒงแƒ: Siemens Simatic PLC S7-300 แƒกแƒ”แƒ แƒ˜แƒ; แƒ’แƒแƒ“แƒแƒฃแƒ“แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ“แƒ”แƒคแƒšแƒแƒชแƒ˜แƒ˜แƒก แƒฆแƒ˜แƒšแƒแƒ™แƒ˜ แƒ“แƒ แƒฌแƒœแƒ”แƒ•แƒ˜แƒก แƒกแƒแƒ–แƒแƒ›แƒ˜ แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ (แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ PLC แƒชแƒ˜แƒคแƒ แƒฃแƒš แƒจแƒ”แƒงแƒ•แƒแƒœแƒ”แƒ‘แƒ—แƒแƒœ (DI)); แƒกแƒแƒ แƒฅแƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ”แƒœ แƒฐแƒแƒ”แƒ แƒ˜แƒก แƒ’แƒแƒ‘แƒ”แƒ แƒ•แƒ˜แƒกแƒ แƒ“แƒ แƒ“แƒ”แƒคแƒšแƒแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก (แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ PLC-แƒ˜แƒก แƒชแƒ˜แƒคแƒ แƒฃแƒš แƒ’แƒแƒ›แƒแƒกแƒแƒ•แƒแƒšแƒ—แƒแƒœ (DO)) - แƒ˜แƒฎแƒ˜แƒšแƒ”แƒ— แƒฅแƒ•แƒ”แƒ›แƒแƒ— แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜ แƒกแƒฃแƒ แƒแƒ—แƒ˜.

Industrial Ninja-แƒก แƒ™แƒ•แƒแƒšแƒ“แƒแƒ™แƒ•แƒแƒš: แƒ แƒแƒ’แƒแƒ  แƒ’แƒแƒขแƒ”แƒฎแƒ”แƒก PLC Positive Hack Days 9-แƒ–แƒ”

PLC-แƒ›, แƒฌแƒœแƒ”แƒ•แƒ˜แƒก แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— แƒ“แƒ แƒ—แƒแƒ•แƒ˜แƒกแƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒแƒ“, แƒ›แƒ˜แƒ˜แƒฆแƒ แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒšแƒ”แƒ‘แƒ แƒ‘แƒฃแƒ แƒ—แƒ˜แƒก แƒ’แƒแƒคแƒฃแƒญแƒ”แƒ‘แƒ˜แƒก แƒแƒœ แƒ’แƒแƒ‘แƒ”แƒ แƒ•แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ (แƒ’แƒแƒฎแƒกแƒœแƒ แƒ“แƒ แƒ“แƒแƒฎแƒฃแƒ แƒ แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒ˜ แƒกแƒแƒ แƒฅแƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜). แƒแƒ›แƒแƒกแƒ—แƒแƒœ, แƒงแƒ•แƒ”แƒšแƒ แƒกแƒขแƒ”แƒœแƒ“แƒก แƒฐแƒฅแƒแƒœแƒ“แƒ แƒฎแƒ”แƒšแƒ˜แƒ— แƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒก แƒ แƒ”แƒŸแƒ˜แƒ›แƒ˜, แƒ แƒแƒ›แƒแƒช แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ’แƒแƒฎแƒแƒ“แƒ แƒกแƒแƒ แƒฅแƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒ˜แƒก แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ˜ แƒงแƒแƒ•แƒ”แƒšแƒ’แƒ•แƒแƒ แƒ˜ แƒจแƒ”แƒ–แƒฆแƒฃแƒ“แƒ•แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”.

แƒกแƒขแƒ”แƒœแƒ“แƒ”แƒ‘แƒ˜ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ“แƒ”แƒ‘แƒแƒ“แƒœแƒ”แƒœ แƒแƒ› แƒ แƒ”แƒŸแƒ˜แƒ›แƒ˜แƒก แƒฉแƒแƒ แƒ—แƒ•แƒ˜แƒก แƒกแƒ˜แƒ แƒ—แƒฃแƒšแƒ˜แƒ—: แƒ“แƒแƒฃแƒชแƒ•แƒ”แƒš แƒกแƒขแƒ”แƒœแƒ“แƒ–แƒ” แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒ˜แƒงแƒ, แƒฎแƒแƒšแƒ แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ˜แƒก แƒกแƒขแƒ”แƒœแƒ“แƒ–แƒ” แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒแƒ“ แƒฃแƒคแƒ แƒ แƒ แƒ—แƒฃแƒšแƒ˜.

แƒ”แƒฅแƒ•แƒกแƒ˜แƒ“แƒแƒœ แƒฎแƒฃแƒ—แƒ˜ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ แƒแƒ  แƒ“แƒฆแƒ”แƒจแƒ˜ แƒ›แƒแƒ’แƒ•แƒแƒ แƒ“แƒ; แƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒแƒ“แƒ’แƒ˜แƒšแƒ–แƒ” แƒ’แƒแƒกแƒฃแƒšแƒ›แƒ 233 แƒฅแƒฃแƒšแƒ แƒ“แƒแƒแƒ’แƒ แƒแƒ•แƒ (แƒ”แƒ แƒ—แƒ˜ แƒ™แƒ•แƒ˜แƒ แƒ แƒ”แƒ›แƒ–แƒแƒ“แƒ”แƒ‘แƒแƒ“แƒ แƒ™แƒแƒœแƒ™แƒฃแƒ แƒกแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก). แƒกแƒแƒ›แƒ˜ แƒ’แƒแƒ›แƒแƒ แƒฏแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜: I แƒแƒ“แƒ’แƒ˜แƒšแƒ˜ - a1exdandy, II - แƒ แƒฃแƒ‘แƒ˜แƒ™แƒแƒ˜แƒ“แƒ˜, III - แƒ–แƒ”.

แƒ—แƒฃแƒ›แƒชแƒ, PhDdays-แƒ–แƒ” แƒ•แƒ”แƒ แƒชแƒ”แƒ แƒ—แƒ›แƒ แƒ›แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ› แƒ•แƒ”แƒ  แƒจแƒ”แƒซแƒšแƒ แƒกแƒแƒ›แƒ˜แƒ•แƒ” แƒกแƒขแƒ”แƒœแƒ“แƒ˜แƒก แƒ’แƒแƒ“แƒแƒšแƒแƒฎแƒ•แƒ, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ”แƒ— แƒแƒœแƒšแƒแƒ˜แƒœ แƒ™แƒแƒœแƒ™แƒฃแƒ แƒกแƒ˜ แƒ’แƒแƒ’แƒ•แƒ”แƒ™แƒ”แƒ—แƒ”แƒ‘แƒ˜แƒœแƒ แƒ“แƒ แƒฃแƒ แƒ—แƒฃแƒšแƒ”แƒกแƒ˜ แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒ•แƒแƒฅแƒ•แƒ”แƒงแƒœแƒ”แƒ— แƒ˜แƒ•แƒœแƒ˜แƒกแƒ˜แƒก แƒ“แƒแƒกแƒแƒฌแƒงแƒ˜แƒกแƒจแƒ˜. แƒ›แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ”แƒ‘แƒก แƒ”แƒ แƒ—แƒ˜ แƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒœแƒ›แƒแƒ•แƒšแƒแƒ‘แƒแƒจแƒ˜ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒœแƒแƒ— แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ, แƒ›แƒแƒ”แƒžแƒแƒ•แƒ”แƒ‘แƒ˜แƒœแƒแƒ— แƒ“แƒ แƒแƒจแƒ แƒ“แƒ แƒแƒ›แƒแƒฎแƒกแƒœแƒแƒก แƒ“แƒ”แƒขแƒแƒšแƒฃแƒ แƒแƒ“ แƒ“แƒ แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒแƒ“ แƒแƒฆแƒ”แƒฌแƒ”แƒ แƒแƒ—.

แƒญแƒ แƒ˜แƒšแƒ˜แƒก แƒฅแƒ•แƒ”แƒ›แƒแƒ— แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒฅแƒ•แƒ”แƒงแƒœแƒ”แƒ‘แƒ— แƒแƒœแƒแƒšแƒ˜แƒ–แƒก แƒแƒ›แƒแƒชแƒแƒœแƒ˜แƒก แƒกแƒแƒฃแƒ™แƒ”แƒ—แƒ”แƒกแƒ แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒš แƒ˜แƒฅแƒœแƒ แƒ”แƒ แƒ—แƒ˜ แƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒœแƒ›แƒแƒ•แƒšแƒแƒ‘แƒแƒจแƒ˜, แƒ˜แƒก แƒแƒฆแƒ›แƒแƒแƒฉแƒ˜แƒœแƒ แƒแƒšแƒ”แƒฅแƒกแƒ”แƒ˜ แƒ™แƒแƒ•แƒ แƒ˜แƒŸแƒœแƒ˜แƒฎแƒ›แƒ (a1exdandy) แƒชแƒ˜แƒคแƒ แƒฃแƒšแƒ˜ แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒ›แƒžแƒแƒœแƒ˜แƒ˜แƒกแƒ’แƒแƒœ, แƒ แƒแƒ›แƒ”แƒšแƒ›แƒแƒช แƒ“แƒแƒ˜แƒ™แƒแƒ•แƒ XNUMX แƒแƒ“แƒ’แƒ˜แƒšแƒ˜ แƒ™แƒแƒœแƒ™แƒฃแƒ แƒกแƒจแƒ˜ PhDays-แƒ˜แƒก แƒ’แƒแƒœแƒ›แƒแƒ•แƒšแƒแƒ‘แƒแƒจแƒ˜. แƒฅแƒ•แƒ”แƒ›แƒแƒ— แƒฌแƒแƒ แƒ›แƒแƒ’แƒ˜แƒ“แƒ’แƒ”แƒœแƒ— แƒ›แƒ˜แƒก แƒขแƒ”แƒฅแƒกแƒขแƒก แƒฉแƒ•แƒ”แƒœแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ”แƒ‘แƒ˜แƒ—.

แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒแƒ“แƒ˜ แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜

แƒแƒกแƒ” แƒ แƒแƒ›, แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒ“แƒ แƒแƒ แƒฅแƒ˜แƒ•แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒ—:

  • block_upload_traffic.pcapng
  • DB100.bin
  • แƒ›แƒ˜แƒœแƒ˜แƒจแƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜.txt

hints.txt แƒคแƒแƒ˜แƒšแƒ˜ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒแƒฃแƒชแƒ˜แƒšแƒ”แƒ‘แƒ”แƒš แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒแƒก แƒ“แƒ แƒ›แƒ˜แƒœแƒ˜แƒจแƒœแƒ”แƒ‘แƒ”แƒ‘แƒก แƒแƒ›แƒแƒชแƒแƒœแƒ˜แƒก แƒ’แƒแƒ“แƒแƒกแƒแƒญแƒ แƒ”แƒšแƒแƒ“. แƒแƒฅ แƒแƒ แƒ˜แƒก แƒ›แƒ˜แƒกแƒ˜ แƒจแƒ˜แƒœแƒแƒแƒ แƒกแƒ˜:

  1. แƒžแƒ”แƒขแƒ แƒแƒ•แƒ˜แƒฉแƒ›แƒ แƒ’แƒฃแƒจแƒ˜แƒœ แƒ›แƒ˜แƒ—แƒฎแƒ แƒ, แƒ แƒแƒ› แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ‘แƒšแƒแƒ™แƒ”แƒ‘แƒ˜แƒก แƒฉแƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ PlcSim-แƒ“แƒแƒœ Step7-แƒจแƒ˜.
  2. แƒกแƒขแƒ”แƒœแƒ“แƒ–แƒ” แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒงแƒ Siemens Simatic S7-300 แƒกแƒ”แƒ แƒ˜แƒ˜แƒก PLC.
  3. PlcSim แƒแƒ แƒ˜แƒก PLC แƒ”แƒ›แƒฃแƒšแƒแƒขแƒแƒ แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒ’แƒแƒฃแƒจแƒ•แƒแƒ— แƒ“แƒ แƒ’แƒแƒ›แƒแƒ แƒ—แƒแƒ— แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ˜ Siemens S7 PLC-แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

DB100.bin แƒคแƒแƒ˜แƒšแƒ˜, แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒแƒœแƒก, แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก DB100 PLC แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒšแƒแƒ™แƒก: 00000000: 0100 0102 6e02 0401 0206 0100 0101 0102 ....n......... 00000010: 1002 0501 0202 . ..... ......... 2002: 0501 0206 0100 0102 00000020 0102 7702 0401a0206 ..w............. 0100: 0103 0102 0 02 00000030 0501 ................ 0202: 1602 0501 0206 0100 0104 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 ......... 00000090. .... 0501A0206: 0100 010B 0102 3702 0401 0206 7 000000 ......".....F... 0b0100: 010 0102 2202c 0501 0202 4602 0501 000000 ........0. ...... 0206c 0100 010d 0102 3302a0401 0206 0100 3 000000 0 ................ 010d0102: 0 02e 0501 0202d1602 0501 0206 000000 0f ......แƒ› .... 0100e010: 0102 6 02 0401 0206 0100 010 000000 ........#...... 0f0102: 1102 0501 0202 2302 0501 0206 0100 ......... 000000: 0 0110 0102 3502 0401 0206 0100 0111 ......%......... 0102: 5 00000100 1202 0501 0202 2502 ....... .&. 0501: 0206 0100 0112c00000110 0102 3302 0401 ....แƒš......

แƒ แƒแƒ’แƒแƒ แƒช แƒกแƒแƒฎแƒ”แƒšแƒ˜ แƒ’แƒ•แƒ—แƒแƒ•แƒแƒ–แƒแƒ‘แƒก, block_upload_traffic.pcapng แƒคแƒแƒ˜แƒšแƒ˜ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก PLC-แƒ–แƒ” แƒ‘แƒšแƒแƒ™แƒ˜แƒก แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒขแƒ แƒแƒคแƒ˜แƒ™แƒ˜แƒก แƒœแƒแƒ’แƒแƒ•แƒกแƒแƒงแƒ แƒ”แƒšแƒก.

แƒแƒฆแƒกแƒแƒœแƒ˜แƒจแƒœแƒแƒ•แƒ˜แƒ, แƒ แƒแƒ› แƒ™แƒแƒœแƒคแƒ”แƒ แƒ”แƒœแƒชแƒ˜แƒ˜แƒก แƒ“แƒ แƒแƒก แƒ™แƒแƒœแƒ™แƒฃแƒ แƒกแƒ˜แƒก แƒแƒ“แƒ’แƒ˜แƒšแƒ–แƒ” แƒแƒ› แƒขแƒ แƒแƒคแƒ˜แƒ™แƒ˜แƒก แƒ›แƒแƒžแƒแƒ•แƒ”แƒ‘แƒ แƒชแƒแƒขแƒ แƒฃแƒคแƒ แƒ แƒ แƒ—แƒฃแƒšแƒ˜ แƒ˜แƒงแƒ. แƒแƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒ แƒ˜แƒงแƒ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜แƒก แƒ’แƒแƒ’แƒ”แƒ‘แƒ TeslaSCADA2-แƒ˜แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ˜แƒ“แƒแƒœ. แƒ›แƒ˜แƒกแƒ’แƒแƒœ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ’แƒแƒฎแƒ“แƒ แƒ˜แƒ›แƒ˜แƒก แƒ’แƒแƒ’แƒ”แƒ‘แƒ, แƒ—แƒฃ แƒกแƒแƒ“ แƒ›แƒ“แƒ”แƒ‘แƒแƒ แƒ”แƒแƒ‘แƒ“แƒ RC4-แƒ˜แƒ— แƒ“แƒแƒจแƒ˜แƒคแƒ แƒฃแƒšแƒ˜ แƒœแƒแƒ’แƒแƒ•แƒกแƒแƒงแƒ แƒ”แƒšแƒ˜ แƒ“แƒ แƒ แƒ แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ˜แƒงแƒ แƒกแƒแƒญแƒ˜แƒ แƒ แƒ›แƒ˜แƒก แƒ’แƒแƒกแƒแƒจแƒ˜แƒคแƒ แƒแƒ“. แƒแƒ“แƒ’แƒ˜แƒšแƒ–แƒ” แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒšแƒแƒ™แƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒ’แƒแƒ•แƒกแƒแƒงแƒ แƒ”แƒšแƒ˜แƒก แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ S7 แƒžแƒ แƒแƒขแƒแƒ™แƒแƒšแƒ˜แƒก แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒแƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒ” แƒ“แƒ”แƒ›แƒ แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜ Snap7 แƒžแƒแƒ™แƒ”แƒขแƒ˜แƒ“แƒแƒœ.

แƒกแƒ˜แƒ’แƒœแƒแƒšแƒ˜แƒก แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ˜แƒก แƒ‘แƒšแƒแƒ™แƒ”แƒ‘แƒ˜แƒก แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒ แƒกแƒแƒ’แƒ–แƒแƒ แƒœแƒแƒ’แƒแƒ•แƒกแƒแƒงแƒ แƒ”แƒšแƒ˜แƒ“แƒแƒœ

แƒœแƒแƒ’แƒแƒ•แƒกแƒแƒงแƒ แƒ”แƒšแƒ˜แƒก แƒจแƒ˜แƒœแƒแƒแƒ แƒกแƒ˜แƒก แƒ“แƒแƒ—แƒ•แƒแƒšแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒกแƒแƒก แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒ˜แƒ’แƒแƒ—, แƒ แƒแƒ› แƒ˜แƒก แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒกแƒ˜แƒ’แƒœแƒแƒšแƒ˜แƒก แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ˜แƒก แƒ‘แƒšแƒแƒ™แƒ”แƒ‘แƒก OB1, FC1, FC2 แƒ“แƒ FC3:

Industrial Ninja-แƒก แƒ™แƒ•แƒแƒšแƒ“แƒแƒ™แƒ•แƒแƒš: แƒ แƒแƒ’แƒแƒ  แƒ’แƒแƒขแƒ”แƒฎแƒ”แƒก PLC Positive Hack Days 9-แƒ–แƒ”

แƒ”แƒก แƒ‘แƒšแƒแƒ™แƒ”แƒ‘แƒ˜ แƒฃแƒœแƒ“แƒ แƒ›แƒแƒ˜แƒฎแƒกแƒœแƒแƒก. แƒ”แƒก แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ™แƒ”แƒ—แƒ“แƒ”แƒก, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜แƒ—, แƒแƒ“แƒ แƒ” แƒ’แƒแƒ“แƒแƒงแƒ•แƒแƒœแƒ˜แƒšแƒ˜ แƒขแƒ แƒแƒคแƒ˜แƒ™แƒ˜ pcapng แƒคแƒแƒ แƒ›แƒแƒขแƒ˜แƒ“แƒแƒœ pcap-แƒจแƒ˜:

#!/usr/bin/env python2

import struct
from scapy.all import *

packets = rdpcap('block_upload_traffic.pcap')
s7_hdr_struct = '>BBHHHHBB'
s7_hdr_sz = struct.calcsize(s7_hdr_struct)
tpkt_cotp_sz = 7
names = iter(['OB1.bin', 'FC1.bin', 'FC2.bin', 'FC3.bin'])
buf = ''

for packet in packets:
    if packet.getlayer(IP).src == '10.0.102.11':
        tpkt_cotp_s7 = str(packet.getlayer(TCP).payload)
        if len(tpkt_cotp_s7) < tpkt_cotp_sz + s7_hdr_sz:
            continue
        s7 = tpkt_cotp_s7[tpkt_cotp_sz:]
        s7_hdr = s7[:s7_hdr_sz]
        param_sz = struct.unpack(s7_hdr_struct, s7_hdr)[4]
        s7_param = s7[12:12+param_sz]
        s7_data = s7[12+param_sz:]
        if s7_param in ('x1ex00', 'x1ex01'):  # upload
            buf += s7_data[4:]
        elif s7_param == 'x1f':
            with open(next(names), 'wb') as f:
                f.write(buf)
            buf = ''

แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ‘แƒšแƒแƒ™แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒฌแƒแƒ•แƒšแƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒจแƒ”แƒแƒ›แƒฉแƒœแƒ”แƒ•แƒ—, แƒ แƒแƒ› แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒ˜แƒฌแƒงแƒ”แƒ‘แƒ 70 70 แƒ‘แƒแƒ˜แƒขแƒ˜แƒ— (pp). แƒแƒฎแƒšแƒ แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ˜แƒกแƒฌแƒแƒ•แƒšแƒแƒ— แƒ แƒแƒ’แƒแƒ  แƒ’แƒแƒแƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒ— แƒ˜แƒกแƒ˜แƒœแƒ˜. แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒœแƒ˜แƒจแƒœแƒ”แƒ‘แƒ แƒ•แƒแƒ แƒแƒฃแƒ“แƒแƒ‘แƒก, แƒ แƒแƒ› แƒแƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒแƒ PlcSim-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ.

แƒแƒ“แƒแƒ›แƒ˜แƒแƒœแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒฌแƒแƒกแƒแƒ™แƒ˜แƒ—แƒฎแƒ˜ แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒ แƒ‘แƒšแƒแƒ™แƒ”แƒ‘แƒ˜แƒ“แƒแƒœ

แƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒ แƒ˜แƒ’แƒจแƒ˜, แƒ›แƒแƒ“แƒ˜แƒ— แƒ•แƒชแƒแƒ“แƒแƒ— S7-PlcSim-แƒ˜แƒก แƒ“แƒแƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ‘แƒšแƒแƒ™แƒ˜แƒก แƒฉแƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒ— แƒ›แƒแƒกแƒจแƒ˜ แƒ’แƒแƒœแƒ›แƒ”แƒแƒ แƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒ— (= Q 0.0) Simatic Manager แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒฃแƒšแƒ˜ แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— แƒ“แƒ แƒ”แƒ›แƒฃแƒšแƒแƒขแƒแƒ แƒจแƒ˜ แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ PLC-แƒ˜แƒก แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ˜แƒ— example.plc แƒคแƒแƒ˜แƒšแƒจแƒ˜. แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒจแƒ˜แƒœแƒแƒแƒ แƒกแƒ˜แƒก แƒ“แƒแƒ—แƒ•แƒแƒšแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒ—, แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒแƒ“ แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒ— แƒ’แƒแƒ“แƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒ‘แƒšแƒแƒ™แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒกแƒแƒฌแƒงแƒ˜แƒกแƒ˜ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒ— 70 70, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ“แƒ แƒ” แƒแƒฆแƒ›แƒแƒ•แƒแƒฉแƒ˜แƒœแƒ”แƒ—. แƒ‘แƒšแƒแƒ™แƒ”แƒ‘แƒ˜แƒก แƒฌแƒ˜แƒœ, แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒแƒœแƒก, แƒ‘แƒšแƒแƒ™แƒ˜แƒก แƒ–แƒแƒ›แƒ แƒ˜แƒฌแƒ”แƒ แƒ”แƒ‘แƒ, แƒ แƒแƒ’แƒแƒ แƒช 4 แƒ‘แƒแƒ˜แƒขแƒ˜ แƒžแƒแƒขแƒแƒ แƒ แƒ”แƒœแƒ“แƒ˜แƒแƒœแƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ.

Industrial Ninja-แƒก แƒ™แƒ•แƒแƒšแƒ“แƒแƒ™แƒ•แƒแƒš: แƒ แƒแƒ’แƒแƒ  แƒ’แƒแƒขแƒ”แƒฎแƒ”แƒก PLC Positive Hack Days 9-แƒ–แƒ”

แƒ›แƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ แƒแƒช แƒ›แƒ˜แƒ•แƒ˜แƒฆแƒ”แƒ— แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ plc แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒ’แƒแƒ›แƒแƒฉแƒœแƒ“แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒกแƒแƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ แƒ’แƒ”แƒ’แƒ›แƒ PLC S7 แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒฌแƒแƒกแƒแƒ™แƒ˜แƒ—แƒฎแƒแƒ“:

  1. Simatic Manager-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—, แƒฉแƒ•แƒ”แƒœ แƒ•แƒฅแƒ›แƒœแƒ˜แƒ— แƒ‘แƒšแƒแƒ™แƒ˜แƒก แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒแƒก S7-PlcSim-แƒจแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜แƒ แƒœแƒแƒ’แƒแƒ•แƒกแƒแƒงแƒ แƒ”แƒšแƒ˜แƒ“แƒแƒœ. แƒ‘แƒšแƒแƒ™แƒ˜แƒก แƒ–แƒแƒ›แƒ”แƒ‘แƒ˜ แƒฃแƒœแƒ“แƒ แƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒแƒ“แƒ”แƒก (แƒ”แƒก แƒ›แƒ˜แƒ˜แƒฆแƒฌแƒ”แƒ•แƒ แƒ‘แƒšแƒแƒ™แƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒ— แƒจแƒ”แƒ•แƒกแƒ”แƒ‘แƒ˜แƒ—) แƒ“แƒ แƒ›แƒแƒ— แƒ˜แƒ“แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒแƒ แƒ”แƒ‘แƒก (OB1, FC1, FC2, FC3).
  2. แƒจแƒ”แƒ˜แƒœแƒแƒฎแƒ”แƒ— PLC แƒคแƒแƒ˜แƒšแƒจแƒ˜.
  3. แƒฉแƒ•แƒ”แƒœ แƒ•แƒชแƒ•แƒšแƒ˜แƒ— แƒ‘แƒšแƒแƒ™แƒ”แƒ‘แƒ˜แƒก แƒจแƒ˜แƒ’แƒ—แƒแƒ•แƒกแƒก แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒš แƒคแƒแƒ˜แƒšแƒจแƒ˜ แƒขแƒ แƒแƒคแƒ˜แƒ™แƒ˜แƒก แƒœแƒแƒ’แƒแƒ•แƒกแƒแƒงแƒ แƒ”แƒšแƒ˜แƒก แƒ‘แƒšแƒแƒ™แƒ”แƒ‘แƒ˜แƒ—. แƒ‘แƒšแƒแƒ™แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒกแƒแƒฌแƒงแƒ˜แƒกแƒ˜ แƒ’แƒแƒœแƒ˜แƒกแƒแƒ–แƒฆแƒ•แƒ แƒ”แƒ‘แƒ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒ—.
  4. แƒฉแƒ•แƒ”แƒœ แƒ•แƒขแƒ•แƒ˜แƒ แƒ—แƒแƒ•แƒ— แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“ แƒคแƒแƒ˜แƒšแƒก S7-PlcSim-แƒจแƒ˜ แƒ“แƒ แƒ•แƒฃแƒงแƒฃแƒ แƒ”แƒ‘แƒ— แƒ‘แƒšแƒแƒ™แƒ”แƒ‘แƒ˜แƒก แƒจแƒ˜แƒœแƒแƒแƒ แƒกแƒก Simatic Manager-แƒจแƒ˜.

แƒ‘แƒšแƒแƒ™แƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒจแƒ”แƒ˜แƒชแƒ•แƒแƒšแƒแƒก, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒ™แƒแƒ“แƒ˜แƒ—:

with open('original.plc', 'rb') as f:
    plc = f.read()
blocks = []
for fname in ['OB1.bin', 'FC1.bin', 'FC2.bin', 'FC3.bin']:
    with open(fname, 'rb') as f:
        blocks.append(f.read())

i = plc.find(b'pp')
for block in blocks:
    plc = plc[:i] + block + plc[i+len(block):]
    i = plc.find(b'pp', i + 1)

with open('target.plc', 'wb') as f:
    f.write(plc)

แƒแƒšแƒ”แƒฅแƒกแƒ˜แƒ› แƒแƒšแƒ‘แƒแƒ— แƒฃแƒคแƒ แƒ แƒ แƒ—แƒฃแƒšแƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒแƒ˜แƒœแƒช แƒกแƒฌแƒแƒ แƒ˜ แƒ’แƒ–แƒ แƒแƒ˜แƒฆแƒ. แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒ•แƒแƒ แƒแƒฃแƒ“แƒ”แƒ—, แƒ แƒแƒ› แƒ›แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ”แƒ‘แƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ“แƒœแƒ”แƒœ NetToPlcSim แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒแƒก, แƒ แƒแƒ—แƒ PlcSim-แƒก แƒจแƒ”แƒ”แƒซแƒšแƒ แƒ“แƒแƒฃแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ“แƒ”แƒก แƒฅแƒกแƒ”แƒšแƒจแƒ˜, แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ แƒ‘แƒšแƒแƒ™แƒ”แƒ‘แƒ˜ PlcSim-แƒจแƒ˜ Snap7-แƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ— แƒ“แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒฉแƒแƒ›แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒแƒœ แƒ”แƒก แƒ‘แƒšแƒแƒ™แƒ”แƒ‘แƒ˜, แƒ แƒแƒ’แƒแƒ แƒช แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ PlcSim-แƒ“แƒแƒœ แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒ›แƒแƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—.

S7-PlcSim-แƒจแƒ˜ แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒ’แƒแƒฎแƒกแƒœแƒ˜แƒ—, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒฌแƒแƒ˜แƒ™แƒ˜แƒ—แƒฎแƒแƒ— แƒ’แƒแƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒ‘แƒšแƒแƒ™แƒ”แƒ‘แƒ˜ Simatic แƒ›แƒ”แƒœแƒ”แƒฏแƒ”แƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ˜แƒก แƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒก แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒฉแƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜แƒ แƒ‘แƒšแƒแƒ™แƒจแƒ˜ FC1. แƒ’แƒแƒœแƒกแƒแƒ™แƒฃแƒ—แƒ แƒ”แƒ‘แƒ˜แƒ— แƒกแƒแƒงแƒฃแƒ แƒแƒ“แƒฆแƒ”แƒ‘แƒแƒ #TEMP0 แƒชแƒ•แƒšแƒแƒ“แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฉแƒแƒ แƒ—แƒ•แƒ˜แƒกแƒแƒก, แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒแƒœแƒก, แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒก PLC แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒก แƒฎแƒ”แƒšแƒ˜แƒ— แƒ แƒ”แƒŸแƒ˜แƒ›แƒจแƒ˜ M2.2 แƒ“แƒ M2.3 แƒ‘แƒ˜แƒขแƒ˜แƒแƒœแƒ˜ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ–แƒ” แƒ“แƒแƒงแƒ แƒ“แƒœแƒแƒ‘แƒ˜แƒ—. #TEMP0 แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ FC3 แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒ—.

Industrial Ninja-แƒก แƒ™แƒ•แƒแƒšแƒ“แƒแƒ™แƒ•แƒแƒš: แƒ แƒแƒ’แƒแƒ  แƒ’แƒแƒขแƒ”แƒฎแƒ”แƒก PLC Positive Hack Days 9-แƒ–แƒ”

แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ˜แƒก แƒ’แƒแƒ“แƒแƒกแƒแƒญแƒ แƒ”แƒšแƒแƒ“, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒแƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒ— FC3 แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒ“แƒ แƒ’แƒแƒ˜แƒ’แƒแƒ—, แƒ แƒ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ™แƒ”แƒ—แƒ“แƒ”แƒก แƒ˜แƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ› แƒ˜แƒก แƒ“แƒแƒฃแƒ‘แƒ แƒฃแƒœแƒ“แƒ”แƒก แƒšแƒแƒ’แƒ˜แƒ™แƒฃแƒ แƒก.

แƒ™แƒแƒœแƒ™แƒฃแƒ แƒกแƒ˜แƒก แƒแƒ“แƒ’แƒ˜แƒšแƒ–แƒ” แƒ“แƒแƒ‘แƒแƒšแƒ˜ แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ˜แƒก แƒกแƒขแƒ”แƒœแƒ“แƒ–แƒ” PLC แƒกแƒ˜แƒ’แƒœแƒแƒšแƒ˜แƒก แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ˜แƒก แƒ‘แƒšแƒแƒ™แƒ”แƒ‘แƒ˜ แƒแƒœแƒแƒšแƒแƒ’แƒ˜แƒฃแƒ แƒแƒ“ แƒ˜แƒงแƒ แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› #TEMP0 แƒชแƒ•แƒšแƒแƒ“แƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ˜แƒก แƒ“แƒแƒกแƒแƒงแƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ“ แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜ แƒ˜แƒงแƒ แƒฎแƒแƒ–แƒ˜แƒก my ninja way แƒฉแƒแƒฌแƒ”แƒ แƒ DB1 แƒ‘แƒšแƒแƒ™แƒจแƒ˜. แƒ‘แƒšแƒแƒ™แƒจแƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒ˜แƒงแƒ แƒ“แƒ แƒแƒ  แƒ›แƒแƒ˜แƒ—แƒฎแƒแƒ•แƒ“แƒ แƒ‘แƒšแƒแƒ™แƒ˜แƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ”แƒœแƒ˜แƒก แƒฆแƒ แƒ›แƒ แƒชแƒแƒ“แƒœแƒแƒก. แƒชแƒฎแƒแƒ“แƒ˜แƒ, แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒœแƒ”แƒ–แƒ”, แƒฎแƒ”แƒšแƒ˜แƒ— แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ˜แƒก แƒ›แƒ˜แƒฆแƒฌแƒ”แƒ•แƒ แƒ’แƒแƒชแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒ— แƒ แƒ—แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ“แƒ แƒแƒฃแƒชแƒ˜แƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ STL แƒ”แƒœแƒ˜แƒก แƒกแƒ˜แƒ แƒ—แƒฃแƒšแƒ”แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ’แƒ”แƒ‘แƒ (S7 PLC-แƒ˜แƒก แƒ“แƒแƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒ”แƒ แƒ—-แƒ”แƒ แƒ—แƒ˜ แƒ’แƒ–แƒ).

แƒฃแƒ™แƒฃ แƒ‘แƒšแƒแƒ™แƒ˜ FC3

FC3 แƒ‘แƒšแƒแƒ™แƒ˜แƒก แƒจแƒ˜แƒœแƒแƒแƒ แƒกแƒ˜ STL แƒฌแƒแƒ แƒ›แƒแƒ›แƒแƒ“แƒ’แƒ”แƒœแƒšแƒแƒ‘แƒแƒจแƒ˜:

      L     B#16#0
      T     #TEMP13
      T     #TEMP15
      L     P#DBX 0.0
      T     #TEMP4
      CLR   
      =     #TEMP14
M015: L     #TEMP4
      LAR1  
      OPN   DB   100
      L     DBLG
      TAR1  
      <=D   
      JC    M016
      L     DW#16#0
      T     #TEMP0
      L     #TEMP6
      L     W#16#0
      <>I   
      JC    M00d
      L     P#DBX 0.0
      LAR1  
M00d: L     B [AR1,P#0.0]
      T     #TEMP5
      L     W#16#1
      ==I   
      JC    M007
      L     #TEMP5
      L     W#16#2
      ==I   
      JC    M008
      L     #TEMP5
      L     W#16#3
      ==I   
      JC    M00f
      L     #TEMP5
      L     W#16#4
      ==I   
      JC    M00e
      L     #TEMP5
      L     W#16#5
      ==I   
      JC    M011
      L     #TEMP5
      L     W#16#6
      ==I   
      JC    M012
      JU    M010
M007: +AR1  P#1.0
      L     P#DBX 0.0
      LAR2  
      L     B [AR1,P#0.0]
      L     C#8
      *I    
      +AR2  
      +AR1  P#1.0
      L     B [AR1,P#0.0]
      JL    M003
      JU    M001
      JU    M002
      JU    M004
M003: JU    M005
M001: OPN   DB   101
      L     B [AR2,P#0.0]
      T     #TEMP0
      JU    M006
M002: OPN   DB   101
      L     B [AR2,P#0.0]
      T     #TEMP1
      JU    M006
M004: OPN   DB   101
      L     B [AR2,P#0.0]
      T     #TEMP2
      JU    M006
M00f: +AR1  P#1.0
      L     B [AR1,P#0.0]
      L     C#8
      *I    
      T     #TEMP11
      +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP7
      L     P#M 100.0
      LAR2  
      L     #TEMP7
      L     C#8
      *I    
      +AR2  
      TAR2  #TEMP9
      TAR1  #TEMP4
      OPN   DB   101
      L     P#DBX 0.0
      LAR1  
      L     #TEMP11
      +AR1  
      LAR2  #TEMP9
      L     B [AR2,P#0.0]
      T     B [AR1,P#0.0]
      L     #TEMP4
      LAR1  
      JU    M006
M008: +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP3
      +AR1  P#1.0
      L     B [AR1,P#0.0]
      JL    M009
      JU    M00b
      JU    M00a
      JU    M00c
M009: JU    M005
M00b: L     #TEMP3
      T     #TEMP0
      JU    M006
M00a: L     #TEMP3
      T     #TEMP1
      JU    M006
M00c: L     #TEMP3
      T     #TEMP2
      JU    M006
M00e: +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP7
      L     P#M 100.0
      LAR2  
      L     #TEMP7
      L     C#8
      *I    
      +AR2  
      TAR2  #TEMP9
      +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP8
      L     P#M 100.0
      LAR2  
      L     #TEMP8
      L     C#8
      *I    
      +AR2  
      TAR2  #TEMP10
      TAR1  #TEMP4
      LAR1  #TEMP9
      LAR2  #TEMP10
      L     B [AR1,P#0.0]
      L     B [AR2,P#0.0]
      AW    
      INVI  
      T     #TEMP12
      L     B [AR1,P#0.0]
      L     B [AR2,P#0.0]
      OW    
      L     #TEMP12
      AW    
      T     B [AR1,P#0.0]
      L     DW#16#0
      T     #TEMP0
      L     MB   101
      T     #TEMP1
      L     MB   102
      T     #TEMP2
      L     #TEMP4
      LAR1  
      JU    M006
M011: +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP7
      L     P#M 100.0
      LAR2  
      L     #TEMP7
      L     C#8
      *I    
      +AR2  
      TAR2  #TEMP9
      +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP8
      L     P#M 100.0
      LAR2  
      L     #TEMP8
      L     C#8
      *I    
      +AR2  
      TAR2  #TEMP10
      TAR1  #TEMP4
      LAR1  #TEMP9
      LAR2  #TEMP10
      L     B [AR1,P#0.0]
      L     B [AR2,P#0.0]
      -I    
      T     B [AR1,P#0.0]
      L     DW#16#0
      T     #TEMP0
      L     MB   101
      T     #TEMP1
      L     MB   102
      T     #TEMP2
      L     #TEMP4
      LAR1  
      JU    M006
M012: L     #TEMP15
      INC   1
      T     #TEMP15
      +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP7
      L     P#M 100.0
      LAR2  
      L     #TEMP7
      L     C#8
      *I    
      +AR2  
      TAR2  #TEMP9
      +AR1  P#1.0
      L     B [AR1,P#0.0]
      T     #TEMP8
      L     P#M 100.0
      LAR2  
      L     #TEMP8
      L     C#8
      *I    
      +AR2  
      TAR2  #TEMP10
      TAR1  #TEMP4
      LAR1  #TEMP9
      LAR2  #TEMP10
      L     B [AR1,P#0.0]
      L     B [AR2,P#0.0]
      ==I   
      JCN   M013
      JU    M014
M013: L     P#DBX 0.0
      LAR1  
      T     #TEMP4
      L     B#16#0
      T     #TEMP6
      JU    M006
M014: L     #TEMP4
      LAR1  
      L     #TEMP13
      L     L#1
      +I    
      T     #TEMP13
      JU    M006
M006: L     #TEMP0
      T     MB   100
      L     #TEMP1
      T     MB   101
      L     #TEMP2
      T     MB   102
      +AR1  P#1.0
      L     #TEMP6
      +     1
      T     #TEMP6
      JU    M005
M010: L     P#DBX 0.0
      LAR1  
      L     0
      T     #TEMP6
      TAR1  #TEMP4
M005: TAR1  #TEMP4
      CLR   
      =     #TEMP16
      L     #TEMP13
      L     L#20
      ==I   
      S     #TEMP16
      L     #TEMP15
      ==I   
      A     #TEMP16
      JC    M017
      L     #TEMP13
      L     L#20
      <I    
      S     #TEMP16
      L     #TEMP15
      ==I   
      A     #TEMP16
      JC    M018
      JU    M019
M017: SET   
      =     #TEMP14
      JU    M016
M018: CLR   
      =     #TEMP14
      JU    M016
M019: CLR   
      O     #TEMP14
      =     #RET_VAL
      JU    M015
M016: CLR   
      O     #TEMP14
      =     #RET_VAL

แƒ™แƒแƒ“แƒ˜ แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ’แƒ แƒซแƒ”แƒšแƒ˜แƒ แƒ“แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ แƒ—แƒฃแƒšแƒ˜ แƒฉแƒแƒœแƒ“แƒ”แƒก แƒ•แƒ˜แƒœแƒ›แƒ”แƒกแƒ—แƒ•แƒ˜แƒก, แƒ•แƒ˜แƒœแƒช แƒแƒ  แƒ˜แƒชแƒœแƒแƒ‘แƒก STL. แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒ˜แƒก แƒคแƒแƒ แƒ’แƒšแƒ”แƒ‘แƒจแƒ˜ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒแƒœแƒแƒšแƒ˜แƒ–แƒ”แƒ‘แƒแƒก แƒแƒ–แƒ แƒ˜ แƒแƒ  แƒแƒฅแƒ•แƒก; STL แƒ”แƒœแƒ˜แƒก แƒ“แƒ”แƒขแƒแƒšแƒฃแƒ แƒ˜ แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ˜แƒฎแƒ˜แƒšแƒแƒ— แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ›แƒซแƒฆแƒ•แƒแƒœแƒ”แƒšแƒแƒจแƒ˜: แƒ’แƒแƒœแƒชแƒฎแƒแƒ“แƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ (STL) S7-300 แƒ“แƒ S7-400 แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒแƒฅแƒ•แƒ” แƒฌแƒแƒ แƒ›แƒแƒ’แƒ˜แƒ“แƒ’แƒ”แƒœแƒ— แƒ˜แƒ›แƒแƒ•แƒ” แƒ™แƒแƒ“แƒก แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ - แƒ”แƒขแƒ˜แƒ™แƒ”แƒขแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜แƒก แƒ’แƒแƒ“แƒแƒ แƒฅแƒ›แƒ”แƒ•แƒ แƒ“แƒ แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ˜แƒก แƒ“แƒ แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ—แƒ˜ 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

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ