HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
rumpeltux
dropboxdec
Python2016–2017
rumpeltux / dropboxdec

dropboxdec

Dropbox Python Bytecode Decryption Tool

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

What to know before exploring

What it is

Dropbox Python Bytecode Decryption Tool

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

No other repository is repeatedly linked in the same discussions.

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 week2 dated mentions

Observed mentions: 2016-09-11 12:26:04 UTC to 2017-03-12 11:04:29 UTC. Weeks start Monday, UTC.

012016-09-05 00:00:00 UTC to 2016-09-12 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 commentsSep 52016-09-12 00:00:00 UTC to 2016-09-19 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2016-09-19 00:00:00 UTC to 2016-09-26 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2016-09-26 00:00:00 UTC to 2016-10-03 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2016-10-03 00:00:00 UTC to 2016-10-10 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2016-10-10 00:00:00 UTC to 2016-10-17 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2016-10-17 00:00:00 UTC to 2016-10-24 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2016-10-24 00:00:00 UTC to 2016-10-31 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2016-10-31 00:00:00 UTC to 2016-11-07 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2016-11-07 00:00:00 UTC to 2016-11-14 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2016-11-14 00:00:00 UTC to 2016-11-21 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2016-11-21 00:00:00 UTC to 2016-11-28 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2016-11-28 00:00:00 UTC to 2016-12-05 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2016-12-05 00:00:00 UTC to 2016-12-12 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 commentsDec 52016-12-12 00:00:00 UTC to 2016-12-19 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2016-12-19 00:00:00 UTC to 2016-12-26 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2016-12-26 00:00:00 UTC to 2017-01-02 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2017-01-02 00:00:00 UTC to 2017-01-09 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2017-01-09 00:00:00 UTC to 2017-01-16 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2017-01-16 00:00:00 UTC to 2017-01-23 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2017-01-23 00:00:00 UTC to 2017-01-30 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2017-01-30 00:00:00 UTC to 2017-02-06 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2017-02-06 00:00:00 UTC to 2017-02-13 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2017-02-13 00:00:00 UTC to 2017-02-20 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2017-02-20 00:00:00 UTC to 2017-02-27 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2017-02-27 00:00:00 UTC to 2017-03-06 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2017-03-06 00:00:00 UTC to 2017-03-13 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 commentsMar 6

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 52016-09-05 00:00:00 UTC2016-09-12 00:00:00 UTC101
Sep 122016-09-12 00:00:00 UTC2016-09-19 00:00:00 UTC000
Sep 192016-09-19 00:00:00 UTC2016-09-26 00:00:00 UTC000
Sep 262016-09-26 00:00:00 UTC2016-10-03 00:00:00 UTC000
Oct 32016-10-03 00:00:00 UTC2016-10-10 00:00:00 UTC000
Oct 102016-10-10 00:00:00 UTC2016-10-17 00:00:00 UTC000
Oct 172016-10-17 00:00:00 UTC2016-10-24 00:00:00 UTC000
Oct 242016-10-24 00:00:00 UTC2016-10-31 00:00:00 UTC000
Oct 312016-10-31 00:00:00 UTC2016-11-07 00:00:00 UTC000
Nov 72016-11-07 00:00:00 UTC2016-11-14 00:00:00 UTC000
Nov 142016-11-14 00:00:00 UTC2016-11-21 00:00:00 UTC000
Nov 212016-11-21 00:00:00 UTC2016-11-28 00:00:00 UTC000
Nov 282016-11-28 00:00:00 UTC2016-12-05 00:00:00 UTC000
Dec 52016-12-05 00:00:00 UTC2016-12-12 00:00:00 UTC000
Dec 122016-12-12 00:00:00 UTC2016-12-19 00:00:00 UTC000
Dec 192016-12-19 00:00:00 UTC2016-12-26 00:00:00 UTC000
Dec 262016-12-26 00:00:00 UTC2017-01-02 00:00:00 UTC000
Jan 22017-01-02 00:00:00 UTC2017-01-09 00:00:00 UTC000
Jan 92017-01-09 00:00:00 UTC2017-01-16 00:00:00 UTC000
Jan 162017-01-16 00:00:00 UTC2017-01-23 00:00:00 UTC000
Jan 232017-01-23 00:00:00 UTC2017-01-30 00:00:00 UTC000
Jan 302017-01-30 00:00:00 UTC2017-02-06 00:00:00 UTC000
Feb 62017-02-06 00:00:00 UTC2017-02-13 00:00:00 UTC000
Feb 132017-02-13 00:00:00 UTC2017-02-20 00:00:00 UTC000
Feb 202017-02-20 00:00:00 UTC2017-02-27 00:00:00 UTC000
Feb 272017-02-27 00:00:00 UTC2017-03-06 00:00:00 UTC000
Mar 62017-03-06 00:00:00 UTC2017-03-13 00:00:00 UTC101

