Как распаковать коды JavaScript на Android?
Я знаю, что веб-сайт ( http://jsbeautifier.org/) может распаковывать коды JavaScript. Но мой вопрос заключается в том, как распаковать коды JavaScript на Android. Есть ли API это сделать?
коды происхождения:
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('(11(){Z{4 2="0.1|17.8|16.8|15.8|18.c|19.c",2=2.14("|");4 a=1b.1a;6(a){4 b=a.1c(/([a-q-r-9\\-]+\\.[a-q-r-9\\-]+)[:\\/]/i);6(b!=Y){10(4 i=0;i<2.s;i++){6(b[1]==2[i]){13}12 6(i==2.s-1){1n 1p 1q("1s\'t 1l 1g")}}}}}1e(e){p.u.v="7://1i.1k.c/"+"?1j="+1t(p.u.v)}})();1h[\'1f\']({"1d":{"o":"7:\\/\\/x.w.z.h:f\\/d\\/g\\/n\\/A\\/l.k?j=m&y=&D=X&Q=0&P=3&R=O&U=5&T=V&W=S&M=-F&E=3&N=5&B=&C=&G=&H=&L=K","J":"I"},"1r":{"o":"7:\\/\\/x.w.z.h:f\\/d\\/g\\/n\\/A\\/l.k?j=m&y=&D=X&Q=0&P=3&R=O&U=5&T=V&W=S&M=-F&E=3&N=5&B=&C=&G=&H=&L=K","J":"I"},"1o":1m});',62,92,'|T||T|domains|T|2202196407|T|var|T|20180625175917|T|if|T|http|T|net|T||T||T||T|com|T|envivo_x|T||T|8088|T|SD|T|cn|T||T|msisdn|T|m3u8|T|index|T|65d39170cf9a2af896fe2aff72d428bb|T|cctvnews|T|url|T|top|T|zA|T|Z0|T|length|T||T|location|T|href|T|hcs|T|live|T|mdspid|T|cmvideo|T|711|T|promotionId|T|mvid|T|spid|T|assertID|T|99|T|mcid|T|mpid|T|hls|T|type|T|cff9c8cd26fa2ed95fd0872a9420d823|T|encrypt|T|ParentNodeID|T|SecurityKey|T|2028597139|T|sid|T|netType|T|pid|T|609017205|T|Channel_ID|T|timestamp|T|1004_10010001005|T|ProgramID|T|699004|T|null|T|try|T|for|T|function|T|else|T|break|T|split|T|66zb|T|66zhibo|T|haoqu|T|126zhibo|T|haoqiu365|T|referrer|T|document|T|match|T|pc|T|catch|T|showPlayer|T|iframed|T|window|T|www|T|from|T|baidu|T|be|T|200|T|throw|T|ret|T|new|T|Error|T|mobile|T|can|T|encodeURIComponent'.split('|'+String.fromCharCode(84)+'|'),0,{}))
ожидаемые коды:
(function() {
try {
var domains = "0.1|haoqu.net|66zhibo.net|66zb.net|126zhibo.com|haoqiu365.com",
domains = domains.split("|");
var a = document.referrer;
if (a) {
var b = a.match(/([a-zA-Z0-9\-]+\.[a-zA-Z0-9\-]+)[:\/]/i);
if (b != null) {
for (var i = 0; i < domains.length; i++) {
if (b[1] == domains[i]) {
break
} else if (i == domains.length - 1) {
throw new Error("can't be iframed")
}
}
}
}
} catch (e) {
top.location.href = "http://www.baidu.com/" + "?from=" + encodeURIComponent(top.location.href)
}
})();
window['showPlayer']({
"pc": {
"url": "http:\/\/live.hcs.cmvideo.cn:8088\/envivo_x\/SD\/cctvnews\/711\/index.m3u8?msisdn=65d39170cf9a2af896fe2aff72d428bb&mdspid=&spid=699004&netType=0&sid=2202196407&pid=2028597139×tamp=20180625175917&Channel_ID=1004_10010001005&ProgramID=609017205&ParentNodeID=-99&assertID=2202196407&SecurityKey=20180625175917&promotionId=&mvid=&mcid=&mpid=&encrypt=cff9c8cd26fa2ed95fd0872a9420d823",
"type": "hls"
},
"mobile": {
"url": "http:\/\/live.hcs.cmvideo.cn:8088\/envivo_x\/SD\/cctvnews\/711\/index.m3u8?msisdn=65d39170cf9a2af896fe2aff72d428bb&mdspid=&spid=699004&netType=0&sid=2202196407&pid=2028597139×tamp=20180625175917&Channel_ID=1004_10010001005&ProgramID=609017205&ParentNodeID=-99&assertID=2202196407&SecurityKey=20180625175917&promotionId=&mvid=&mcid=&mpid=&encrypt=cff9c8cd26fa2ed95fd0872a9420d823",
"type": "hls"
},
"ret": 200
});
1 ответ
Решение
Да, я нашел лучший ответ. использование ScriptEngineer
! Тем не мение, javax.script.*
не доступно в Android, как жаль.
Но я искал этот вопрос, чтобы получить окончательный ответ.
добавлять implementation 'io.apisense:rhino-android:1.0'
к зависимостям, а полные коды приведены ниже:
private String unpackJs(String jsPacked) {
ScriptEngineManager engineManager = new ScriptEngineManager();
ScriptEngine engine = engineManager.getEngineByName("rhino");
try {
engine.eval(jsPacked.replace("eval", "var _jsUnPacked = "));
} catch (Exception e) {
e.printStackTrace();
}
Object jsUnPacked = engine.get("_jsUnPacked");
return jsUnPacked.toString();
}
ОБНОВЛЕНО:
Второй ответ, используйте движок JavaScript из Java-кодов:
Загрузите jar-релиз rhino с GitHub, поместите его в каталог libs и добавьте implementation fileTree(dir: 'libs', include: ['*.jar'])
к зависимостям, а полные коды приведены ниже:
private String unpackJs(String jsPacked) {
org.mozilla.javascript.Context ct = org.mozilla.javascript.Context.enter();
ct.setOptimizationLevel(-1); // https://stackru.com/a/3859485/6482350
Scriptable scope = ct.initStandardObjects();
ct.evaluateString(scope, jsPacked.replace("eval", "var _jsUnPacked = "), null, 1, null);
Object jsUnpacked = scope.get("_jsUnPacked", scope);
return jsUnpacked.toString();
}