2017-04-03 47 views
1

我试图运行jint下面的代码:Jint + JSfuck - “指数数组的边界之外”

Jint.Engine engine = new Jint.Engine(); 
var result = engine.SetValue("data", data).Execute("(/\\n(.+)/.exec(eval(data.replace(/\\s+/, \"\").slice(0, -2)))[1]);").GetCompletionValue(); 

其中,转义时,正在执行以下的javascript:

(/\n(.+)/.exec(eval(data.replace(/\s+/, "").slice(0, -2)))[1]); 

data变量相当于一个字符串JSfuck,与此类似:https://pastebin.com/vmGAebW5

的问题是,我总是一个人指数是一个超出界限rray'异常,即使JavaScript在浏览器中运行也能正常工作。任何想法是什么导致这个问题?

+0

去混淆版本是否工作? – Ryan

+0

我强烈建议你改变你的字符串声明,使其具有@ infront,特别是对于这种大小的转义字符。它使你的字符串不可读...例如:'.Execute(@“your-escaped-string-here”);' – Svek

+0

@Ryan我无法访问去混淆版本,但我认为它必须如下工具可以反混淆它:https://enkhee-osiris.github.io/Decoder-JSFuck/ – user2950509

回答

0

windows.location在Jint中不可用,因为window对象由浏览器提供。如果你想能够运行这种类型的代码,那么你需要模拟所有浏览器暴露的对象,这是一项艰巨的任务。

此外,您正在使用SetValue('window.location', ""),我认为这不是一个有效的电话。属性名称不应包含点。

+0

忘记了,我怎么才能找出是什么原因导致'索引超出数组范围'? – user2950509