āχāĻ¨ā§āĻĄāĻžāĻ¸ā§āĻŸā§āϰāĻŋāϝāĻŧāĻžāϞ āύāĻŋāύāϜāĻžāϰ āĻĒāĻĻāϚāĻŋāĻšā§āύ⧇: āĻĒāϜāĻŋāϟāĻŋāĻ­ āĻšā§āϝāĻžāĻ• āĻĄā§‡āϏ 9 āĻ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻāĻ•āϟāĻŋ āĻĒāĻŋāĻāϞāϏāĻŋ āĻšā§āϝāĻžāĻ• āĻ•āϰāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ

āχāĻ¨ā§āĻĄāĻžāĻ¸ā§āĻŸā§āϰāĻŋāϝāĻŧāĻžāϞ āύāĻŋāύāϜāĻžāϰ āĻĒāĻĻāϚāĻŋāĻšā§āύ⧇: āĻĒāϜāĻŋāϟāĻŋāĻ­ āĻšā§āϝāĻžāĻ• āĻĄā§‡āϏ 9 āĻ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻāĻ•āϟāĻŋ āĻĒāĻŋāĻāϞāϏāĻŋ āĻšā§āϝāĻžāĻ• āĻ•āϰāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ

āĻ—āϤ PHDays 9 āĻ āφāĻŽāϰāĻž āĻāĻ•āϟāĻŋ āĻ—ā§āϝāĻžāϏ āĻĒāĻžāĻŽā§āĻĒāĻŋāĻ‚ āĻĒā§āĻ˛ā§āϝāĻžāĻ¨ā§āϟ āĻšā§āϝāĻžāĻ• āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻĒā§āϰāϤāĻŋāϝ⧋āĻ—āĻŋāϤāĻž āĻ•āϰ⧇āĻ›āĻŋ - āĻĒā§āϰāϤāĻŋāϝ⧋āĻ—āĻŋāϤāĻž āχāĻ¨ā§āĻĄāĻžāĻ¸ā§āĻŸā§āϰāĻŋāϝāĻŧāĻžāϞ āύāĻŋāύāϜāĻž. āϏāĻžāχāĻŸā§‡ āϤāĻŋāύāϟāĻŋ āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄ āĻ›āĻŋāϞ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āύāĻŋāϰāĻžāĻĒāĻ¤ā§āϤāĻž āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āϏāĻš (āϕ⧋āύ āύāĻŋāϰāĻžāĻĒāĻ¤ā§āϤāĻž āύ⧇āχ, āύāĻŋāĻŽā§āύ āύāĻŋāϰāĻžāĻĒāĻ¤ā§āϤāĻž, āωāĻšā§āϚ āύāĻŋāϰāĻžāĻĒāĻ¤ā§āϤāĻž), āĻāĻ•āχ āĻļāĻŋāĻ˛ā§āĻĒ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻ…āύ⧁āĻ•āϰāĻŖ āĻ•āϰ⧇: āϚāĻžāĻĒ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āĻŦāĻžāϝāĻŧ⧁ āĻāĻ•āϟāĻŋ āĻŦ⧇āϞ⧁āύ⧇ āĻĒāĻžāĻŽā§āĻĒ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ (āĻāĻŦāĻ‚ āϤāĻžāϰāĻĒāϰ āϛ⧇āĻĄāĻŧ⧇ āĻĻ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ)āĨ¤

āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āύāĻŋāϰāĻžāĻĒāĻ¤ā§āϤāĻž āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋ āϏāĻ¤ā§āĻ¤ā§āĻŦ⧇āĻ“, āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄāϗ⧁āϞāĻŋāϰ āĻšāĻžāĻ°ā§āĻĄāĻ“āϝāĻŧā§āϝāĻžāϰ āϰāϚāύāĻž āĻāĻ•āχ āĻ›āĻŋāϞ: āϏāĻŋāĻŽā§‡āĻ¨ā§āϏ āϏāĻŋāĻŽā§āϝāĻžāϟāĻŋāĻ• āĻĒāĻŋāĻāϞāϏāĻŋ S7-300 āϏāĻŋāϰāĻŋāϜ; āϜāϰ⧁āϰ⧀ āĻĄāĻŋāĻĢā§āϞ⧇āĻļāύ āĻŦā§‹āϤāĻžāĻŽ āĻāĻŦāĻ‚ āϚāĻžāĻĒ āĻŽāĻžāĻĒāĻžāϰ āĻĄāĻŋāĻ­āĻžāχāϏ (āĻĒāĻŋāĻāϞāϏāĻŋ āĻĄāĻŋāϜāĻŋāϟāĻžāϞ āχāύāĻĒ⧁āϟ (āĻĄāĻŋāφāχ) āĻāϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤ); āĻŦāĻžāϤāĻžāϏ⧇āϰ āĻ¸ā§āĻĢā§€āϤāĻŋ āĻāĻŦāĻ‚ āĻĄāĻŋāĻĢā§āϞ⧇āĻļāύ⧇āϰ āϜāĻ¨ā§āϝ āĻ­āĻžāϞāĻ­ āĻ•āĻžāϜ āĻ•āϰ⧇ (āĻĒāĻŋāĻāϞāϏāĻŋ (āĻĄāĻŋāĻ“) āĻāϰ āĻĄāĻŋāϜāĻŋāϟāĻžāϞ āφāωāϟāĻĒ⧁āĻŸā§‡āϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤ) - āύ⧀āĻšā§‡āϰ āϚāĻŋāĻ¤ā§āϰāϟāĻŋ āĻĻ⧇āϖ⧁āύāĨ¤

āχāĻ¨ā§āĻĄāĻžāĻ¸ā§āĻŸā§āϰāĻŋāϝāĻŧāĻžāϞ āύāĻŋāύāϜāĻžāϰ āĻĒāĻĻāϚāĻŋāĻšā§āύ⧇: āĻĒāϜāĻŋāϟāĻŋāĻ­ āĻšā§āϝāĻžāĻ• āĻĄā§‡āϏ 9 āĻ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻāĻ•āϟāĻŋ āĻĒāĻŋāĻāϞāϏāĻŋ āĻšā§āϝāĻžāĻ• āĻ•āϰāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ

āĻĒāĻŋāĻāϞāϏāĻŋ, āĻĒā§āϰ⧇āϏāĻžāϰ āϰāĻŋāĻĄāĻŋāĻ‚āϝāĻŧ⧇āϰ āωāĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āϤāĻžāϰ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽ āĻ…āύ⧁āϏāĻžāϰ⧇, āĻŦāϞāϟāĻŋāϕ⧇ āĻĄāĻŋāĻĢā§āϞ⧇āϟ āĻŦāĻž āĻ¸ā§āĻĢā§€āϤ āĻ•āϰāĻžāϰ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āύāĻŋāϝāĻŧ⧇āϛ⧇ (āϏāĻ‚āĻļā§āϞāĻŋāĻˇā§āϟ āĻ­āĻžāϞāĻ­āϗ⧁āϞāĻŋ āĻ–ā§‹āϞāĻž āĻāĻŦāĻ‚ āĻŦāĻ¨ā§āϧ āĻ•āϰ⧇āϛ⧇)āĨ¤ āϝāĻžāχāĻšā§‹āĻ•, āϏāĻŽāĻ¸ā§āϤ āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄā§‡āϰ āĻāĻ•āϟāĻŋ āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞ āĻ•āĻ¨ā§āĻŸā§āϰ⧋āϞ āĻŽā§‹āĻĄ āĻ›āĻŋāϞ, āϝāĻž āϕ⧋āύāĻ“ āĻŦāĻŋāϧāĻŋāύāĻŋāώ⧇āϧ āĻ›āĻžāĻĄāĻŧāĻžāχ āĻ­āĻžāϞāĻ­āϗ⧁āϞāĻŋāϰ āĻ…āĻŦāĻ¸ā§āĻĨāĻž āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻ•āϰāĻž āϏāĻŽā§āĻ­āĻŦ āĻ•āϰ⧇āĻ›āĻŋāϞāĨ¤

āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄāϗ⧁āϞāĻŋ āĻāχ āĻŽā§‹āĻĄāϟāĻŋ āϏāĻ•ā§āώāĻŽ āĻ•āϰāĻžāϰ āϜāϟāĻŋāϞāϤāĻžāϝāĻŧ āĻ­āĻŋāĻ¨ā§āύ āĻ›āĻŋāϞ: āĻ…āϰāĻ•ā§āώāĻŋāϤ āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄā§‡ āĻāϟāĻŋ āĻ•āϰāĻž āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϏāĻšāϜ āĻ›āĻŋāϞ āĻāĻŦāĻ‚ āωāĻšā§āϚ āύāĻŋāϰāĻžāĻĒāĻ¤ā§āϤāĻž āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄā§‡ āĻāϟāĻŋ āĻ…āύ⧁āϰ⧂āĻĒāĻ­āĻžāĻŦ⧇ āφāϰāĻ“ āĻ•āĻ āĻŋāύ āĻ›āĻŋāϞāĨ¤

āĻ›āϝāĻŧāϟāĻŋ āϏāĻŽāĻ¸ā§āϝāĻžāϰ āĻŽāĻ§ā§āϝ⧇ āĻĒāĻžāρāϚāϟāĻŋāϰ āϏāĻŽāĻžāϧāĻžāύ āĻšāϝāĻŧ⧇āϛ⧇ āĻĻ⧁āχ āĻĻāĻŋāύ⧇; āĻĒā§āϰāĻĨāĻŽ āĻ¸ā§āĻĨāĻžāύ⧇āϰ āĻ…āĻ‚āĻļāĻ—ā§āϰāĻšāĻŖāĻ•āĻžāϰ⧀ 233 āĻĒāϝāĻŧ⧇āĻ¨ā§āϟ āĻ…āĻ°ā§āϜāύ āĻ•āϰ⧇āϛ⧇ (āϤāĻŋāύāĻŋ āĻĒā§āϰāϤāĻŋāϝ⧋āĻ—āĻŋāϤāĻžāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤāĻŋāϰ āϜāĻ¨ā§āϝ āĻāĻ• āϏāĻĒā§āϤāĻžāĻš āĻ•āĻžāϟāĻŋāϝāĻŧ⧇āϛ⧇āύ)āĨ¤ āϤāĻŋāύāϜāύ āĻŦāĻŋāϜāϝāĻŧā§€: āφāĻŽāĻŋ āϰāĻžāĻ–āĻŋ - a1exdandy, II - Rubikoid, III - ZeāĨ¤

āϝāĻžāχāĻšā§‹āĻ•, PHDay-āĻāϰ āϏāĻŽāϝāĻŧ, āĻ…āĻ‚āĻļāĻ—ā§āϰāĻšāĻŖāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āϕ⧇āωāχ āϤāĻŋāύāϟāĻŋ āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄ āĻ…āϤāĻŋāĻ•ā§āϰāĻŽ āĻ•āϰāϤ⧇ āϏāĻ•ā§āώāĻŽ āĻšāϝāĻŧāύāĻŋ, āϤāĻžāχ āφāĻŽāϰāĻž āĻāĻ•āϟāĻŋ āĻ…āύāϞāĻžāχāύ āĻĒā§āϰāϤāĻŋāϝ⧋āĻ—āĻŋāϤāĻž āĻ•āϰāĻžāϰ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āύāĻŋāϝāĻŧ⧇āĻ›āĻŋ āĻāĻŦāĻ‚ āϜ⧁āύ⧇āϰ āĻļ⧁āϰ⧁āϤ⧇ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻ•āĻ āĻŋāύ āĻ•āĻžāϜāϟāĻŋ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰ⧇āĻ›āĻŋāĨ¤ āĻ…āĻ‚āĻļāĻ—ā§āϰāĻšāĻŖāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āĻāĻ• āĻŽāĻžāϏ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āĻ•āĻžāϜāϟāĻŋ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇, āĻĒāϤāĻžāĻ•āĻžāϟāĻŋ āϖ⧁āρāĻœā§‡ āĻŦ⧇āϰ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āϏāĻŽāĻžāϧāĻžāύāϟāĻŋ āĻŦāĻŋāĻļāĻĻāĻ­āĻžāĻŦ⧇ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āφāĻ•āĻ°ā§āώāĻŖā§€āϝāĻŧ āωāĻĒāĻžāϝāĻŧ⧇ āĻŦāĻ°ā§āĻŖāύāĻž āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤

