Thema: KScriptExtractor
-
10.03.2019, 00:36 #1
- Registriert seit
- 28.10.2011
- Beiträge
- 625
Thanked 279 Times in 168 PostsKScriptExtractor
Wie bereits im K3-Thread, bin ich derzeit dabei etwas mit Lappen³ herum zu dödeln.
Dabei ist der KScriptExtractor herausgekommen.
Warum ich hier Java benutze, liegt an Rhino, da ich sonst die inner functions nicht iterieren kann und mit RegEx das ganze ziemlich komplex wäre.
Was macht der Extractor?
Er verbindet sich mit preview.knuddels.de und sucht nach der aktuellen Build-Version. Danach wird die main.js gezogen und extrahiert/aufbereitet um es besser lesen zu können. Alle Dateien sind in /temp/<build>/ vorhanden.
Wie kann ich die Daten nun einsetzen?
hast du Besipielsweise die HTML und deren Resourcen vom K3-Clienten gezogen, ersetzt du die main.<build>.min.js durch folgenden Part (PHP):
PHP-Code:<?php
$bundle = '4e71efd3';
?>
<script>
let files = <?php print json_encode(glob('temp/' . $bundle . '/functions/*.js')); ?>;
let finished = 0;
files.forEach(function(file) {
var script = document.createElement('script');
script.src = file + '?t=<?php print time(); ?>'
script.charset = 'utf-8';
script.onload = function() {
console.info('Loading', file, (finished++ + 1), '/', files.length);
};
document.body.appendChild(script);
});
var _watcher = setInterval(function() {
if(finished >= files.length) {
clearInterval(_watcher);
var script = document.createElement('script');
script.src = 'temp/<?php print $bundle; ?>/manipulated.js?t=<?php print time(); ?>'
script.onload = function() {
console.info('Inject main routine');
};
document.body.appendChild(script);
}
});
</script>
P.S. der JavaScript beautifier läuft derzeit über ein Online-Script, da ich kein Bock hatte einen komplett eigenen zu schreiben - Wäre jetzt zu aufwändig, wird aber sicher noch geschehen. Leider gibt es da keine gescheiten Dinger für Java (außer das von eclipse, was zu viele depencies hätte) und irgendwelche anderen Online-Tools some limitations haben...
Download
Have fun!Geändert von Bubble Gum (10.03.2019 um 01:07 Uhr)
-
10.03.2019, 11:49 #2
- Registriert seit
- 28.10.2011
- Beiträge
- 625
Thanked 279 Times in 168 PostsAW: KScriptExtractor
Ich habe den Extractor noch einmal etwas angepasst, da er die leeren Einträge nicht hinzugefügt hatte.
Das ganze habe ich auch als OpenSource auf GitHub gestellt: https://github.com/PineappleK3/KScriptExtractor
Wer auf das beautify über den Server verzichten will, kann es auch im Code deaktivieren, dann läuft das ganze innerhalb Sekunden durch, andernfalls dauert das ganze bei 935 Funktionen etwas.
Vielleicht werde ich später, wenn ich einiges analysiert habe noch die Funktionen durch den Extractor benennen lassen. Dadurch wird die Source wenigstens bei den externisierten Funktionen etwas lesbarer/nachvollziehbarer.
Die Binarys können in den GitHub Releases gezogen werden (https://github.com/PineappleK3/KScri...actor/releases)
Download
-
10.03.2019, 14:22 #3
- Registriert seit
- 28.10.2011
- Beiträge
- 625
Thanked 279 Times in 168 PostsAW: KScriptExtractor
Ich habe nun auch einen Resolver implementiert, der Stichpunkte die in einer Datei vorhanden seien müssen überprüft. Wenn die Prüfung korrekt ist, wird die Datei nach den jeweiligen Namen benannt.
Wer also Interesse daran hat, eine Map mit den ganzen Informationen zu erstellen, kann das gerne tun
Ich bin gerade nur dabei (weil das noch als Object direkt implementiert ist), das zu externalisieren, dass eine named.map Datei existiert.
Der Inhalt ist einfach eine simple Java-Properties, mit Klassennamen als Key und Komma-Separiert die Stichwörter:
<Class> = <Text>,<Text>,<Text>,<...>
StyleLoader = [Style Loader],style-loader, text/css,stylesheet
ReactXP_ActivityIndicator = rx-activity,.rx-activity,animation,text/css
[...]
Version: 4e71efd3
Original already downloaded.
Found Loader,...
function t(t){for(var n,o,i=t[0],a=t[1],s=0,c=[];s<i.length;s++)o=i[s],r[o]&&c.push(r[o][0]),r[o]=0;for(n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n]);for(u&&u(t);c.lengthc.shift()()}var n={},r={3:0};function o(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,o),r.l=!0,r.exports}o. e=function(e){var t=[],n=r[e];if(0!==n)if(n)t.push(n[2]);else{var i=new Promise(function(t,o){n=r[e]=[t,o]});t.push(n[2]=i);var a,s=document.createElement("script");s.charset="ut f-8",s.timeout=120,o.nc&&s.setAttribute("nonce",o.nc ),s.src=function(e){return o.p+"js/"+({0:"ads",1:"app",2:"channellist",4:"resetpasswo rd",5:"vendors~app"}[e]||e)+".4e71efd3.chunk.min.js"}(e),a=function(t){s. onerror=s.onload=null,clearTimeout(u);var n=r[e];if(0!==n){if(n){var o=t&&("load"===t.type?"missing":t.type),i=t&&t.tar get&&t.target.src,a=new Error("Loading chunk "+e+" failed.\n("+o+": "+i+")");a.type=o,a.request=i,n[1](a)}r[e]=void 0}};var u=setTimeout(function(){a({type:"timeout",target:s })},12e4);s.onerror=s.onload=a,document.head.appen dChild(s)}return Promise.all(t)},o.m=e,o.c=n,o.d=function(e,t,n){o. o(e,t)||Object.defineProperty(e,t,{enumerable:!0,g et:n})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty( e,Symbol.toStringTag,{value:"Module"}),Object.defi neProperty(e,"__esModule",{value:!0})},o.t=functio n(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(o.r(n),Object.definePrope rty(n,"default",{enumerable:!0,value:e}),2&t&&"str ing"!=typeof e)for(var r in e)o.d(n,r,function(t){return e[t]}.bind(null,r));return n},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="/",o.oe=function(e){throw console.error(e),e};var i=window.webpackJsonp=window.webpackJsonp||[],a=i.push.bind(i);i.push=t,i=i.slice();for(var s=0;s<i.length;s++)t(i[s]);var u=a;o(o.s=509)}([]);
Extract Functions,...
Extract all Functions,...
.................
[Resolver] func_017 to ReactIntl
...........
[Resolver] func_028 to StyleLoader
...............
[Resolver] func_043 to ClientProtocol
........
[Resolver] func_051 to ReactTransducer
.................................................. .................................................. .................................................. ...............................................
[Resolver] func_248 to ChannelProtocol
.................................................. .................................................. .................................................. .................................................. .................................................. ........
[Resolver] func_506 to Language
.
[Resolver] func_507 to Language
.............................................
[Resolver] func_552 to ReactTimeLanguage
.......................
[Resolver] func_575 to ReactJS
.................................................. .................................................. .................................................. ..................
[Resolver] func_743 to ReactXP_ActivityIndicator
.................................................. .................................................. .................................................. ............................
[Resolver] func_921 to TrackJS
...
[Resolver] func_924 to ClientUI
.
[Resolver] func_925 to Registration
.
[Resolver] func_926 to ChatboxComponent
...
[Resolver] func_929 to LoginProtocol
......Execute POST-Process...
Available Functions: 935
Process Finished!
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.