No description, website, or topics provided.
C++ HTML C Makefile
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
demo add demo "malware" Aug 7, 2015
lib first commit Jul 21, 2015
snap7 first commit Jul 21, 2015
.gitignore first commit Jul 21, 2015
LICENSE first commit Jul 21, 2015
Makefile first commit Jul 21, 2015 add SCADACS link Aug 8, 2015
README_demo.txt add demo "malware" Aug 7, 2015
main.c first commit Jul 21, 2015


Brought to you by


As easy as

$ make

Usually this is enough. Then you can find the binary in the current dir.


This tool depends on the Snap7 library available at

Compilation error

We include the libraries of the latest release (1.4.0) and use the Linux x86_64 version for compiling. If you need a different version, you'll have to pick it from the snap7/release/ dir and copy it to lib/. If that won't work, you'll have to get the full release of Snap7, compile it yourself and copy the library to lib/.

cannot open shared object file

PLCinject is dynamically linked with the Snap7's shared library in lib/. If you (re)move the binary or the library, it won't work.


The directory given by parameter -f must only contain the blocks to download to the plc. The filename convention is <blocktype>_<blocknumber>.mc7 (e.g. "FC_1000.mc7")

usage: plcinject -c ip [-r rack=0] [-s slot=2] [-b block] [-p block] [-f dir] [-d]

-d      Display available blocks on PLC
-p      Block that has to be injected/patched with a call instruction:  OBx, FBx or FCx on PLC, e.g. OB1
-b      Block to call
-f      Path to your block(s) you want to download to the plc


plcinject -c -p OB1 -b FC1000 -f /home/user/PATH 

This example will upload OB1 from the PLC at, inject this OB1 with a call instruction to the function block FC1000 which is located at /home/user/PATH and then downloads all blocks in /home/user/PATH and the modified OB1 back to the PLC.