āĻ•āĻžāĻŸā§‡āϰ āύ⧀āĻšā§‡ āφāĻŽāϰāĻž āĻāĻ• āĻŽāĻžāϏ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āĻĒā§āϰ⧇āϰāĻŋāϤāĻĻ⧇āϰ āĻ•āĻžāĻ› āĻĨ⧇āϕ⧇ āϟāĻžāĻ¸ā§āϕ⧇āϰ āϏāĻ°ā§āĻŦā§‹āĻ¤ā§āϤāĻŽ āϏāĻŽāĻžāϧāĻžāύ⧇āϰ āĻāĻ•āϟāĻŋ āĻŦāĻŋāĻļā§āϞ⧇āώāĻŖ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāĻŋ, āĻāϟāĻŋ āĻĄāĻŋāϜāĻŋāϟāĻžāϞ āϏāĻŋāĻ•āĻŋāωāϰāĻŋāϟāĻŋ āϕ⧋āĻŽā§āĻĒāĻžāύāĻŋāϰ āĻ…ā§āϝāĻžāϞ⧇āĻ•ā§āϏāĻŋ āϕ⧋āĻ­āϰāĻŋāĻāύāĻŋāĻ– (a1exdandy) āĻĻā§āĻŦāĻžāϰāĻž āĻĒāĻžāĻ“āϝāĻŧāĻž āϗ⧇āϛ⧇, āϝāĻŋāύāĻŋ PHDays āϏāĻŽāϝāĻŧ āĻĒā§āϰāϤāĻŋāϝ⧋āĻ—āĻŋāϤāĻžāϝāĻŧ XNUMXāĻŽ āĻ¸ā§āĻĨāĻžāύ āĻ…āϧāĻŋāĻ•āĻžāϰ āĻ•āϰ⧇āĻ›āĻŋāϞ⧇āύāĨ¤ āύ⧀āĻšā§‡ āφāĻŽāϰāĻž āφāĻŽāĻžāĻĻ⧇āϰ āĻŽāĻ¨ā§āϤāĻŦā§āϝ āϏāĻš āϤāĻžāϰ āĻĒāĻžāĻ ā§āϝ āωāĻĒāĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻ›āĻŋāĨ¤

āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ• āĻŦāĻŋāĻļā§āϞ⧇āώāĻŖ

āϏ⧁āϤāϰāĻžāĻ‚, āϟāĻžāĻ¸ā§āĻ•āϟāĻŋāϤ⧇ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻĢāĻžāχāϞāϗ⧁āϞāĻŋāϰ āϏāĻžāĻĨ⧇ āĻāĻ•āϟāĻŋ āϏāĻ‚āϰāĻ•ā§āώāĻŖāĻžāĻ—āĻžāϰ āϰāϝāĻŧ⧇āϛ⧇:

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

hints.txt āĻĢāĻžāχāϞāϟāĻŋāϤ⧇ āĻ•āĻžāϜāϟāĻŋ āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āϤāĻĨā§āϝ āĻāĻŦāĻ‚ āχāĻ™ā§āĻ—āĻŋāϤ āϰāϝāĻŧ⧇āϛ⧇āĨ¤ āĻāĻ–āĻžāύ⧇ āĻāϰ āĻŦāĻŋāώāϝāĻŧāĻŦāĻ¸ā§āϤ⧁ āϰāϝāĻŧ⧇āϛ⧇:

  1. āĻĒ⧇āĻŸā§āϰ⧋āĻ­āĻŋāϚ āĻ—āϤāĻ•āĻžāϞ āφāĻŽāĻžāϕ⧇ āĻŦāϞ⧇āĻ›āĻŋāϞ⧇āύ āϝ⧇ āφāĻĒāύāĻŋ PlcSim āĻĨ⧇āϕ⧇ āϧāĻžāĻĒ 7 āĻ āĻŦā§āϞāĻ• āϞ⧋āĻĄ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤
  2. āϏāĻŋāĻŽā§‡āĻ¨ā§āϏ āϏāĻŋāĻŽā§āϝāĻžāϟāĻŋāĻ• 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 0401 0206a0100 ..w............. 0103: 0102 0 02 00000030 0501 0202 ................... 1602 0501............0206. 0100: 0104 0102 00000040 7502 0401 0206 0100 0105 ......... & ..... 0102: 0C02 0501 00000050 0202 1602 0501 0206 0100 āĻāϞ ......... 0106āĨ¤ .. 0102 : 3402 4 00000060 0401 0206a0100 0107 0102 2602 ................ 0501: 0202 00000070 4 02a 0501 0206 0100 0108 .......... 0102a3302: 0401 3b 00000080 0206 0100 0109 0102 0 ......".....F... 02b0501: 0202 1602 00000090c 0501 0206 0100 ... 010 .......... .. 0102c3702: 0401d 0206 7a000000 0 0100 010 0102 2202................ 0501d0202: 4602 0501e 000000 0d0206 0100 010 0102 3302 0401 0206 0100.. .... 3e000000: 0 010 0102 0 02 0501 0202 1602 ........#...... 0501f0206: 000000 0 0100 010 0102 6..... ..... 02: 0401 0206 0100 010 000000 0 0102 1102 ......%......... 0501: 0202 2302 0501 0206 0100 000000..... .....&. 0: 0110 0102 3502c0401 0206 0100 0111 ....L......

