Having perhaps made an error of judgement at Morality of posting Perl "virus" code? after discovering a new Perl toy to play with I now feel the need to atone. Here is a short piece of code that you could add to a script to prevent it from running if it has been modified by *say* a virus but in all liklihood you!

This begin block could be placed anywhere in a script and appends a simple checksum to the end of that script the first time it is executed. On following executions it checks against this checksum for a change and aborts if a change is noted. A simple edit will remove the checksum from the end of the file reseting this protection. The length of the file is used as the checksum for speed but you could get as elaborate as you liked.

This script is not a virus but does change any file it is run within. The appended checksum is removed prior to execution so will cause no problems.

cheers

tachyon

#!/usr/bin/perl -w print "Hello World!\n"; BEGIN { local $/; open (ME,$0); my $me = <ME>; close ME; unless ($me =~ m/#avshc='\d+'$/) { my $length = length $me; open (ME, ">>$0"); print ME "#avshc='$length'"; close ME; $me .= "#avshc='$length'"; } $me =~ s/#avshc='(\d+)'$//; die "File $0 has changed ?viral infection?\n" unless $1 == length +$me; }

In reply to Virus protection for Perl scripts by tachyon

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.