如何在Python中解压缩Javascript

时间:2011-08-04 18:44:48

标签: javascript python

我想检索javascript脚本的内容,而不是在请求它时执行它。

编辑:我知道Python没有执行javascript代码。问题是,当我请求这个在线JS脚本时,它会被执行。我无法检索脚本的内容。也许我想要的是解码脚本,如http://jsunpack.jeek.org/dec/go

这就是我的代码请求js文件的样子:

def request(self, uri):
    data = None
    req = urllib2.Request(uri, data, self.header)
    response = urllib2.urlopen(req)
    html_text = response.read()
    return html_text.decode()

我大致知道脚本的内容是什么样的,但是在发出请求后我得到的只是一条“已加载”的消息。我的猜测是JS代码被执行了。有没有办法只是请求代码?

2 个答案:

答案 0 :(得分:2)

urllib2中没有HTML或JavaScript解释器。该模块除了获取资源并将其返回给您之外什么都不做;它肯定不会尝试执行它收到的任何JavaScript代码。如果您没有收到预期的响应,请使用wget等工具检查URL,或使用Wireshark或Fiddler监控网络连接,以查看服务器实际返回的内容。

decode()此处仅使用默认字符编码将HTTP响应正文的字节转换为Unicode字符,这可能不是一个好主意。)

ETA:

  

我想我想要的是解码Javascript,如jsunpack.jeek.org/dec/go

啊,这完全是另一种游戏。您可以获取here的来源,但您还需要安装Mozilla的JavaScript引擎SpiderMonkey,以允许它运行下载的JavaScript。

没有运行它就无法自动“解压缩”混淆的JavaScript,因为打包代码可以做任何事情而JS是图灵完备语言。所有这个工具都使用一些包装器代码运行它,用于eval这样的函数,包装器/混淆器通常使用这些函数。不幸的是,这种破坏很容易被发现,因此,如果它是恶意软件,那么你试图打开包装就会发现这种情况会失败,因为它会成功。

答案 1 :(得分:1)

我不确定我理解。如果我做了一个简化版本的代码并在一个肯定会有一些javascript的URI上运行它:

>>> import urllib2
>>> res = urllib2.urlopen("http://stackoverflow.com/questions/6946867/how-to-unpack-javascript-in-python")

你打印res(或res.decode()),javascript完好无损。

执行urlopen应检索源提供的任何字符流。你可以用它来做某事(把它渲染成html,把它解释为javascript等)。