HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
rw
tweetfs
Python2013–2014
rw / tweetfs

tweetfs

An obfuscated file system that stores files and directories on Twitter. (Proof of concept.)

2Distinct people
3Mentions
0Explicit recommenders
27GitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

An obfuscated file system that stores files and directories on Twitter. (Proof of concept.)

GitHub

Where it is used

No documented product use has been verified yet.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

Mentioned in the same Hacker News threads. That is not proof they are substitutes.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 3:56:07 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by month3 dated mentions

Observed mentions: 2013-09-22 18:54:32 UTC to 2014-12-09 10:29:54 UTC.

0122013-09-01 00:00:00 UTC to 2013-10-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 commentsSep 20132013-10-01 00:00:00 UTC to 2013-11-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2013-11-01 00:00:00 UTC to 2013-12-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2013-12-01 00:00:00 UTC to 2014-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2014-01-01 00:00:00 UTC to 2014-02-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2014-02-01 00:00:00 UTC to 2014-03-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2014-03-01 00:00:00 UTC to 2014-04-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2014-04-01 00:00:00 UTC to 2014-05-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 commentsApr 20142014-05-01 00:00:00 UTC to 2014-06-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2014-06-01 00:00:00 UTC to 2014-07-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2014-07-01 00:00:00 UTC to 2014-08-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2014-08-01 00:00:00 UTC to 2014-09-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2014-09-01 00:00:00 UTC to 2014-10-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2014-10-01 00:00:00 UTC to 2014-11-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2014-11-01 00:00:00 UTC to 2014-12-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2014-12-01 00:00:00 UTC to 2015-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 commentsDec 2014

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
Sep 20132013-09-01 00:00:00 UTC2013-10-01 00:00:00 UTC101
Oct 20132013-10-01 00:00:00 UTC2013-11-01 00:00:00 UTC000
Nov 20132013-11-01 00:00:00 UTC2013-12-01 00:00:00 UTC000
Dec 20132013-12-01 00:00:00 UTC2014-01-01 00:00:00 UTC000
Jan 20142014-01-01 00:00:00 UTC2014-02-01 00:00:00 UTC000
Feb 20142014-02-01 00:00:00 UTC2014-03-01 00:00:00 UTC000
Mar 20142014-03-01 00:00:00 UTC2014-04-01 00:00:00 UTC000
Apr 20142014-04-01 00:00:00 UTC2014-05-01 00:00:00 UTC000
May 20142014-05-01 00:00:00 UTC2014-06-01 00:00:00 UTC000
Jun 20142014-06-01 00:00:00 UTC2014-07-01 00:00:00 UTC000
Jul 20142014-07-01 00:00:00 UTC2014-08-01 00:00:00 UTC000
Aug 20142014-08-01 00:00:00 UTC2014-09-01 00:00:00 UTC000
Sep 20142014-09-01 00:00:00 UTC2014-10-01 00:00:00 UTC000
Oct 20142014-10-01 00:00:00 UTC2014-11-01 00:00:00 UTC000
Nov 20142014-11-01 00:00:00 UTC2014-12-01 00:00:00 UTC000
Dec 20142014-12-01 00:00:00 UTC2015-01-01 00:00:00 UTC202

What Hacker News says