āύāĻžāĻŽ āĻ…āύ⧁āϏāĻžāϰ⧇, block_upload_traffic.pcapng āĻĢāĻžāχāϞāϟāĻŋāϤ⧇ āĻĒāĻŋāĻāϞāϏāĻŋ-āϤ⧇ āĻŦā§āϞāĻ• āφāĻĒāϞ⧋āĻĄ āĻŸā§āϰāĻžāĻĢāĻŋāϕ⧇āϰ āĻāĻ•āϟāĻŋ āĻĄāĻžāĻŽā§āĻĒ āϰāϝāĻŧ⧇āϛ⧇āĨ¤

āĻāϟāĻŋ āϞāĻ•ā§āώāĻŖā§€āϝāĻŧ āϝ⧇ āϏāĻŽā§āĻŽā§‡āϞāύ⧇āϰ āϏāĻŽāϝāĻŧ āĻĒā§āϰāϤāĻŋāϝ⧋āĻ—āĻŋāϤāĻžāϰ āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ āĻāχ āĻŸā§āĻ°ā§āϝāĻžāĻĢāĻŋāĻ• āĻĄāĻžāĻŽā§āĻĒāϟāĻŋ āĻĒāĻžāĻ“āϝāĻŧāĻž āφāϰāĻ“ āĻ•āĻŋāϛ⧁āϟāĻž āĻ•āĻ āĻŋāύ āĻ›āĻŋāϞāĨ¤ āĻāϟāĻŋ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, TeslaSCADA2 āĻāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ āĻĢāĻžāχāϞ āĻĨ⧇āϕ⧇ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āĻŦā§‹āĻāĻžāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻ›āĻŋāϞāĨ¤ āĻāϟāĻŋ āĻĨ⧇āϕ⧇ āĻŦā§‹āĻāĻž āϏāĻŽā§āĻ­āĻŦ āĻ›āĻŋāϞ āϝ⧇ RC4 āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāύāĻ•ā§āϰāĻŋāĻĒā§āϟ āĻ•āϰāĻž āĻĄāĻžāĻŽā§āĻĒāϟāĻŋ āϕ⧋āĻĨāĻžāϝāĻŧ āĻ…āĻŦāĻ¸ā§āĻĨāĻŋāϤ āĻāĻŦāĻ‚ āĻāϟāĻŋ āĻĄāĻŋāĻ•ā§āϰāĻŋāĻĒā§āϟ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āϕ⧀ āϕ⧀ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻĻāϰāĻ•āĻžāϰāĨ¤ āϏāĻžāχāĻŸā§‡ āĻĄā§‡āϟāĻž āĻŦā§āϞāϕ⧇āϰ āĻĄāĻžāĻŽā§āĻĒ S7 āĻĒā§āϰ⧋āĻŸā§‹āĻ•āϞ āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻĒā§āϰāĻžāĻĒā§āϤ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻŋ Snap7 āĻĒā§āϝāĻžāϕ⧇āϜ āĻĨ⧇āϕ⧇ āĻĄā§‡āĻŽā§‹ āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āĻ›āĻŋāĨ¤

āĻāĻ•āϟāĻŋ āĻŸā§āϰāĻžāĻĢāĻŋāĻ• āĻĄāĻžāĻŽā§āĻĒ āĻĨ⧇āϕ⧇ āϏāĻ‚āϕ⧇āϤ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻžāĻ•āϰāĻŖ āĻŦā§āϞāĻ• āύāĻŋāĻˇā§āĻ•āĻžāĻļāύ āĻ•āϰāĻž āĻšāĻšā§āϛ⧇

