40

在 Windows 中,Dropbox 客户端使用 python25.dll 和 MS C 运行时库(msvcp71.dll 等)。在 OS X 上,Python 代码是编译后的字节码 (pyc)。

我的猜测是他们使用的是他们编写的通用库,然后只需要为不同的平台使用不同的钩子。

这是什么开发方法?它显然不是 IronPython 或 PyObjC。这种范式对我很有吸引力,但是我的 CS foo 和 Google foo 让我失望了。

4

6 回答 6

36

Dropbox 在 Mac 上使用了 wxPython 和 PyObjC 的组合(0.8 系列中少了 wxPython)。看起来他们已经构建了一些 UI 抽象层,但并没有压倒一切——也就是说,他们正在以正确的方式开发跨平台应用程序。

它们包含自己的 Python,主要是因为 Mac 上包含的 Python 版本因操作系统版本而异(Dropbox 支持回 10.4 IIRC);此外,他们还稍微定制了 Python 解释器以改进线程和 I/O 行为。

(我不为 Dropbox 工作,也没有任何内部知识;我所做的只是阅读他们的论坛并检查site-packages.zipDropbox 应用程序包中的文件名。)

于 2010-04-21T01:08:32.930 回答
18

对于WINDOWS,Dropbox 使用了一个类似于py2exe的模块,将其所有 .py 脚本、所需的库、资源等打包到您上面提到的发行版中(.exe、、和) library.zip,这样它们就可以在不需要安装 Python的情况下运行。这是如何使用 py2exe 实现此目的的示例代码。MS C runtime librarypython25.dll

from distutils.core import setup
import py2exe


options = {'py2exe': {
           'compressed':1,  
           'bundle_files': 2,
           'dll_excludes': ['w9xpopen.exe']
           }}
setup(console=['myapp.py'],options=options)

请参阅此处的教程以获取更多说明。

PS:如上例所示,可以使用 options 参数来控制分发中的文件数量。

于 2011-06-27T12:39:06.173 回答
6

这些人对 Dropbox 客户端代码进行逆向工程

http://www.openwall.com/presentations/WOOT13-Security-Analysis-of-Dropbox/ https://github.com/kholia/dedrop

于 2013-10-09T14:56:05.940 回答
5

事实上,他们确实捆绑了自己的 Python 2.5.4 解释器,位于/Applications/Dropbox.app/Contents/MacOS/python. PyObjC/Applications/Dropbox.app/Contents/Resources/lib/python2.5/lib-dynload似乎捆绑了它。

我对此没有权威,但它似乎完全符合您在 OP 中的建议:

我的猜测是他们正在使用他们编写的通用库,然后只需要为不同的平台使用不同的钩子

于 2010-04-20T21:28:11.880 回答
4

Python25.dll 可能不是他们的应用程序代码,它是一个包含 python 解释器副本的 dll,可以从 Windows 应用程序中调用。这些 pyc 文件可能以某种形式存在于 Windows 上,但它们可能位于存档中或被混淆。

Python 包含在 OS/X 中,因此他们可以在不发送 python 的情况下执行这些 pyc 文件,但如果他们在应用程序包中潜伏着自己的 python 版本,也不会感到惊讶。

我不知道 dropbox 如何在那里构建发行版,但是有几种工具可以将 python 应用程序捆绑到可执行包中。看看 py2exe、py2app 和或 cx_freeze。

于 2010-04-20T21:19:00.387 回答
1

最近我发表了一篇关于在 windows 上反转 Dropbox 客户端的文章。它在slideshare上可用。

简而言之,
在 Windows 上的 dropbox 使用py2exe。py2exe 将 python dll 作为资源嵌入到可执行文件中。编译后的 python 源文件又名 pyc 文件存储为附加到可执行文件末尾的 zip 存档(称为覆盖)。

提取 zip 存档将为您提供 pyc 文件,但这并不是故事的结束。pyc 文件已加密且不可反编译。只有当它们被嵌入式 python 解释器加载时,它们才会被解密。

但是,有一种方法可以不用过多担心所使用的加密算法。我们可以直接从内存中获取解密后的代码对象,让 dropbox 为我们进行解密。

于 2014-08-24T03:36:07.840 回答