goebelmasse

NSA mit Steganografie in Bildern trollen...

Jul 11th, 2015
789
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! 2015 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. # - steghide
  19. #
  20. # Es ist erforderlich, die Konfiguration im Quelltext anzupassen.
  21. #
  22. # Für den folgenden Code bekomme ich keine Schönheitspreise, ich weiß.
  23. # Natürlich ist dieses Programm lizenziert unter Piratenlizenz:
  24. # http://www.tamagothi.de/impressum/lizenz
  25. #
  26. # $Id: jpeg-stegano,v 1.8 2015/07/11 19:38:12 elias Exp $
  27. #
  28. ########################################################################
  29. #
  30. # Konfiguration
  31. # -------------
  32. #
  33. # Für diesen Empfänger wird verschlüsselt
  34. #
  35. pgpfor='sag@ich.net'
  36. #
  37. # Schlüssel für die Steganografie mit steghide
  38. # Ersetzt die X durch etwas eigenes und denkt noch etwas aus!
  39. #
  40. stegkey=$(date +xxxx-666-%Y-%m-%d-xxxx-%d-%j | md5sum - | sed 's/ .*$//')
  41. #
  42. # Dieser Qualitätsverlust wird beim Verschlüsseln erzeugt
  43. #
  44. quality_loss=4
  45. #
  46. # So viele Versuche werden gemacht
  47. #
  48. maxtries=5
  49. #
  50. # In diesem Verzeichnis werden die alten Bildversionen gespeichert.
  51. #
  52. archive_dir='steg-old'
  53. #
  54. # Programm
  55. # --------
  56. #
  57. # Ab hier braucht (hoffentlich) nichts mehr angepasst zu werden.
  58. #
  59. PATH=/bin:/usr/bin:/usr/games
  60. progname=$(basename $0)
  61. for fname
  62. do
  63.     workdir=$(dirname $fname)
  64.     olddir=$workdir/$archive_dir
  65.     if [ ! -d "$olddir" ]
  66.     then
  67.     if ! mkdir "$olddir"
  68.     then
  69.         echo "Failed to create archive directory." 1>&2
  70.         notify-send -i error "$progname" "Can not create $olddir"
  71.         exit 1
  72.     fi
  73.     fi
  74.     lname=$(basename $fname)
  75.     if [ $(file -bi "$fname" | sed 's/;.*$//') != 'image/jpeg' ]
  76.     then
  77.     echo "$fname: not a JPEG image" 1>&2
  78.     notify-send -i error "$progname" "'$lname' is not a JPEG image"
  79.     exit 1
  80.     fi
  81.     q=$(identify -verbose "$fname" | grep 'Quality' | sed 's/^.*:\s*//')
  82.     nq=$((q - quality_loss))
  83.     bname="$olddir/$(basename $fname)"
  84.     nname=/tmp/jpeg-steg-$$.jpg
  85.     tname=/tmp/jpeg-steg-$$.txt
  86.     ok=0
  87.     tries=0
  88.     trap "rm -f '$bname' $nname $tname" 1 2 15
  89.     while [ $ok -eq 0 -a $tries -lt $maxtries ]
  90.     do
  91.     tries=$((tries + 1))
  92.     if ! fortune | gpg -ae -r "$pgpfor" >$tname
  93.     then
  94.         rm $tname
  95.         exit 1
  96.     fi
  97.     if steghide embed -cf "$fname" -p "$stegkey" -ef $tname -sf $nname
  98.     then
  99.         ok=1
  100.         mv -b "$fname" "$bname"
  101.         mv $nname "$fname"
  102.         rm $tname
  103.     else
  104.         nq=$((nq - quality_loss))
  105.     fi
  106.     done
  107.     if [ $tries -ge $maxtries ]
  108.     then
  109.     rm -f $tname $nname
  110.     echo "$fname: random steganography failed" 1>&2
  111.     notify-send -i error $progname "Error in processing '$lname'"
  112.     fi
  113.     trap "" 1 2 15
  114. done
RAW Paste Data