goebelmasse

jpeg-stegano

Nov 1st, 2014
1,018
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.42 KB | None | 0 0
  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. #
  35. # Schlüssel für die Steganografie mit outguess
  36. #
  37. stegkey='Ganz Geheimes Geheimwort'
  38. #
  39. # Dieser Qualitätsverlust wird beim Verschlüsseln erzeugt
  40. #
  41. quality_loss=5
  42. #
  43. # So viele Versuche werden gemacht
  44. #
  45. maxtries=3
  46. #
  47. # Programm
  48. # --------
  49. #
  50. # Ab hier braucht (hoffentlich) nichts mehr angepasst zu werden.
  51. #
  52. PATH=/bin:/usr/bin:/usr/games
  53. progname=$(basename $0)
  54. for fname
  55. do
  56.     lname=$(basename $fname)
  57.     if [ $(file -bi "$fname" | sed 's/;.*$//') != 'image/jpeg' ]
  58.     then
  59.     echo "$fname: not a JPEG image" 1>&2
  60.     notify-send -i error "$progname" "'$lname' is not a JPEG image"
  61.     exit 1
  62.     fi
  63.     q=$(identify -verbose "$fname" | grep 'Quality' | sed 's/^.*:\s*//')
  64.     nq=$((q - quality_loss))
  65.     bname="$(dirname $fname)/old-$(basename $fname)"
  66.     nname=/tmp/jpeg-steg-$$.jpg
  67.     tname=/tmp/jpeg-steg-$$.txt
  68.     ok=0
  69.     tries=0
  70.     trap "rm -f '$bname' $nname $tname" 1 2 15
  71.     while [ $ok -eq 0 -a $tries -lt $maxtries ]
  72.     do
  73.     tries=$((tries + 1))
  74.     if ! fortune | gpg -ae -r "$pgpfor" >$tname
  75.     then
  76.         rm $tname
  77.         exit 1
  78.     fi
  79.     if outguess -k "$stegkey" -d $tname -p $nq "$fname" $nname
  80.     then
  81.         ok=1
  82.         mv -b "$fname" "$bname"
  83.         mv $nname "$fname"
  84.         rm $tname
  85.     fi
  86.     done
  87.     if [ $tries -ge $maxtries ]
  88.     then
  89.     rm -f $tname $nname
  90.     echo "$fname: random steganography failed" 1>&2
  91.     notify-send -i error $progname "Error in processing '$lname'"
  92.     fi
  93.     trap "" 1 2 15
  94. done
Advertisement
Add Comment
Please, Sign In to add comment