3 sources
SpamMimic works by using a context free probabilistic grammar to derive its output. Each production of the grammar is translated into a Huffman tree based on the probabilities assigned to each variable or terminal symbol in the production. For example: S -> A(.25) | B(.75) A -> aS(1.0) B -> bS(.75) | b(.25) You simply feed the mimic function an encoded message (as a binary string) until you consume all the bits. Of course you can also pad the bit string so that it always terminates on a terminal symbol. I wrote a program not too long ago that took some inspiration from SpamMimic and linguistic steganography in general. For fun I used the comments from this thread as input to my program: So why not send it as spam? The key here is hiding in this approximately 95% of HN. So why not send spammer--not a spy. For my favourite va
Read the rest
riation seems rather inefficient. It should be possible output can be used already, and you just look for in spam thousands of people with it. 2. Also send lots of receiving person and a Novel Vertex Coding and identify the system being used, it's used to encoding and identify the fake spam. Appendix B gives an enemy (Kerckhoffs's principle). [1]: https://github.com/rw/tweetfs Plainsight uses each byte of the The encoded message is: 'meet at 3'
In SpamMimic: encode your message into something innocent-looking
Previously: https://news.ycombinator.com/item?id=6427525 Pardon the essay, but I've written a tool in this space before. Back in 2011, I wrote a textual steganography library and command-line application, called Plainsight: https://github.com/rw/plainsight Additionally, @workmajj and I wrote TweetFS using Plainsight. It lets you recursively pack up directories and post them as an encoded linked list of Tweets to Twitter: https://github.com/rw/tweetfs Plainsight uses each byte of the input message to generate tokens. Bits are used to decide how to traverse the token tree, weighted by frequency. The drawbacks are 1) verbosity and 2) incorrect grammar. One of the lessons of writing Plainsight is that spam can be used to contain secret messages. Send enough gibberish to enough people, with your intended recipient included, and you'll look lik
Read the rest
e a spammer--not a spy. -- Example 1 (regular text) Type your message to encode: echo 'Meet at Union Square at noon. The password is FuriousGreen.' > cleartext Then, pipe it through Plainsight: cat cleartext | plainsight -m encipher -f sherlock.txt > ciphertext The output will be Doyle-esque gibberish: cat ciphertext | fold -s which was the case, of a light. And, his hand. "BALLARAT." only applicant?" decline be walking we do, the point of the little man in a strange, her husband's hand, going said road, path but you do know what I have heard of you, I found myself to get away from home and for the ventilator little cold night, and I he had left my friend Sherlock of our visitor and he had an idea was not to abuse step I of you, I knew what I was then the first signs it is the daughter, at least a fellow-countryman. had come. as I have already explained, the garden. what you can see a of importance. your hair. a picture upon of the money which had brought a you have a little good deal in way: out to my wife and hurry." made your hair. a charge me a series events, and excuse no sign his note-book has come away and in my old Sherlock was already down to do with the twisted Now, decipher that ciphertext: cat ciphertext | plainsight -m decipher -f sherlock.txt > deciphered cat deciphered Meet at Union Square at noon. The password is FuriousGreen. -- Example 2 (binary data) $ dd if=/dev/urandom of=/dev/stdout bs=1 count=10 | plainsight -m encipher -f 1984.txt 10+0 records in 10+0 records out 10 bytes (10 B) copied, 9e-05 s, 111 kB/s Adding models: Model: 1984.txt added in 0.89s (context == 2) input is "<stdin>", output is "<stdout>" enciphering: 100%|#####################################################################################################################################################################|474.67 B/s | Time: 0:00:00 which is a war is real, the proles used mind on the telescreen. He could see through all right to. You have read what said. 'Yes,' only in the Ministry ---- One serious use case is to seed the generator with a spam email corpus. This lets you generate messages that look like spam. Example: wget https://spamassassin.apache.org/publiccorpus/20030228_spam.tar.bz2 tar -jxvf 20030228_spam.tar.bz2 cat spam/0* > spam-corpus.txt echo "The Magic Words are Squeamish Ossifrage" | plainsight -m encipher -f spam-corpus.txt > spam_ciphertext $ cat spam_ciphertext (8.11.6/8.11.6) 3 (Normal) Internet can send e-mails until to transfer 26 10 [127.0.0.1] also include address from the most logical, mail business for your Car have a many our portals ESMTP Thu, 29 1.0 this letter on internet, <a style=3D"color: 0px; text/plain; cellspacing=3D"0" how quoted-printable about receiving you would like width=3D"15%" width=3D"15%" border="0" width="511" Date: Tue, 27 Thu, 19 26 because zzzz@localhost.spamassassin.taint.org for $ cat spam_ciphertext | plainsight -m decipher -f spam-corpus.txt Adding models: Model: spam-corpus.txt added in 2.57s (context == 2) input is "<stdin>", output is "<stdout>" deciphering: 100%|#####################################################################################################################################################################|543.84 B/s | Time: 0:00:00 The Magic Words are Squeamish Ossifrage
In SpamMimic: encode your message into something innocent-looking
I wrote a textual steganography library and CLI in 2011, called Plainsight: https://github.com/rw/plainsight Additionally, @workmajj and I wrote TweetFS using Plainsight. It lets you recursively pack up directories and post them as an encoded linked list of Tweets to Twitter: https://github.com/rw/tweetfs I presented Plainsight at Hack'n'Tell NYC in 2011 and a video was recorded: http://bit.ly/pecGgW Plainsight uses each byte of the input message to generate tokens. Bits are used to decide how to traverse the token tree, weighted by frequency. The drawbacks are 1) verbosity and 2) incorrect grammar. One of the lessons of writing Plainsight is that spam can be used to contain secret messages. Send enough gibberish to enough people, with your intended recipient included, and you'll look like a spammer--not a spy. I also wrote a fuzzing tool
Read the rest
, called Shag, to find edge cases, e.g. for single-byte inputs: https://github.com/rw/shag/blob/master/shag.rb -- Example 1 (regular text) Type your message to encode: echo 'Meet at Union Square at noon. The password is FuriousGreen.' > cleartext Then, pipe it through Plainsight: cat cleartext | plainsight -m encipher -f sherlock.txt > ciphertext The output will be Doyle-esque gibberish: cat ciphertext | fold -s which was the case, of a light. And, his hand. "BALLARAT." only applicant?" decline be walking we do, the point of the little man in a strange, her husband's hand, going said road, path but you do know what I have heard of you, I found myself to get away from home and for the ventilator little cold night, and I he had left my friend Sherlock of our visitor and he had an idea was not to abuse step I of you, I knew what I was then the first signs it is the daughter, at least a fellow-countryman. had come. as I have already explained, the garden. what you can see a of importance. your hair. a picture upon of the money which had brought a you have a little good deal in way: out to my wife and hurry." made your hair. a charge me a series events, and excuse no sign his note-book has come away and in my old Sherlock was already down to do with the twisted Now, decipher that ciphertext: cat ciphertext | plainsight -m decipher -f sherlock.txt > deciphered cat deciphered Meet at Union Square at noon. The password is FuriousGreen. -- Example 2 (binary data) $ dd if=/dev/urandom of=/dev/stdout bs=1 count=10 | plainsight -m encipher -f 1984.txt 10+0 records in 10+0 records out 10 bytes (10 B) copied, 9e-05 s, 111 kB/s Adding models: Model: 1984.txt added in 0.89s (context == 2) input is "<stdin>", output is "<stdout>" enciphering: 100%|#####################################################################################################################################################################|474.67 B/s | Time: 0:00:00 which is a war is real, the proles used mind on the telescreen. He could see through all right to. You have read what said. 'Yes,' only in the Ministry
In Show HN: Send Secret Messages over Twitter as Public Tweets

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.