What Hacker News says

2 sources
Yep and they change things around every once in a while too. I RE'd dropbox several times using several different techniques. I just checked my old tarball containing a script which downloads dropbox binary, downloads the Python interpreter, builds the opcode table database and then decompiles everything. gvb@santarago:/tmp/lookinsidethebox$ ./run.sh fetched all dependencies..lets try decompiling no saved opcode mapping found; try to generate it pass one: automatically generate opcode mapping 108 opcodes pass two: decrypt files, patch bytecode and decompile 1928/1928 successfully decrypted and decompiled: 1727 files error while decrypting: 0 files error while decompiling: 196 files opcode misses: 7 total 0x6c (108) [#9], 0x2c (44) [#14], 0x8d (141) [#15], 0x2e (46) [#1], 0x2d (45) [#14], 0x30 (48) [#5], 0x71 (1
Read the rest
13) [#11783], A starting point to do this yourself is: https://github.com/rumpeltux/dropboxdec. After unmarshalling the new pyc files the seed read in via the rng() function is in newer Dropbox installations passed through a Mersenne twister from which 4 DWORD values are being read which are then used to construct the key for the Tiny Encryption Algorithm cipher. After that you get the binary blob back which you can unmarshall now. But you still need to figure out the opcode mapping. For that I used a trick publicly first done (to the best of my knowledge) by the author of PyREtic (Rich Smith) released at BH 2010. He just compares the stdlib pyc files with the stdlib included within dropbox (after decrypting those pyc files) byte by byte. That should yield a mapping of opcodes. Then pass everything through uncompyle2 and you've got pretty readable source code back. Some files will refuse to decompile but that means hand-editing / fine-tuning the last bits of your opcode table a bit. EDIT: follow-up on parent comment; the encryption keys are not in the interpreter. The interpreter is patched to not expose co_code and more (to make this memory dumping more difficult; injecting an shared object is a different technique that I used too). It's also patched to use the different opcode mapping and the unmarshalling of pyc files upon loading them. However the key for each pyc file is derived from data strictly in those files themselves. It's pretty clear when you load up the binary in IDA Pro and compare the unmarshalling code with a standard Python interpreter's code
In How to recover lost Python source code if it's still resident in-memory
I'm not really concerned about Dropbox's intentions, or even the accessibility integration. What worries me is: - There are numerous setuid binaries without any documentation or source code available. These have the potential to breed nasty zero-day privilege escalation exploits, possibly worse. - Dropbox goes out of its way to obfuscate its Python bytecode. This doesn't prevent intellectual property theft: there will always be people capable of reverse engineering it (e.g., https://github.com/rumpeltux/dropboxdec). The only effect that it has is to significantly decrease the security of the application: technical users can't easily review the inner workings without a substantial time investment. Hackers, on the other hand, have massive profits to gain from reverse engineering something as popular as Dropbox, and won't hesitate to do
Read the rest
so. This represents a lack of regard for security on Dropbox's part, indicating that they favor intellectual property protection over the security of their customers. When I buy a car, I can open it up, check the brakes, and be sure I'm not going to crash into a tree. I expect to be able to do the same with the software on my computer.
In How Dropbox Hacks Your Mac

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.