goebelmasse

jpeg-stegano

Nov 1st, 2014
439
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/bin/bash
  2. # -*- coding: utf-8 -*-
  3. ########################################################################
  4. #
  5. # jpeg-stegano
  6. # Copy? Right! 2014 Elias Schwerdtfeger, http://www.tamagothi.de/
  7. #
  8. # Zufällige, stark verschlüsselte fortune-Sprüche steganographisch
  9. # in JPEG-Bildern unterbringen, um die Datensammler bei der NSA ein
  10. # bisschen zu trollen.
  11. #
  12. # Erforderliche Laufzeitumgebung:
  13. # - bash
  14. # - Standard GNU tools
  15. # - ImageMagick
  16. # - fortune
  17. # - gpg
  18. # - outguess
  19. #
  20. # Für den folgenden Code bekomme ich keine Schönheitspreise, ich weiß.
  21. # Natürlich ist dieses Programm lizenziert unter Piratenlizenz:
  22. # http://www.tamagothi.de/impressum/lizenz
  23. #
  24. # $Id: jpeg-stegano,v 1.4 2014/11/01 03:31:37 elias Exp $
  25. #
  26. ########################################################################
  27. #
  28. # Konfiguration
  29. # -------------
  30. #
  31. # Für diesen Empfänger wird verschlüsselt
  32. # (Vielleicht später auf mehrere erweitern, einer wird zufällig ausgewählt)
  33. #
  34. pgpfor='sag@ich.net'
  35. #
  36. # Schlüssel für die Steganografie mit outguess
  37. #
  38. stegkey='Ganz Geheimes Geheimwort'
  39. #
  40. # Dieser Qualitätsverlust wird beim Verschlüsseln erzeugt
  41. #
  42. quality_loss=5
  43. #
  44. # So viele Versuche werden gemacht
  45. #
  46. maxtries=3
  47. #
  48. # Programm
  49. # --------
  50. #
  51. # Ab hier braucht (hoffentlich) nichts mehr angepasst zu werden.
  52. #
  53. PATH=/bin:/usr/bin:/usr/games
  54. progname=$(basename $0)
  55. for fname
  56. do
  57.     lname=$(basename $fname)
  58.     if [ $(file -bi "$fname" | sed 's/;.*$//') != 'image/jpeg' ]
  59.     then
  60.     echo "$fname: not a JPEG image" 1>&2
  61.     notify-send -i error "$progname" "'$lname' is not a JPEG image"
  62.     exit 1
  63.     fi
  64.     q=$(identify -verbose "$fname" | grep 'Quality' | sed 's/^.*:\s*//')
  65.     nq=$((q - quality_loss))
  66.     bname="$(dirname $fname)/old-$(basename $fname)"
  67.     nname=/tmp/jpeg-steg-$$.jpg
  68.     tname=/tmp/jpeg-steg-$$.txt
  69.     ok=0
  70.     tries=0
  71.     trap "rm -f '$bname' $nname $tname" 1 2 15
  72.     while [ $ok -eq 0 -a $tries -lt $maxtries ]
  73.     do
  74.     tries=$((tries + 1))
  75.     if ! fortune | gpg -ae -r "$pgpfor" >$tname
  76.     then
  77.         rm $tname
  78.         exit 1
  79.     fi
  80.     if outguess -k "$stegkey" -d $tname -p $nq "$fname" $nname
  81.     then
  82.         ok=1
  83.         mv -b "$fname" "$bname"
  84.         mv $nname "$fname"
  85.         rm $tname
  86.     fi
  87.     done
  88.     if [ $tries -ge $maxtries ]
  89.     then
  90.     rm -f $tname $nname
  91.     echo "$fname: random steganography failed" 1>&2
  92.     notify-send -i error $progname "Error in processing '$lname'"
  93.     fi
  94.     trap "" 1 2 15
  95. done
RAW Paste Data