Wątek przeniesiony 2016-07-01 19:08 z Webmastering przez dzek69.

Kod JavaScript wykonany w programie

0

Witam tworzę program do własnego użytku, który odczyta link do filmu z portalu cda.pl i uruchomi go w programie np. vlc. Mam problem z wygenerowaniem linku do video, a mianowice na stronie po załadowaniu jest generowany za pomocą skryptu napisanego w JavaScript. I tu moje pytanie czy da radę jakoś zrobić, aby program po odczytaniu skryptu ze strony wygenerował link przy użyciu javascript ?

Oto skrypt do wygenerowania :

<script type="text/javascript">
	(function() {
		var userAgent = navigator.userAgent.toLowerCase();
		var allow = false;
		function getAndroidVersion() {
			var userAgent = navigator.userAgent;
			var match = userAgent.match(/Android\s([0-9\.]*)/);
			return match ? match[1] : false;
		}
		function isAndroidNativeBrowser() {
			var userAgent = navigator.userAgent;
			return ((userAgent.indexOf('Mozilla/5.0') > -1 
						&& userAgent.indexOf('Android ') > -1 
						&& userAgent.indexOf('Version/') > -1
						&& userAgent.indexOf('AppleWebKit') > -1));
		};
		if (userAgent.indexOf('android') !== -1) {
			//if (getAndroidVersion() > '4.1.2' && !isAndroidNativeBrowser()) {
				allow = true;
			//}
		} else if (userAgent.indexOf('iphone') !== -1
					|| userAgent.indexOf('ipod') !== -1
					|| userAgent.indexOf('ipad') !== -1) {
			allow = true;
		}

		  		  eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}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}('m(l){o(\'6\',\'1://i.2.3/h-g/e/d.8\',\'1://a.2.3/b/c/5-9.f\',k)}j{n 0=v.u(\'6\');0.p.t=\'s\';0.4("7","7");0.4("q",\'1://a.2.3/b/c/5-9.f\');0.4("r",\'1://i.2.3/h-g/e/d.8\')}',32,32,'video|http|cda|pl|setAttribute|6ee0563d4635f2c377cca5697f4788e03d4f349673c873a71b1cf574a942c2b5|mediaplayer720157|controls|mp4|101|img|vid|oryginalne|lq6ee0563d4635f2c377cca5697f4788e03d4f349673c873a71b1cf574a942c2b5|1467332121|jpg|okTg|5By6ukgeoGwJanZML|le023|else|true|allow|if|var|addPlayer|style|poster|src|block|display|getElementById|document'.split('|'),0,{}))
	})();
	</script>

Mógłbym sam widząc ten kod utworzyć link, ale parametry oddzielone znakiem | wypisywane są losowo w skrypcie.

0

Albo jak by ktoś mógł mi wytłumaczyć jak działa ta funkcja eval

0

To jest spakowany kod. Wiedza o funkcji eval na nic Ci się tu nie przyda.
Nie wiem w jakim języku jest Twoja aplikacja, ale poszukaj sobie javascript unpacker nazwa_jezyka - być może znajdziesz sposób na rozpakowanie kodu bezpośrednio z Twojej aplikacji. Jak nie - to może przyda się tu node.js bądź inny silnik JS, który pozwoli Ci uruchomić ten fragment kodu i uzyskać rozpakowany string.

Demo online:
Skopiuj sobie fragment z evalem tu: http://www.strictly-software.com/unpack-javascript

Okazuje się, że produkuje to zrozumiały kod i prosty do wyciągnięcia link :)

0

@dzek69 aplikacje pisze w Javie na androida

0

https://github.com/evgenyneu/js-evaluator-for-android

http://stackoverflow.com/a/22418086

Jak mu zapodasz to co jest w evalu, ale bez samego evala, czyli:

function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}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}('m(l){o(\'6\',\'1://i.2.3/h-g/e/d.8\',\'1://a.2.3/b/c/5-9.f\',k)}j{n 0=v.u(\'6\');0.p.t=\'s\';0.4("7","7");0.4("q",\'1://a.2.3/b/c/5-9.f\');0.4("r",\'1://i.2.3/h-g/e/d.8\')}',32,32,'video|http|cda|pl|setAttribute|6ee0563d4635f2c377cca5697f4788e03d4f349673c873a71b1cf574a942c2b5|mediaplayer720157|controls|mp4|101|img|vid|oryginalne|lq6ee0563d4635f2c377cca5697f4788e03d4f349673c873a71b1cf574a942c2b5|1467332121|jpg|okTg|5By6ukgeoGwJanZML|le023|else|true|allow|if|var|addPlayer|style|poster|src|block|display|getElementById|document'.split('|'),0,{})

