Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW

Re^2: checksum of subroutine

by mnooning (Beadle)
on Aug 10, 2012 at 18:47 UTC ( #986804=note: print w/replies, xml ) Need Help??

in reply to Re: checksum of subroutine
in thread checksum of subroutine

A hacker can replace needed bits in a file, then add other bits so that the overall file checksum stays valid. Doing that gets quantum if you have to hack the subroutines and file checksums.

As for RecDescent, if I could get at the text of a sub I could parse the sub and checksum it myself. The trick is to get at the text of the subroutine. That is where the question lies. Parse::RecDescent needs something like "$text", where $text is the text of the subroutine. You cannot hand it just a coderef. :-)

Replies are listed 'Best First'.
Re^3: checksum of subroutine
by CountZero (Bishop) on Aug 10, 2012 at 19:00 UTC
    Use Digest::SHA to calculate a digest over the whole file. Although it is not impossible to make two totally different files with the same digest, it is extremely unlikely that both files will have the same length and both will be working programs. It is not as simple as changing a few instructions and adding a few meaningless bytes at the end to "make up" the checksum.


    A program should be light and agile, its subroutines connected like a string of pearls. The spirit and intent of the program should be retained throughout. There should be neither too little or too much, neither needless loops nor useless variables, neither lack of structure nor overwhelming rigidity." - The Tao of Programming, 4.1 - Geoffrey James

    My blog: Imperial Deltronics
Re^3: checksum of subroutine
by AnomalousMonk (Chancellor) on Aug 10, 2012 at 18:56 UTC

    Rather than literal checksums (e.g., sum of all bytes) or even CRCs, maybe investigate some modern 'digital signature' technology. Perhaps start with the Cryptographic hash function discussion.

Re^3: checksum of subroutine
by tobyink (Abbot) on Aug 10, 2012 at 21:24 UTC

    "A hacker can replace needed bits in a file, then add other bits so that the overall file checksum stays valid."

    True, but it's very, very hard. And would be made exponentially harder -- effectively impossible -- by taking two checksums of the file using different algorithms. For example taking both a SHA-512 and Whirlpool hash of the file, then concatenating them.

    perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'

      Very novel idea. I will definitely be looking into this for the overall package.


Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://986804]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (7)
As of 2017-11-18 00:06 GMT
Find Nodes?
    Voting Booth?
    In order to be able to say "I know Perl", you must have:

    Results (276 votes). Check out past polls.