mirror of
https://github.com/Ylianst/MeshCentral.git
synced 2024-12-26 15:15:53 -05:00
1 line
7.8 KiB
JavaScript
1 line
7.8 KiB
JavaScript
function script_setup(e,t){var d={startvars:t};return e.length<6?(console.error("Invalid script length"),null):612182341!=ReadInt(e,0)?(console.error("Invalid binary script"),null):1<ReadShort(e,4)?(console.error("Unsupported script version"),null):(d.script=e.substring(6),d.reset=function(e){d.stop(),d.ip=0,d.variables=t,d.state=1},d.start=function(e){d.stop(),0<(d.stepspeed=e)&&(d.timer=setInterval(function(){d.step()},e))},d.stop=function(){null!=d.timer&&clearInterval(d.timer),d.timer=null,d.stepspeed=0},d.getVar=function(e){if(null!=e)return d.getVarEx(e.split("."),d.variables)},d.getVarEx=function(e,t){try{return null==e?void 0:0==e.length?t:d.getVarEx(e.slice(1),t[e[0]])}catch(e){return null}},d.setVar=function(e,t){d.setVarEx(e.split("."),d.variables,t)},d.setVarEx=function(e,t,r){1==e.length?t[e[0]]=r:d.setVarEx(e.slice(1),t[e[0]],r)},d.step=function(){if(1==d.state){if(d.ip<d.script.length){var e=ReadShort(d.script,d.ip),t=ReadShort(d.script,d.ip+2),r=ReadShort(d.script,d.ip+4),n=d.ip+6,a=[];for(s in d.variables)s.startsWith("__")&&delete d.variables[s];for(var s=0;s<r;s++){var o=ReadShort(d.script,n),i=(c=d.script.substring(n+2,n+2+o)).charCodeAt(0);if(c=c.substring(1),i<2){for(;1<c.split("{").length;)var l=c.split("{").pop().split("}").shift(),c=c.replace("{"+l+"}",d.getVar(l));1==i&&(d.variables["__"+s]=decodeURI(c),c="__"+s),a.push(c)}2!=i&&3!=i||(d.variables["__"+s]=ReadSInt(c,0),a.push("__"+s)),n+=2+o}d.ip+=t;for(var u,p=[],s=0;s<10;s++)p.push(d.getVar(a[s]));try{if(e<1e4)switch(e){case 0:break;case 1:(!p[2]||"<"==p[2]&&p[1]<p[3]||"<="==p[2]&&p[1]<=p[3]||"!="==p[2]&&p[1]!=p[3]||"="==p[2]&&p[1]==p[3]||">="==p[2]&&p[1]>=p[3]||">"==p[2]&&p[1]>p[3])&&(d.ip=p[0]);break;case 2:null==a[1]?delete d.variables[a[0]]:d.setVar(a[0],p[1]);break;case 3:d.onConsole?d.onConsole(d.toString(p[0]),d):console.log(d.toString(p[0]));break;case 4:d.state=2,d.dialog=!0,setDialogMode(11,p[0],p[2],d.xxStepDialogOk,p[1],d);break;case 5:for(var s in p[1])p[1][s][p[2]]==p[3]&&(u=s);break;case 6:u=p[1].substr(p[2],p[3]);break;case 7:u=p[1].indexOf(p[2]);break;case 8:u=p[1].split(p[2]);break;case 9:u=p[1].join(p[2]);break;case 10:u=p[1].length;break;case 11:u=JSON.parse(p[1]);break;case 12:u=JSON.stringify(p[1]);break;case 13:u=p[1]+p[2];break;case 14:u=p[1]-p[2];break;case 15:u=parseInt(p[1]);break;case 16:d.state=2,d.amtstack.BatchEnum(p[0],p[1],d.xxWsmanReturn,d);break;case 17:d.state=2,d.amtstack.Put(p[0],p[1],d.xxWsmanReturn,d);break;case 18:d.state=2,d.amtstack.Create(p[0],p[1],d.xxWsmanReturn,d);break;case 19:d.state=2,d.amtstack.Delete(p[0],p[1],d.xxWsmanReturn,d);break;case 20:d.state=2,d.amtstack.Exec(p[0],p[1],p[2],d.xxWsmanReturn,d,0,p[3]);break;case 21:d.stepspeed=p[0],null!=d.timer&&(clearInterval(d.timer),d.timer=setInterval(function(){d.step()},d.stepspeed));break;case 22:d.state=2,d.amtstack.Subscribe(p[0],p[1],p[2],d.xxWsmanReturn,d,0,p[3],p[4],p[5],p[6]);break;case 23:d.state=2,d.amtstack.UnSubscribe(p[0],d.xxWsmanReturn,d,0,p[1]);break;case 24:console.log(p[1],p[2],p[1].charCodeAt(p[2])),u=p[1].charCodeAt(p[2]);break;case 25:d.state=2,amtcert_signWithCaKey(p[0],null,p[1],{CN:"Untrusted Root Certificate"},d.xxSignWithDummyCaReturn);break;default:d.state=9,console.error("Script Error, unknown command: "+e)}else e<2e4?u=script_functionTableX2[e-1e4](p[1],p[2],p[3],p[4],p[5],p[6]):script_functionTableX3&&script_functionTableX3[e-2e4]&&(u=script_functionTableX3[e-2e4](d,p[1],p[2],p[3],p[4],p[5],p[6]));null!=u&&d.setVar(a[0],u)}catch(e){"object"==typeof e&&(e=e.message),d.setVar("_exception",e)}}return 1==d.state&&d.ip>=d.script.length&&(d.state=0,d.stop()),d.onStep&&d.onStep(d),d}},d.xxStepDialogOk=function(e){d.variables.DialogSelect=e,d.state=1,d.dialog=!1,d.onStep&&d.onStep(d)},d.xxWsmanReturnFix=function(e){e&&null!=e&&(e.Header&&(e.Header=e.Header,delete e.Header),e.Body&&(e.Body=e.Body,delete e.Body),e.Responses&&(e.Responses=e.Responses,delete e.Responses),e.Response&&(e.Response=e.Response,delete e.Response),e.ReturnValueStr&&(e.ReturnValueStr=e.ReturnValueStr,delete e.ReturnValueStr))},d.xxWsmanReturn=function(e,t,r,n){if(r)for(var a in d.xxWsmanReturnFix(r),r)for(var s in d.xxWsmanReturnFix(r[a]),r[a])d.xxWsmanReturnFix(r[a][s]);d.setVar(t,r),d.setVar("wsman_result",n),d.setVar("wsman_result_str",httpErrorTable[n]||"Error #"+n),d.state=1,d.onStep&&d.onStep(d)},d.xxSignWithDummyCaReturn=function(e){d.setVar("signed_cert",btoa(_arrayBufferToString(e))),d.state=1,d.onStep&&d.onStep(d)},d.toString=function(e){return"object"==typeof e?JSON.stringify(e):e},d.reset(),d)}function script_compile(e,t){var r,n="",a=e.split("\n"),s={},o=[],i=[];for(r in a){var l=a[r];if(l.startsWith("##SWAP ")&&3==(c=l.split(" ")).length&&(i[c[1]]=c[2]),"#"!=l[0]&&0!=l.length){for(var c in i)l=l.split(c).join(i[c]);var u=l.match(/"[^"]*"|[^\s"]+/g);if(0!=u.length)if(":"!=l[0]){var p=script_functionTable1.indexOf(u[0].toLowerCase());if(-1==p&&0<=(p=script_functionTable2.indexOf(u[0].toLowerCase()))&&(p+=1e4),-1==p&&0<=(p=script_functionTable3.indexOf(u[0].toLowerCase()))&&(p+=2e4),-1==p)return t&&t("Unabled to compile, unknown command: "+u[0]),"";var d,h,b=ShortToStr(u.length-1);for(d in u)0!=d&&(":"==u[d][0]?(o.push([u[d],n.length+b.length+7]),b+=ShortToStr(5)+String.fromCharCode(3)+IntToStr(4294967295)):(h=parseInt(u[d]))==u[d]?b+=ShortToStr(5)+String.fromCharCode(2)+IntToStr(h):'"'==u[d][0]&&'"'==u[d][u[d].length-1]?b+=ShortToStr(u[d].length-1)+String.fromCharCode(1)+u[d].substring(1,u[d].length-1):b+=ShortToStr(u[d].length+1)+String.fromCharCode(0)+u[d]);n+=b=ShortToStr(p)+ShortToStr(b.length+4)+b}else s[u[0].toUpperCase()]=n.length}}for(r in o){var f=o[r][0].toUpperCase(),g=o[r][1],S=s[f];if(null==S)return t&&t("Unabled to compile, unknown label: "+f),"";n=n.substr(0,g)+IntToStr(S)+n.substr(g+4)}return IntToStr(612182341)+ShortToStr(1)+n}function script_decompile(e,t){var r="",n=6,a={};if(0<=t)n=t;else{if(e.length<6)return"# Invalid script length";var s=ReadInt(e,0),o=ReadShort(e,4);if(612182341!=s)return"# Invalid binary script: "+s;if(1!=o)return"# Invalid script version"}for(;n<e.length;){var i=ReadShort(e,n),l=ReadShort(e,n+2),c=ReadShort(e,n+4),u=n+6,p="";0<=t||(r+=":label"+(n-6)+"\n");for(var d=0;d<c;d++){var h=ReadShort(e,u),b=e.substring(u+2,u+2+h),f=b.charCodeAt(0);0==f?p+=" "+b.substring(1):1==f?p+=' "'+b.substring(1)+'"':2==f?p+=" "+ReadInt(b,1):3==f&&((b=a[f=ReadInt(b,1)])||(a[b=":label"+f]=f),p+=" "+b),u+=2+h}if(r+=i<1e4?script_functionTable1[i]+p+"\n":2e4<=i?script_functionTable3[i-2e4]+p+"\n":script_functionTable2[i-1e4]+p+"\n",n+=l,0<=t)return r}var g=r.split("\n"),r="";for(d in g){var S=g[d];(":"!=S[0]||a[S])&&(r+=S+"\n")}return r}script_functionTable1=["nop","jump","set","print","dialog","getitem","substr","indexof","split","join","length","jsonparse","jsonstr","add","substract","parseint","wsbatchenum","wsput","wscreate","wsdelete","wsexec","scriptspeed","wssubscribe","wsunsubscribe","readchar","signwithdummyca"],script_functionTable2=["encodeuri","decodeuri","passwordcheck","atob","btoa","hex2str","str2hex","random","md5","maketoarray","readshort","readshortx","readint","readsint","readintx","shorttostr","shorttostrx","inttostr","inttostrx"],script_functionTableX2=[encodeURI,decodeURI,passwordcheck,window.atob.bind(window),window.btoa.bind(window),hex2rstr,rstr2hex,random,rstr_md5,MakeToArray,ReadShort,ReadShortX,ReadInt,ReadSInt,ReadIntX,ShortToStr,ShortToStrX,IntToStr,IntToStrX],script_functionTable3=["pullsystemstatus","pulleventlog","pullauditlog","pullcertificates","pullwatchdog","pullsystemdefense","pullhardware","pulluserinfo","pullremoteaccess","highlightblock","disconnect","getsidstring","getsidbytearray"],script_functionTableX3=[PullSystemStatus,PullEventLog,PullAuditLog,PullCertificates,PullWatchdog,PullSystemDefense,PullHardware,PullUserInfo,PullRemoteAccess,script_HighlightBlock,disconnect,function(e,t){return GetSidString(t)},function(e,t){return GetSidByteArray(t)}] |