āĻĄāĻžāĻŽā§āĻĒ⧇āϰ āĻŦāĻŋāώāϝāĻŧāĻŦāĻ¸ā§āϤ⧁ āĻĻ⧇āϖ⧇ āφāĻĒāύāĻŋ āĻŦ⧁āĻāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύ āϝ⧇ āĻāϤ⧇ āϏāĻŋāĻ—āĻ¨ā§āϝāĻžāϞ āĻĒā§āϰāϏ⧇āϏāĻŋāĻ‚ āĻŦā§āϞāĻ• OB1, FC1, FC2 āĻāĻŦāĻ‚ FC3 āϰāϝāĻŧ⧇āϛ⧇:

āχāĻ¨ā§āĻĄāĻžāĻ¸ā§āĻŸā§āϰāĻŋāϝāĻŧāĻžāϞ āύāĻŋāύāϜāĻžāϰ āĻĒāĻĻāϚāĻŋāĻšā§āύ⧇: āĻĒāϜāĻŋāϟāĻŋāĻ­ āĻšā§āϝāĻžāĻ• āĻĄā§‡āϏ 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 (āĻĒāĻŋāĻĒāĻŋ) āĻĻāĻŋāϝāĻŧ⧇ āĻļ⧁āϰ⧁ āĻšāϝāĻŧāĨ¤ āĻāĻ–āύ āφāĻĒāύāĻžāϕ⧇ āϤāĻžāĻĻ⧇āϰ āĻŦāĻŋāĻļā§āϞ⧇āώāĻŖ āĻ•āϰāϤ⧇ āĻļāĻŋāĻ–āϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻ…ā§āϝāĻžāϏāĻžāχāύāĻŽā§‡āĻ¨ā§āϟ āχāĻ™ā§āĻ—āĻŋāϤ āĻĒāϰāĻžāĻŽāĻ°ā§āĻļ āĻĻ⧇āϝāĻŧ āϝ⧇ āφāĻĒāύāĻžāϕ⧇ āĻāϰ āϜāĻ¨ā§āϝ PlcSim āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤

āĻŦā§āϞāĻ• āĻĨ⧇āϕ⧇ āĻŽāĻžāύāĻŦ-āĻĒāĻ āύāϝ⧋āĻ—ā§āϝ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻžāĻŦāϞ⧀ āĻĒāĻžāĻ“āϝāĻŧāĻž

āĻĒā§āϰāĻĨāĻŽā§‡, āϏāĻŋāĻŽā§āϝāĻžāϟāĻŋāĻ• āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰ āϏāĻĢā§āϟāĻ“āϝāĻŧā§āϝāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāϟāĻŋāϤ⧇ āĻĒ⧁āύāϰāĻžāĻŦ⧃āĻ¤ā§āϤāĻŋāĻŽā§‚āϞāĻ• āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻžāĻŦāϞ⧀ (= Q 7) āϏāĻš āĻŦ⧇āĻļ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āĻŦā§āϞāĻ• āϞ⧋āĻĄ āĻ•āϰ⧇ S0.0-PlcSim āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽ āĻ•āϰāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰāĻŋ āĻāĻŦāĻ‚ āĻāĻŽā§āϞ⧇āϟāϰ⧇ āĻĒā§āϰāĻžāĻĒā§āϤ PLC āϕ⧇ example.plc āĻĢāĻžāχāϞ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧇āĨ¤ āĻĢāĻžāχāϞ⧇āϰ āĻŦāĻŋāώāϝāĻŧāĻŦāĻ¸ā§āϤ⧁ āĻĻ⧇āϖ⧇, āφāĻĒāύāĻŋ āϏāĻšāĻœā§‡āχ 70 70 āĻ¸ā§āĻŦāĻžāĻ•ā§āώāϰ āĻĻā§āĻŦāĻžāϰāĻž āĻĄāĻžāωāύāϞ⧋āĻĄ āĻ•āϰāĻž āĻŦā§āϞāϕ⧇āϰ āĻļ⧁āϰ⧁ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ, āϝāĻž āφāĻŽāϰāĻž āφāϗ⧇ āφāĻŦāĻŋāĻˇā§āĻ•āĻžāϰ āĻ•āϰ⧇āĻ›āĻŋāĨ¤ āĻŦā§āϞāϕ⧇āϰ āφāϗ⧇, āĻĻ⧃āĻļā§āϝāϤ, āĻŦā§āϞāϕ⧇āϰ āφāĻ•āĻžāϰ 4-āĻŦāĻžāχāϟ āϞāĻŋāϟāϞ-āĻāĻ¨ā§āĻĄāĻŋāϝāĻŧāĻžāύ āĻŽāĻžāύ āĻšāĻŋāϏāĻžāĻŦ⧇ āϞ⧇āĻ–āĻž āĻšāϝāĻŧāĨ¤

