goebelmasse

NSA mit Steganografie in Bildern trollen...

Jul 11th, 2015
1,236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.90 KB | None | 0 0
  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. #
  36. # Schlüssel für die Steganografie mit steghide
  37. # Ersetzt die X durch etwas eigenes und denkt noch etwas aus!
  38. #
  39. stegkey=$(date +xxxx-666-%Y-%m-%d-xxxx-%d-%j | md5sum - | sed 's/ .*$//')
  40. #
  41. # Dieser Qualitätsverlust wird beim Verschlüsseln erzeugt
  42. #
  43. quality_loss=4
  44. #
  45. # So viele Versuche werden gemacht
  46. #
  47. maxtries=5
  48. #
  49. # In diesem Verzeichnis werden die alten Bildversionen gespeichert.
  50. #
  51. archive_dir='steg-old'
  52. #
  53. # Programm
  54. # --------
  55. #
  56. # Ab hier braucht (hoffentlich) nichts mehr angepasst zu werden.
  57. #
  58. PATH=/bin:/usr/bin:/usr/games
  59. progname=$(basename $0)
  60. for fname
  61. do
  62.     workdir=$(dirname $fname)
  63.     olddir=$workdir/$archive_dir
  64.     if [ ! -d "$olddir" ]
  65.     then
  66.     if ! mkdir "$olddir"
  67.     then
  68.         echo "Failed to create archive directory." 1>&2
  69.         notify-send -i error "$progname" "Can not create $olddir"
  70.         exit 1
  71.     fi
  72.     fi
  73.     lname=$(basename $fname)
  74.     if [ $(file -bi "$fname" | sed 's/;.*$//') != 'image/jpeg' ]
  75.     then
  76.     echo "$fname: not a JPEG image" 1>&2
  77.     notify-send -i error "$progname" "'$lname' is not a JPEG image"
  78.     exit 1
  79.     fi
  80.     q=$(identify -verbose "$fname" | grep 'Quality' | sed 's/^.*:\s*//')
  81.     nq=$((q - quality_loss))
  82.     bname="$olddir/$(basename $fname)"
  83.     nname=/tmp/jpeg-steg-$$.jpg
  84.     tname=/tmp/jpeg-steg-$$.txt
  85.     ok=0
  86.     tries=0
  87.     trap "rm -f '$bname' $nname $tname" 1 2 15
  88.     while [ $ok -eq 0 -a $tries -lt $maxtries ]
  89.     do
  90.     tries=$((tries + 1))
  91.     if ! fortune | gpg -ae -r "$pgpfor" >$tname
  92.     then
  93.         rm $tname
  94.         exit 1
  95.     fi
  96.     if steghide embed -cf "$fname" -p "$stegkey" -ef $tname -sf $nname
  97.     then
  98.         ok=1
  99.         mv -b "$fname" "$bname"
  100.         mv $nname "$fname"
  101.         rm $tname
  102.     else
  103.         nq=$((nq - quality_loss))
  104.     fi
  105.     done
  106.     if [ $tries -ge $maxtries ]
  107.     then
  108.     rm -f $tname $nname
  109.     echo "$fname: random steganography failed" 1>&2
  110.     notify-send -i error $progname "Error in processing '$lname'"
  111.     fi
  112.     trap "" 1 2 15
  113. done
Advertisement
Add Comment
Please, Sign In to add comment