to powinieneś dostać stringa zawierającego kod, który możesz podglądnąć narzędziem online, które podałem wyżej. z tego kodu już bez problemu wyłuskasz URL choćby regexpem

0

@dzek69 gdy na stronie co podałeś wyżej wklejam ten kod co poniżej to generuje mi link kod ale gdy chcę użyć tej biblioteki to wywala błąd

(function() {
		var userAgent = navigator.userAgent.toLowerCase();
		var allow = false;
		function getAndroidVersion() {
			var userAgent = navigator.userAgent;
			var match = userAgent.match(/Android\s([0-9\.]*)/);
			return match ? match[1] : false;
		}
		function isAndroidNativeBrowser() {
			var userAgent = navigator.userAgent;
			return ((userAgent.indexOf('Mozilla/5.0') > -1 
						&& userAgent.indexOf('Android ') > -1 
						&& userAgent.indexOf('Version/') > -1
						&& userAgent.indexOf('AppleWebKit') > -1));
		};
		if (userAgent.indexOf('android') !== -1) {
			//if (getAndroidVersion() > '4.1.2' && !isAndroidNativeBrowser()) {
				allow = true;
			//}
		} else if (userAgent.indexOf('iphone') !== -1
					|| userAgent.indexOf('ipod') !== -1
					|| userAgent.indexOf('ipad') !== -1) {
			allow = true;
		}

		  		  eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}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}('i(n){m(\'5\',\'1://h.3.2/f/g/e.a\',\'1://b.3.2/c/7/6-9.d\',k)}j{l 0=u.t(\'5\');0.o.s=\'r\';0.4("8","8");0.4("p",\'1://b.3.2/c/7/6-9.d\');0.4("q",\'1://h.3.2/f/g/e.a\')}',31,31,'video|http|pl|cda|setAttribute|mediaplayer720157|6ee0563d4635f2c377cca5697f4788e03d4f349673c873a71b1cf574a942c2b5|oryginalne|controls|101|mp4|img|vid|jpg|lq6ee0563d4635f2c377cca5697f4788e03d4f349673c873a71b1cf574a942c2b5|i9v5kJ2LTmkvo8PxrUqwFQ|1467414758|le023|if|else|true|var|addPlayer|allow|style|poster|src|block|display|getElementById|document'.split('|'),0,{}))
	})();

A tutaj użycie bibloteki :

String encode = "function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}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}('m(l){o(\\'6\\',\\'1://i.2.3/h-g/e/d.8\\',\\'1://a.2.3/b/c/5-9.f\\',k)}j{n 0=v.u(\\'6\\');0.p.t=\\'s\\';0.4(\"7\",\"7\");0.4(\"q\",\\'1://a.2.3/b/c/5-9.f\\');0.4(\"r\",\\'1://i.2.3/h-g/e/d.8\\')}',32,32,'video|http|cda|pl|setAttribute|6ee0563d4635f2c377cca5697f4788e03d4f349673c873a71b1cf574a942c2b5|mediaplayer720157|controls|mp4|101|img|vid|oryginalne|lq6ee0563d4635f2c377cca5697f4788e03d4f349673c873a71b1cf574a942c2b5|1467332121|jpg|okTg|5By6ukgeoGwJanZML|le023|else|true|allow|if|var|addPlayer|style|poster|src|block|display|getElementById|document'.split('|'),0,{})";

        JsEvaluator jsEvaluator = new JsEvaluator(this);
        jsEvaluator.evaluate(encode, new JsCallback() {
            @Override
            public void onResult(String s) {
                Log.d(TAG, "item = " + s);
            }
        });

lub