āχāĻ¨ā§āĻĄāĻžāĻ¸ā§āĻŸā§āϰāĻŋāϝāĻŧāĻžāϞ āύāĻŋāύāϜāĻžāϰ āĻĒāĻĻāϚāĻŋāĻšā§āύ⧇: āĻĒāϜāĻŋāϟāĻŋāĻ­ āĻšā§āϝāĻžāĻ• āĻĄā§‡āϏ 9 āĻ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻāĻ•āϟāĻŋ āĻĒāĻŋāĻāϞāϏāĻŋ āĻšā§āϝāĻžāĻ• āĻ•āϰāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ

āφāĻŽāϰāĻž āĻĒāĻŋāĻāϞāϏāĻŋ āĻĢāĻžāχāϞ⧇āϰ āĻ—āĻ āύ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āϤāĻĨā§āϝ āĻĒāĻžāĻ“āϝāĻŧāĻžāϰ āĻĒāϰ, āĻĒāĻŋāĻāϞāϏāĻŋ āĻāϏ7 āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽ āĻĒāĻĄāĻŧāĻžāϰ āϜāĻ¨ā§āϝ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻ•āĻ°ā§āĻŽ āĻĒāϰāĻŋāĻ•āĻ˛ā§āĻĒāύāĻž āωāĻĒāĻ¸ā§āĻĨāĻŋāϤ āĻšāϝāĻŧ⧇āϛ⧇:

  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 āĻ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻāĻ•āϟāĻŋ āĻĒāĻŋāĻāϞāϏāĻŋ āĻšā§āϝāĻžāĻ• āĻ•āϰāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ

āϏāĻŽāĻ¸ā§āϝāĻžāϟāĻŋ āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, āφāĻĒāύāĻžāϕ⧇ FC3 āĻĢāĻžāĻ‚āĻļāύ āĻŦāĻŋāĻļā§āϞ⧇āώāĻŖ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āĻŦ⧁āĻāϤ⧇ āĻšāĻŦ⧇ āϕ⧀ āĻ•āϰāĻž āĻĻāϰāĻ•āĻžāϰ āϝāĻžāϤ⧇ āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āϝ⧌āĻ•ā§āϤāĻŋāĻ• āĻĢ⧇āϰāϤ āĻĻ⧇āϝāĻŧāĨ¤

āĻĒā§āϰāϤāĻŋāϝ⧋āĻ—āĻŋāϤāĻžāϰ āĻ¸ā§āĻĨāĻžāύ⧇ āϞ⧋ āϏāĻŋāĻ•āĻŋāωāϰāĻŋāϟāĻŋ āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄā§‡ āĻĒāĻŋāĻāϞāϏāĻŋ āϏāĻŋāĻ—āĻ¨ā§āϝāĻžāϞ āĻĒā§āϰāϏ⧇āϏāĻŋāĻ‚ āĻŦā§āϞāĻ•āϗ⧁āϞāĻŋ āĻāĻ•āχāĻ­āĻžāĻŦ⧇ āϏāĻžāϜāĻžāύ⧋ āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ, āĻ•āĻŋāĻ¨ā§āϤ⧁ #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 āĻ­āĻžāώāĻžāϰ āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻžāĻŦāϞ⧀ āĻāĻŦāĻ‚ āĻ•ā§āώāĻŽāϤāĻž āϏāĻ‚āĻļā§āϞāĻŋāĻˇā§āϟ āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞāϟāĻŋāϤ⧇ āĻĒāĻžāĻ“āϝāĻŧāĻž āϝāĻžāĻŦ⧇: 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

DDoS āϏ⧁āϰāĻ•ā§āώāĻž, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϏāĻš āϏāĻžāχāϟāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ đŸ”Ĩ DDoS āϏ⧁āϰāĻ•ā§āώāĻž āϏāĻš āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāϟ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ | ProHoster