JavaScript shell 是一个可以在shell 命令行下执行js脚本的命令。
好像没啥用处,要执行什么任务,大把的编程语言可以搞定,为啥要这东西呢?
小众东西有小众用途,这个的功效当然是特殊情况下使用了。

阿权找JavaScript shell这个东西,是碰到了一个问题:
下载某个网站的图片,图片加了防盗链,防盗链的做法很新奇,用js计算出验证码,然后用新的地址访问即可正常。

既然这样,如何破?

1 把算法用php重新做一遍。这个比较费力,脚本写的还很复杂,每次都换
2 用shell执行脚本,得到需要的结果。

一 安装JavaScript shell

下载编译好的二进制吧:Nightly Builds
解压即可使用

二 做个脚本测试一下:

alert("test");

运行一下
引用
./js a.js
a.js:1:0 ReferenceError: alert is not defined


这个问题的发生,也就了解了它的局限性,不是每个脚本函数都支持的,内置功能可以阅读文章后面的参考文章。
看到这个情况,很容易产生一个做法,定义alert就好,是吧?
在a.js里加上
function alert(str){ print(str);}

我们可以看到,shell里有输出test

这个就正常了,逐步调试就可以知道对方脚本调用了什么对象,定义并且输出到命令行即可。

比如:
a.js:2:0 ReferenceError: window is not defined
肯定是调用了 window.xxx 的方法了,我们定义一个window对象
var window = {};
加入脚本前头,再执行:
a.js:3:0 TypeError: window.open is not a function
修改window对象为:var window = {open:function(url){print(url);}};
这个就把打开的网址给打印出来啦,任务完成

三 用途:

php在获取了脚本后,匹配出脚本内容,在内容前加上刚才window的定义
用shell执行脚本内容,获得跳转地址,重新下载

附送正则表达式参考:
preg_match("/<script>(((?!<\/script>).)+)<\/script>/i", $data, $matches);


四 linux下如果提示这个
./js: symbol lookup error: ./js: undefined symbol: PR_SetCurrentThreadName


那可以安装需要的东西:
yum -y install nspr firefox xulrunner


五 参考内容:
Introduction to the JavaScript shell
不包含某字符串的字符串匹配 (正则表达式)
使用正则表达式找出不包含特定字符串的条目


原创内容如转载请注明:来自 阿权的书房
收藏本文到网摘
网游加速器 Homepage
2013/11/13 21:43
围观一下 对技术比较不懂啊
中国木地板十 Homepage
2013/10/27 09:50
使用起来不容易
分页: 1/1 第一页 1 最后页
发表评论
AD
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML 打开UBB 打开表情 隐藏
昵称   密码   游客无需密码
网址   电邮   [注册]
               

验证码 不区分大小写
 

阅读推荐

服务器相关推荐

开发相关推荐

应用软件推荐