String encode_test = "(function() {\n" +
                "\t\tvar userAgent = navigator.userAgent.toLowerCase();\n" +
                "\t\tvar allow = false;\n" +
                "\t\tfunction getAndroidVersion() {\n" +
                "\t\t\tvar userAgent = navigator.userAgent;\n" +
                "\t\t\tvar match = userAgent.match(/Android\\s([0-9\\.]*)/);\n" +
                "\t\t\treturn match ? match[1] : false;\n" +
                "\t\t}\n" +
                "\t\tfunction isAndroidNativeBrowser() {\n" +
                "\t\t\tvar userAgent = navigator.userAgent;\n" +
                "\t\t\treturn ((userAgent.indexOf('Mozilla/5.0') > -1 \n" +
                "\t\t\t\t\t\t&& userAgent.indexOf('Android ') > -1 \n" +
                "\t\t\t\t\t\t&& userAgent.indexOf('Version/') > -1\n" +
                "\t\t\t\t\t\t&& userAgent.indexOf('AppleWebKit') > -1));\n" +
                "\t\t};\n" +
                "\t\tif (userAgent.indexOf('android') !== -1) {\n" +
                "\t\t\t//if (getAndroidVersion() > '4.1.2' && !isAndroidNativeBrowser()) {\n" +
                "\t\t\t\tallow = true;\n" +
                "\t\t\t//}\n" +
                "\t\t} else if (userAgent.indexOf('iphone') !== -1\n" +
                "\t\t\t\t\t|| userAgent.indexOf('ipod') !== -1\n" +
                "\t\t\t\t\t|| userAgent.indexOf('ipad') !== -1) {\n" +
                "\t\t\tallow = true;\n" +
                "\t\t}\n" +
                "\n" +
                "\t\t  \t\t  eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}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}('i(n){m(\\'5\\',\\'1://h.3.2/f/g/e.a\\',\\'1://b.3.2/c/7/6-9.d\\',k)}j{l 0=u.t(\\'5\\');0.o.s=\\'r\\';0.4(\"8\",\"8\");0.4(\"p\",\\'1://b.3.2/c/7/6-9.d\\');0.4(\"q\",\\'1://h.3.2/f/g/e.a\\')}',31,31,'video|http|pl|cda|setAttribute|mediaplayer720157|6ee0563d4635f2c377cca5697f4788e03d4f349673c873a71b1cf574a942c2b5|oryginalne|controls|101|mp4|img|vid|jpg|lq6ee0563d4635f2c377cca5697f4788e03d4f349673c873a71b1cf574a942c2b5|i9v5kJ2LTmkvo8PxrUqwFQ|1467414758|le023|if|else|true|var|addPlayer|allow|style|poster|src|block|display|getElementById|document'.split('|'),0,{}))\n" +
                "\t})();";
        
        JsEvaluator jsEvaluator = new JsEvaluator(this);
        jsEvaluator.evaluate(encode_test, new JsCallback() {
            @Override
            public void onResult(String s) {
                Log.d(TAG, "item = " + s);
            }
        });
0

to wywala błąd

Zapomniałeś najważniejszego. Treści błędu!

0

@dzek69 aplikacja się zatrzymuje a w konsoli :

   --------- beginning of crash
07-01 17:03:00.679 2840-2840/com.maniek.webview_test E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.maniek.webview_test, PID: 2840
 java.lang.IllegalStateException: Calling View methods on another thread than the UI thread.
              at com.android.webview.chromium.WebViewChromium.createThreadException(WebViewChromium.java:286)
      at com.android.webview.chromium.WebViewChromium.checkThread(WebViewChromium.java:301)
       at com.android.webview.chromium.WebViewChromium.init(WebViewChromium.java:219)
     at android.webkit.WebView.<init>(WebView.java:606)
           at android.webkit.WebView.<init>(WebView.java:542)
            at android.webkit.WebView.<init>(WebView.java:525)
               at android.webkit.WebView.<init>(WebView.java:512)
                 at android.webkit.WebView.<init>(WebView.java:502)
             at com.evgenii.jsevaluator.WebViewWrapper.<init>(WebViewWrapper.java:20)
    at com.evgenii.jsevaluator.JsEvaluator.getWebViewWrapper(JsEvaluator.java:105)
         at com.evgenii.jsevaluator.JsEvaluator.evaluate(JsEvaluator.java:84)
    at com.maniek.webview_test.MainActivity.processHTML(MainActivity.java:132)
      at org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)
   at org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:53)
        at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:148)
  at android.os.HandlerThread.run(HandlerThread.java:61)

