// Copyright (c) 2009 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. function Unzip(file, path, verbose) { if (verbose) { WScript.StdOut.Write(" * UNZIP " + file); } var shell_app; var fso; try { shell_app = new ActiveXObject("Shell.Application"); fso = new ActiveXObject("Scripting.FileSystemObject"); } catch (e) { WScript.StdOut.WriteLine("[-] OBJECTS " + new Number(e.number).toHex() + ": Cannot create Active-X object (" + e.description) + ")."; WScript.Quit(1); } // shell_app.Namespace() doesn't work with relative paths. //current_dir = fso.GetFolder('.').Path + '\\' //path = current_dir + path //file = current_dir + file var out; var zip; try { if (!fso.FolderExists(path)) { fso.CreateFolder(path); } out = shell_app.Namespace(path); } catch (e) { WScript.StdOut.WriteLine("[-] SHELL.APPLICATION " + new Number(e.number).toHex() + ": Failed to open output directory."); WScript.Quit(1); } if (!out) { WScript.StdOut.WriteLine("[-] SHELL.APPLICATION : Failed to open output directory."); WScript.Quit(1); } try { zip = shell_app.Namespace(file); } catch (e) { WScript.StdOut.WriteLine("[-] SHELL.APPLICATION " + new Number(e.number).toHex() + ": Failed to open zip file."); WScript.Quit(1); } if (!zip) { WScript.StdOut.WriteLine("[-] SHELL.APPLICATION " + ": Failed to open zip file."); WScript.Quit(1); } try { out.CopyHere(zip.Items()); } catch (e) { WScript.StdOut.WriteLine("[-] SHELL.APPLICATION " + new Number(e.number).toHex() + ": Failed to extract."); WScript.Quit(1); } if (verbose) { WScript.StdOut.WriteLine("ok."); } } // Utilities Number.prototype.isInt = function NumberIsInt() { return this % 1 == 0; }; Number.prototype.toHex = function NumberToHex(length) { if (arguments.length == 0) length = 1; if (typeof(length) != "number" && !(length instanceof Number)) { throw Exception("Length must be a positive integer larger than 0.", TypeError, 0); } if (length < 1 || !length.isInt()) { throw Exception("Length must be a positive integer larger than 0.", "RangeError", 0); } var result = (this + (this < 0 ? 0x100000000 : 0)).toString(16); while (result.length < length) result = "0" + result; return result; }; if (WScript.Arguments.length != 2) { WScript.StdOut.Write("Incorrect arguments to unzip.js") } else { Unzip(WScript.Arguments(0), WScript.Arguments(1), false); }