Dropbox client
2010,11,02 zhangkaizhao
dropbox client 版本:0.7.79 winxp
最近在开发类似的项目。
昨晚无聊,想探探这个客户端的内容,
结果发现其实应该非常简单,
整个 dropbox client 完全使用 Python 2.5 开发而成的。
Windows XP 下 Dropbox 默认安装在用户家目录的 Application Data/Dropbox/ 目录下。
主要分析文件:
bin/Dropbox.exe
dropbox.db
主文件 Dropbox.exe
不要被 Dropbox.exe 文件有 20M 大小而吓到,
当你使用解压缩软件查看这个文件的时候,
你将惊奇的发现,这原来不过是一个压缩文件!
$ mkdir /tmp/dropbox.exe
$ 7z x Dropbox.exe -o/tmp/dropbox.exe
$ ls -l /tmp/dropbox.exe
你将看到很多已编译的 .pyc 文件和 .pyd 文件以及动态链接库 .dll 文件:
总用量 10848
drwx------ 2 zkc zkc 4096 11月 2 09:27 adodbapi
drwx------ 5 zkc zkc 4096 11月 2 09:27 arch
-rw-rw-r-- 1 zkc zkc 9121 12月 11 2009 asynchat.pyc
-rw-rw-r-- 1 zkc zkc 18417 12月 11 2009 asyncore.pyc
-rw-rw-r-- 1 zkc zkc 2209 12月 11 2009 atexit.pyc
-rw-rw-r-- 1 zkc zkc 11681 12月 11 2009 base64.pyc
-rw-rw-r-- 1 zkc zkc 20785 12月 11 2009 bdb.pyc
-rw-rw-r-- 1 zkc zkc 2961 12月 11 2009 bisect.pyc
drwx------ 2 zkc zkc 4096 11月 2 09:27 build_number
-rw-rw-r-- 1 zkc zkc 77824 12月 23 2008 bz2.pyd
-rw-rw-r-- 1 zkc zkc 31697 12月 11 2009 calendar.pyc
-rw-rw-r-- 1 zkc zkc 35649 12月 11 2009 cgi.pyc
drwx------ 2 zkc zkc 4096 11月 2 09:27 client_api
-rw-rw-r-- 1 zkc zkc 14657 12月 11 2009 cmd.pyc
-rw-rw-r-- 1 zkc zkc 37105 12月 11 2009 codecs.pyc
-rw-rw-r-- 1 zkc zkc 6977 12月 11 2009 codeop.pyc
-rw-rw-r-- 1 zkc zkc 10929 12月 11 2009 code.pyc
-rw-rw-r-- 1 zkc zkc 45617 12月 11 2009 commctrl.pyc
-rw-rw-r-- 1 zkc zkc 14241 12月 11 2009 common.pyc
drwx------ 2 zkc zkc 4096 11月 2 09:27 common_util
drwx------ 5 zkc zkc 4096 11月 2 09:27 comtypes
-rw-rw-r-- 1 zkc zkc 4417 12月 11 2009 contextlib.pyc
-rw-rw-r-- 1 zkc zkc 61825 12月 11 2009 cookielib.pyc
-rw-rw-r-- 1 zkc zkc 12273 12月 11 2009 copy.pyc
-rw-rw-r-- 1 zkc zkc 5569 12月 11 2009 copy_reg.pyc
drwx------ 3 zkc zkc 4096 11月 2 09:27 core
-rw-rw-r-- 1 zkc zkc 6433 12月 11 2009 cProfile.pyc
drwx------ 3 zkc zkc 4096 11月 2 09:27 ctypes
-rw-rw-r-- 1 zkc zkc 86016 12月 23 2008 _ctypes.pyd
-rw-rw-r-- 1 zkc zkc 160097 12月 11 2009 decimal.pyc
-rw-rw-r-- 1 zkc zkc 63585 12月 11 2009 difflib.pyc
-rw-rw-r-- 1 zkc zkc 6673 12月 11 2009 dis.pyc
drwx------ 2 zkc zkc 4096 11月 2 09:27 distutils
-rw-rw-r-- 1 zkc zkc 87121 12月 11 2009 doctest.pyc
-rw-rw-r-- 1 zkc zkc 18529 12月 11 2009 dropsyncore.pyc
-rw-rw-r-- 1 zkc zkc 1393 12月 11 2009 dummy_threading.pyc
-rw-rw-r-- 1 zkc zkc 5825 12月 11 2009 dummy_thread.pyc
drwx------ 3 zkc zkc 4096 11月 2 09:27 email
drwx------ 2 zkc zkc 4096 11月 2 09:27 encodings
-rw-rw-r-- 1 zkc zkc 7680 9月 29 2009 _fastdetails.pyd
-rw-rw-r-- 1 zkc zkc 8704 9月 29 2009 fastpath.pyd
-rw-rw-r-- 1 zkc zkc 10433 12月 11 2009 filecmp.pyc
-rw-rw-r-- 1 zkc zkc 3377 12月 11 2009 fnmatch.pyc
drwx------ 2 zkc zkc 4096 11月 2 09:27 formencode
-rw-rw-r-- 1 zkc zkc 29393 12月 11 2009 ftplib.pyc
-rw-rw-r-- 1 zkc zkc 1969 12月 11 2009 functools.pyc
-rw-rw-r-- 1 zkc zkc 4065 12月 11 2009 __future__.pyc
-rw-rw-r-- 1 zkc zkc 7073 12月 11 2009 getopt.pyc
-rw-rw-r-- 1 zkc zkc 3537 12月 11 2009 getpass.pyc
-rw-rw-r-- 1 zkc zkc 17825 12月 11 2009 gettext.pyc
-rw-rw-r-- 1 zkc zkc 2337 12月 11 2009 glob.pyc
-rw-rw-r-- 1 zkc zkc 6545 12月 11 2009 gopherlib.pyc
-rw-rw-r-- 1 zkc zkc 15809 12月 11 2009 gzip.pyc
-rw-rw-r-- 1 zkc zkc 2017 12月 11 2009 hard_trace.pyc
-rw-rw-r-- 1 zkc zkc 4385 12月 11 2009 hashlib.pyc
-rw-rw-r-- 1 zkc zkc 323584 12月 23 2008 _hashlib.pyd
-rw-rw-r-- 1 zkc zkc 11569 12月 11 2009 heapq.pyc
-rw-rw-r-- 1 zkc zkc 43425 12月 11 2009 httplib.pyc
-rw-rw-r-- 1 zkc zkc 37841 12月 11 2009 inspect.pyc
drwx------ 2 zkc zkc 4096 11月 2 09:27 installer
-rw-rw-r-- 1 zkc zkc 2145 12月 11 2009 keyword.pyc
-rw-rw-r-- 1 zkc zkc 3457 12月 11 2009 linecache.pyc
-rw-rw-r-- 1 zkc zkc 45185 12月 11 2009 locale.pyc
drwx------ 2 zkc zkc 4096 11月 2 09:27 logging
-rw-rw-r-- 1 zkc zkc 6033 12月 11 2009 _LWPCookieJar.pyc
-rw-rw-r-- 1 zkc zkc 10273 12月 11 2009 macpath.pyc
-rw-rw-r-- 1 zkc zkc 2945 12月 11 2009 macurl2path.pyc
-rw-rw-r-- 1 zkc zkc 225 12月 11 2009 md5.pyc
-rw-rw-r-- 1 zkc zkc 8561 12月 11 2009 mimetools.pyc
-rw-rw-r-- 1 zkc zkc 17745 12月 11 2009 mimetypes.pyc
-rw-rw-r-- 1 zkc zkc 12288 2月 16 2009 mmapfile.pyd
-rw-rw-r-- 1 zkc zkc 4769 12月 11 2009 _MozillaCookieJar.pyc
drwx------ 2 zkc zkc 4096 11月 2 09:27 ncrypt
-rw-rw-r-- 1 zkc zkc 909312 9月 29 2009 _ncrypt.pyd
-rw-rw-r-- 1 zkc zkc 9265 12月 11 2009 netbios.pyc
-rw-rw-r-- 1 zkc zkc 721 12月 11 2009 new.pyc
-rw-rw-r-- 1 zkc zkc 12529 12月 11 2009 ntpath.pyc
-rw-rw-r-- 1 zkc zkc 22657 12月 11 2009 ntsecuritycon.pyc
-rw-rw-r-- 1 zkc zkc 1857 12月 11 2009 nturl2path.pyc
-rw-rw-r-- 1 zkc zkc 61505 12月 11 2009 optparse.pyc
-rw-rw-r-- 1 zkc zkc 11009 12月 11 2009 os2emxpath.pyc
-rw-rw-r-- 1 zkc zkc 26097 12月 11 2009 os.pyc
-rw-rw-r-- 1 zkc zkc 45185 12月 11 2009 pdb.pyc
-rw-rw-r-- 1 zkc zkc 43185 12月 11 2009 pickle.pyc
-rw-rw-r-- 1 zkc zkc 32609 12月 11 2009 platform.pyc
-rw-rw-r-- 1 zkc zkc 10641 12月 11 2009 popen2.pyc
-rw-rw-r-- 1 zkc zkc 13089 12月 11 2009 posixpath.pyc
-rw-rw-r-- 1 zkc zkc 10337 12月 11 2009 pprint.pyc
-rw-rw-r-- 1 zkc zkc 26433 12月 11 2009 pstats.pyc
-rw-rw-r-- 1 zkc zkc 6737 12月 11 2009 py_compile.pyc
-rw-rw-r-- 1 zkc zkc 356352 3月 31 2009 pythoncom25.dll
drwx------ 4 zkc zkc 4096 11月 2 09:27 pywin
-rw-rw-r-- 1 zkc zkc 122880 2月 16 2009 pywintypes25.dll
-rw-rw-r-- 1 zkc zkc 8385 12月 11 2009 Queue.pyc
-rw-rw-r-- 1 zkc zkc 7025 12月 11 2009 quopri.pyc
-rw-rw-r-- 1 zkc zkc 25617 12月 11 2009 random.pyc
-rw-rw-r-- 1 zkc zkc 6017 12月 11 2009 repr.pyc
-rw-rw-r-- 1 zkc zkc 13553 12月 11 2009 re.pyc
-rw-rw-r-- 1 zkc zkc 34273 12月 11 2009 rfc822.pyc
-rw-rw-r-- 1 zkc zkc 7680 12月 23 2008 select.pyd
-rw-rw-r-- 1 zkc zkc 20257 12月 11 2009 sets.pyc
-rw-rw-r-- 1 zkc zkc 257 12月 11 2009 sha.pyc
-rw-rw-r-- 1 zkc zkc 8289 12月 11 2009 shlex.pyc
-rw-rw-r-- 1 zkc zkc 7553 12月 11 2009 shutil.pyc
drwx------ 2 zkc zkc 4096 11月 2 09:27 simplejson
-rw-rw-r-- 1 zkc zkc 42577 12月 11 2009 socket.pyc
-rw-rw-r-- 1 zkc zkc 53248 12月 23 2008 _socket.pyd
-rw-rw-r-- 1 zkc zkc 24576 9月 29 2009 _speedups.pyd
drwx------ 2 zkc zkc 4096 11月 2 09:27 sqlite3
-rw-rw-r-- 1 zkc zkc 514570 10月 14 2009 sqlite3.dll
-rw-rw-r-- 1 zkc zkc 53248 10月 16 2009 _sqlite3.pyd
drwx------ 10 zkc zkc 4096 11月 2 09:27 sqlobject
-rw-rw-r-- 1 zkc zkc 12417 12月 11 2009 sre_compile.pyc
-rw-rw-r-- 1 zkc zkc 6161 12月 11 2009 sre_constants.pyc
-rw-rw-r-- 1 zkc zkc 21601 12月 11 2009 sre_parse.pyc
-rw-rw-r-- 1 zkc zkc 513 12月 11 2009 sre.pyc
-rw-rw-r-- 1 zkc zkc 663552 10月 16 2009 _ssl.pyd
-rw-rw-r-- 1 zkc zkc 2625 12月 11 2009 stat.pyc
-rw-rw-r-- 1 zkc zkc 12177 12月 11 2009 StringIO.pyc
-rw-rw-r-- 1 zkc zkc 16353 12月 11 2009 stringprep.pyc
-rw-rw-r-- 1 zkc zkc 17841 12月 11 2009 string.pyc
-rw-rw-r-- 1 zkc zkc 15713 12月 11 2009 _strptime.pyc
-rw-rw-r-- 1 zkc zkc 3841 12月 11 2009 struct.pyc
-rw-rw-r-- 1 zkc zkc 33873 12月 11 2009 subprocess.pyc
-rw-rw-r-- 1 zkc zkc 70881 12月 11 2009 tarfile.pyc
-rw-rw-r-- 1 zkc zkc 16113 12月 11 2009 tempfile.pyc
-rw-rw-r-- 1 zkc zkc 11505 12月 11 2009 textwrap.pyc
-rw-rw-r-- 1 zkc zkc 6849 12月 11 2009 _threading_local.pyc
-rw-rw-r-- 1 zkc zkc 30913 12月 11 2009 threading.pyc
-rw-rw-r-- 1 zkc zkc 11953 12月 11 2009 tokenize.pyc
-rw-rw-r-- 1 zkc zkc 3857 12月 11 2009 token.pyc
-rw-rw-r-- 1 zkc zkc 12641 12月 11 2009 traceback.pyc
-rw-rw-r-- 1 zkc zkc 1313 12月 11 2009 trace_report.pyc
-rw-rw-r-- 1 zkc zkc 2705 12月 11 2009 types.pyc
drwx------ 2 zkc zkc 4096 11月 2 09:27 ui
-rw-rw-r-- 1 zkc zkc 479232 12月 23 2008 unicodedata.pyd
-rw-rw-r-- 1 zkc zkc 36929 12月 11 2009 unittest.pyc
-rw-rw-r-- 1 zkc zkc 51073 12月 11 2009 urllib2.pyc
-rw-rw-r-- 1 zkc zkc 54977 12月 11 2009 urllib.pyc
-rw-rw-r-- 1 zkc zkc 13281 12月 11 2009 urlparse.pyc
-rw-rw-r-- 1 zkc zkc 9761 12月 11 2009 UserDict.pyc
-rw-rw-r-- 1 zkc zkc 22305 12月 11 2009 uuid.pyc
-rw-rw-r-- 1 zkc zkc 4433 12月 11 2009 uu.pyc
-rw-rw-r-- 1 zkc zkc 8993 12月 11 2009 warnings.pyc
-rw-rw-r-- 1 zkc zkc 14737 12月 11 2009 weakref.pyc
-rw-rw-r-- 1 zkc zkc 21041 12月 11 2009 webbrowser.pyc
-rw-rw-r-- 1 zkc zkc 98304 3月 31 2009 win32api.pyd
-rw-rw-r-- 1 zkc zkc 14848 3月 31 2009 win32clipboard.pyd
drwx------ 5 zkc zkc 4096 11月 2 09:27 win32com
-rw-rw-r-- 1 zkc zkc 140577 12月 11 2009 win32con.pyc
-rw-rw-r-- 1 zkc zkc 14848 3月 31 2009 win32event.pyd
-rw-rw-r-- 1 zkc zkc 114688 3月 31 2009 win32file.pyd
-rw-rw-r-- 1 zkc zkc 159744 3月 31 2009 win32gui.pyd
-rw-rw-r-- 1 zkc zkc 22865 12月 11 2009 win32gui_struct.pyc
-rw-rw-r-- 1 zkc zkc 20992 3月 31 2009 win32pipe.pyd
-rw-rw-r-- 1 zkc zkc 45056 3月 31 2009 win32process.pyd
-rw-rw-r-- 1 zkc zkc 13824 2月 16 2009 win32profile.pyd
-rw-rw-r-- 1 zkc zkc 114688 3月 31 2009 win32security.pyd
-rw-rw-r-- 1 zkc zkc 5632 3月 31 2009 _win32sysloader.pyd
-rw-rw-r-- 1 zkc zkc 19456 3月 31 2009 win32ts.pyd
-rw-rw-r-- 1 zkc zkc 761856 3月 31 2009 win32ui.pyd
-rw-rw-r-- 1 zkc zkc 20480 2月 16 2009 win32wnet.pyd
-rw-rw-r-- 1 zkc zkc 113345 12月 11 2009 winerror.pyc
-rw-rw-r-- 1 zkc zkc 176128 3月 31 2009 winxpgui.pyd
drwx------ 3 zkc zkc 4096 11月 2 09:27 wx
-rw-rw-r-- 1 zkc zkc 3096576 9月 29 2009 wxmsw28uh_vc.dll
-rw-rw-r-- 1 zkc zkc 4545 12月 11 2009 zipextimporter.pyc
-rw-rw-r-- 1 zkc zkc 29025 12月 11 2009 zipfile.pyc
这其实就是一个使用类似 py2exe/pyinstaller 等 Python 打包程序生成的自解压可执行程序,
这里我们关注两个地方,一个是使用 wxPython 作为其 GUI 解决方案,所以有:
drwx------ 3 zkc zkc 4096 11月 2 09:27 wx
-rw-rw-r-- 1 zkc zkc 3096576 9月 29 2009 wxmsw28uh_vc.dll
另外一个地方是其最关键文件:
-rw-rw-r-- 1 zkc zkc 18529 12月 11 2009 dropsyncore.pyc
我想 dropbox 客户端的大部分程序逻辑都在此了。
这个已编译的 .pyc 文件也不大,
其编译前的 .py 文件估计大小为 16Kb 左右,
其行数大概就是几百行。
结合使用类似 [DePython]http://www.depython.com/ 等方式,
估计很快就可完全掌握 dropbsyncore.pyc 文件的源文件内容了。
Python 拿来做客户端程序看来还是令人难以放心啊?
数据库文件 dropbox.db
这其实就是一个 sqlite3 的数据库文件,
Python 自从 2.5 版本开始内置了完整的 sqlite3 标准模块,
所以一切显得那么的简单高效。
查看这个数据库文件:
$ sqlite3 dropbox.db
sqlite> .tables
block_cache config file_journal
sqlite> .schema block_cache
CREATE TABLE block_cache (
id INTEGER PRIMARY KEY,
hash VARCHAR(43) NOT NULL UNIQUE,
sig TEXT,
size INT,
delete_after INT,
needed_for INT
);
sqlite> .schema config
CREATE TABLE config (
id INTEGER PRIMARY KEY,
key TEXT NOT NULL UNIQUE,
value TEXT
);
sqlite> .schema file_journal
CREATE TABLE file_journal (
id INTEGER PRIMARY KEY,
server_path TEXT NOT NULL UNIQUE,
active_server_path TEXT,
active_blocklist TEXT,
active_mtime INT,
active_size INT,
active_sjid INT UNIQUE,
active_dir INT,
active_attrs TEXT,
updated_server_path TEXT,
updated_blocklist TEXT,
updated_mtime INT,
updated_size INT,
updated_sjid INT,
updated_dir INT,
updated_attrs TEXT,
on_disk TINYINT
);
sqlite> select * from config;
1|schema_version|STYKLg==
2|last_revision|KGRwMQpMMzU3Mzc2N0wKTDM1MTkyOTU1NTgxMzMwNDMyN0wKcy4=
3|proxy_server|
4|startupitem|STAwCi4=
5|proxy_requires_auth|STAwCi4=
6|show_bubbles|STAwCi4=
7|proxy_port|STgwODAKLg==
8|max_download_kBs|RjAKLg==
9|proxy_mode|STEKLg==
10|proxy_username|
11|max_upload_kBs|SS0xCi4=
12|proxy_type|VkhUVFAKcDEKLg==
13|shadowed_proxy_password|UyItOWtceDgyZ1x4YjFceGUzXHhhY1x4ZjNceGQ5XHgwYkxceGVhJ1x4OTFceGU5IgpwMQou
14|host_id|VmJjNGQ1ODYxOTIzMmVmZTc2OTlkNjI4YjBlM2NjZjUxCnAxCi4=
15|dropbox_path|VkU6XHUwMDVDZGF0YVx1MDA1Q2Ryb3Bib3hcdTAwNUNNeSBEcm9wYm94CnAxCi4=
16|email|VnpoYW5na2Fpemhhb0BnbWFpbC5jb20KcDEKLg==
17|root_ns|TDM1NzM3NjdMCi4=
18|ns_p2p_key_map|KGRwMQpMMzU3Mzc2N0wKKFYtLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS1cdTAwMEFNSUlDSkRD
Q0FVMmdBd0lCQXdJQkFUQU5CZ2txaGtpRzl3MEJBUXNGQURBWk1SY3dGUVlEVlFRREV3NWtjbTl3
XHUwMDBBWW05NExXTnNhV1Z1ZERBZUZ3MDNNREF4TURFd01EQXdNREJhRncweE1ERXlNVFV3TlRV
NU5UWmFNQmt4RnpBVlx1MDAwQUJnTlZCQU1URG1SeWIzQmliM2d0WTJ4cFpXNTBNSUhkTUEwR0NT
cUdTSWIzRFFFQkFRVUFBNEhMQURDQnh3S0JcdTAwMEF3UUN4NWxnOUtkbVNaNVpmZDZERFFSaHlP
R1YrdUFaTU90YkE5RXJzU1d6QnRQeitQNFpJelg1cWlXdUxMVkluXHUwMDBBSFVMVWR0NFNnM1Av
MmdTK0s5eG03M3MrU0paRnJHTk40dWVDSjZvditZVXN5ditSVVRycnBCTlBPeU9DN2pDTFx1MDAw
QWpVaFRGK0Y0ZFBHUXpuTjZodzhlZWtOd20vR1c3SjJNdTA3UmtCZHhmbVBaRE1rRzlvdlppem1x
bGlxTm9EaDZcdTAwMEE2L3FOSjdHc1NMdjFoUzExUmVBVEZXRjF6eTgxcGdHT3AxNk1kOW5kSGN3
UmRoTkt2N3ZZckhLdTM0SEhjY20wXHUwMDBBdHo4Q0FRVXdEUVlKS29aSWh2Y05BUUVMQlFBRGdj
RUFyR3psaUFXRnUrR3lJdGdZUUZGc0xuS2ZDelFtSkg0ZVx1MDAwQXhrZ3VsQ253L3ZxWndVeXZO
UDQzWjBpeTV0cXIybGYzenlxeldiSnpSNXFrTXlzMFlWS2F4Y04wdDBtUWoxeUpcdTAwMEE0ajlt
OXdZTjZ2TEs4ZUFuaWpINnliTThicEVncHc5eW4yKytqelRWUDQ3Rm9OcXpUSnBKejV4OTcrVDlz
T2k5XHUwMDBBNzYxbE4wbE9pb2FrQW0zNTlUN1NHL0NhWThQYlUwV2pwRUZybXg4ZXE1cVFEbE1l
QWxlcWZlS2s0TXZMSkE4R1x1MDAwQUthK09UTjc0T1NNaUlrMWZXMG5jWVBHQVpPazZyT3NyXHUw
MDBBLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLVx1MDAwQQpWLS0tLS1CRUdJTiBSU0EgUFJJVkFU
RSBLRVktLS0tLVx1MDAwQU1JSURld0lCQUFLQndRQ3g1bGc5S2RtU1o1WmZkNkREUVJoeU9HVit1
QVpNT3RiQTlFcnNTV3pCdFB6K1A0WklcdTAwMEF6WDVxaVd1TExWSW5IVUxVZHQ0U2czUC8yZ1Mr
Szl4bTczcytTSlpGckdOTjR1ZUNKNm92K1lVc3l2K1JVVHJyXHUwMDBBcEJOUE95T0M3akNMalVo
VEYrRjRkUEdRem5ONmh3OGVla053bS9HVzdKMk11MDdSa0JkeGZtUFpETWtHOW92Wlx1MDAwQWl6
bXFsaXFOb0RoNjYvcU5KN0dzU0x2MWhTMTFSZUFURldGMXp5ODFwZ0dPcDE2TWQ5bmRIY3dSZGhO
S3Y3dllcdTAwMEFySEt1MzRISGNjbTB0ejhDQVFVQ2djQkhLUEFZZHlQVUtXOVpZdzBhNXRhVUZv
Ny9mTTlSc1NLemxPckU2aXVBXHUwMDBBcnN1WTVqVzJ1SmozYWlzRWVJZEMySUVoeVNXaEFXR1pp
bWhNRVl0Y1g4cmx0cUtDUlBTRmpmWTBEOTJzeWpWRlx1MDAwQUhmL1R1aGVSZE5TR0Y2Zk4rT0Ez
MGh4Q3ptWTdmdTByNUIwckpnSUkyRDBESUhPeVFnVlk2OXJ6b2g3QzkrR3dcdTAwMEFETVFKc1I3
Qk8wb0MxZ0RuK0dxemNzTDdFK1RUT3kvem14b2cyMVZJdUl6aUQ2OUd3NkREVDJScGsrTzg4UmZk
XHUwMDBBVHNEZWhVckZQT1FEUlhyV3A5czdUSjBDWVFEbWVwd1FuT3diVjM5S2l4eHczQzhpMFJH
a0loQWc4VzM5cUhkYVx1MDAwQVVrK0dIa1lVaGhMbEJPK3l5MXM3MlNTdWxEUFo0MzQ0M3IzZjB2
SXpZRWRQaWlpdmFzUmdGZVlQRzBPaTNhUTZcdTAwMEFEVWVWaW91bU9iTHNVMUQvR2lmZDZ1WVdr
eE1DWVFERm1VWFRHclNIdkt0RUhPMlhnWHZGK2I2MUpZQU5mRDF5XHUwMDBBMGxNdndHQWF6cGph
TmF3UmNoRHdzODBOMmdrTHVOOC9rbmRqVmdZMHJubnZ3VU9OdmRpUlBUU2twd21YUlovaFx1MDAw
QXFIeEt0Y2pTcHFWNE9NMy9RT2VubDZiUTR6K0o1S1VDWVFDNFloWnpzTHppckdYVlBCYkFzQ1cx
ZEE0YzZBem5cdTAwMEFKNHN4VTVLdXFEK2VmcDUyMGFpM055WW9vcTlqRkIxWWRvL2hnc3Rnc2pG
LzIvVDE1cDl5MU8xWklqYXpSTGdNXHUwMDBBRmMrMWZoejdQZExlQ0crNExpaTlEM1AvU0Iva3Ur
dEZRblVDWUU4S0crNEtycHl4M2hzK3hXL05aTFdYR1JWQ1x1MDAwQU16aVlHSlJVSVVaTTh6M3NQ
U1FWZUFiNmJTMFV1R3Z3MEdzV3Y3TUhZdlNJejBoRnlsL201OUpMOERvWWUzVVBcdTAwMEFuVysx
Y3ljUU1iZDc2ZTNjUWpBV3VNeUFYS2x2M0ZPT0dXcGJkUUpoQUlCRjZ1QkZxT3pJTmNsWFhxWWpY
QUJHXHUwMDBBakYzM0sxZVA0OVduNDNNM0pMbEQrNHdheFc2V3g3WVlUaU9JbHVBQzBOUFBvL3ZH
YWxka1Y5bXBSVkVXN003OVx1MDAwQXUyeVZOekN4c1lvN0ZMcElpQXJyNjJqTFZqWHhCS3NMcDJN
dFJkV2lIZz09XHUwMDBBLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS1cdTAwMEEKUycwZGJh
YjMzMzZhNTg2NzU4ZTlmY2RiYzRlOGQ2NTg1NycKcDIKdHAzCnMu
19|p2p_enabled|STAwCi4=
sqlite> .quit
好家伙,东西全在这里了!
update 2010,12,13
Dropbox 的客户端逻辑其实分开好几个模块实现, dropsyncore.pyc 只是很小的一部分。
将近一年多没有运行 Dropbox ,一运行居然自动更新到最近版,从防火墙 Comodo Firewall 查看其更新下载的数据大概有 20 多M,
看来应该是将整个安装程序都下载到本地了。
新的 Dropbox.exe 中内容更多了,不过还是使用 Python 2.5 而不是目前主流的 Python 2.6 。不知道为什么。
最近 UbuntuOne 也开始推出支持 Windows 平台的客户端(beta),下载安装测试了觉得没什么值得期待的。
在自家 Ubuntu 下都那么地慢吞吞,在 Windows 下也是这德行。。。
另外, Ubuntu 使用的单点登录机制好像性能有问题。