Dokładnie ta linijka :
jsEvaluator.evaluate(encode_test, new JsCallback() {

0

To napisz własny dekompresor w JAVIE, będzie chyba najskuteczniej :)

Tu masz sformatowany kod:

function(p, a, c, k, e, d) {
    e = function(c) {
        return c.toString(36)
    };
    if (!''.replace(/^/, String)) {
        while (c--) {
            d[c.toString(a)] = k[c] || c.toString(a)
        }
        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
}('m(l){o(\'6\',\'1://i.2.3/h-g/e/d.8\',\'1://a.2.3/b/c/5-9.f\',k)}j{n 0=v.u(\'6\');0.p.t=\'s\';0.4("7","7");0.4("q",\'1://a.2.3/b/c/5-9.f\');0.4("r",\'1://i.2.3/h-g/e/d.8\')}', 32, 32, 'video|http|cda|pl|setAttribute|6ee0563d4635f2c377cca5697f4788e03d4f349673c873a71b1cf574a942c2b5|mediaplayer720157|controls|mp4|101|img|vid|oryginalne|lq6ee0563d4635f2c377cca5697f4788e03d4f349673c873a71b1cf574a942c2b5|1467332121|jpg|okTg|5By6ukgeoGwJanZML|le023|else|true|allow|if|var|addPlayer|style|poster|src|block|display|getElementById|document'.split('|'), 0, {})

Ta ostatnia część, to kod, który można rozpakować, wcześniej jest kod, który przekształca te krzaki na czytelny kod. Ten kod przekształcający przepisz do JAVY (ja nie znam, więc nie pomogę, ale raczej nie powinno to być szczególnie trudne, while, ify są takie same, obsługa regexpów czy coś zapewne niewiele różna).

0

@dzek69 problem w tym, że układ while i if nie zawsze są takie same, są losowo układane.

0

No to nie ma przebacz - musisz mieć parser javascriptu.

0

@dzek69 doszedłem w SPACJA końcu co robi ta biblioteka co podawałeś https://github.com/evgenyneu/js-evaluator-for-android . Ona nie rozpakowuje kodu. Tylko funkcję eval wykonuje. Ale nic innego nie znalazłem.

Po użyciu tej bibloteki rezultat daje błąd, że brak zmiennych, które znajdują się w innej części kodu :)

Przykład (base64) PHNjcmlwdD5ldmdlbmlpSnNFdmFsdWF0b3IucmV0dXJuUmVzdWx0VG9KYXZhKGV2YWwoJ2Z1bmN0aW9uKHAsYSxjLGssZSxkKXtlPWZ1bmN0aW9uKGMpe3JldHVybiBjLnRvU3RyaW5nKDM2KX07aWYoIVwnXCcucmVwbGFjZSgvXi8sU3RyaW5nKSl7d2hpbGUoYy0tKXtkW2MudG9TdHJpbmcoYSldPWtbY118fGMudG9TdHJpbmcoYSl9az1bZnVuY3Rpb24oZSl7cmV0dXJuIGRbZV19XTtlPWZ1bmN0aW9uKCl7cmV0dXJuXCdcXFxcdytcJ307Yz0xfTt3aGlsZShjLS0pe2lmKGtbY10pe3A9cC5yZXBsYWNlKG5ldyBSZWdFeHAoXCdcXFxcYlwnK2UoYykrXCdcXFxcYlwnLFwnZ1wnKSxrW2NdKX19cmV0dXJuIHB9KFwnbShsKXtvKFxcXCc2XFxcJyxcXFwnMTovL2kuMi4zL2gtZy9lL2QuOFxcXCcsXFxcJzE6Ly9hLjIuMy9iL2MvNS05LmZcXFwnLGspfWp7biAwPXYudShcXFwnNlxcXCcpOzAucC50PVxcXCdzXFxcJzswLjQoIjciLCI3Iik7MC40KCJxIixcXFwnMTovL2EuMi4zL2IvYy81LTkuZlxcXCcpOzAuNCgiciIsXFxcJzE6Ly9pLjIuMy9oLWcvZS9kLjhcXFwnKX1cJywzMiwzMixcJ3ZpZGVvfGh0dHB8Y2RhfHBsfHNldEF0dHJpYnV0ZXw2ZWUwNTYzZDQ2MzVmMmMzNzdjY2E1Njk3ZjQ3ODhlMDNkNGYzNDk2NzNjODczYTcxYjFjZjU3NGE5NDJjMmI1fG1lZGlhcGxheWVyNzIwMTU3fGNvbnRyb2xzfG1wNHwxMDF8aW1nfHZpZHxvcnlnaW5hbG5lfGxxNmVlMDU2M2Q0NjM1ZjJjMzc3Y2NhNTY5N2Y0Nzg4ZTAzZDRmMzQ5NjczYzg3M2E3MWIxY2Y1NzRhOTQyYzJiNXwxNDY3MzMyMTIxfGpwZ3xva1RnfDVCeTZ1a2dlb0d3SmFuWk1MfGxlMDIzfGVsc2V8dHJ1ZXxhbGxvd3xpZnx2YXJ8YWRkUGxheWVyfHN0eWxlfHBvc3RlcnxzcmN8YmxvY2t8ZGlzcGxheXxnZXRFbGVtZW50QnlJZHxkb2N1bWVudFwnLnNwbGl0KFwnfFwnKSwwLHt9KScpLCAwKTs8L3NjcmlwdD4=

1 użytkowników online, w tym zalogowanych: 0, gości: 1