Ubuntuを起動し、TorrentとTorrent-TVを直接Samsung SmartTVで視聴します

画像

昨日の記事「 How SmartTV Forgot the Essentials」で awolandからのコメントを読んだ後、すぐにテレビでルート権とtelnet / sshを取得しようとしました。 すべての準備が整っていることがわかり、梨を砲撃するのと同じくらい簡単です!



SamyGo Widgetをインストールするだけで、すべてが実行されます!



SamyGOを提供するものは何ですか?






#-*-免責事項-*-

テレビで行うことはすべて、自分の責任とリスクで行います。 この記事の著者はあなたの肛門について一切の責任を負いません。



私のテレビ(Eシリーズ)には、次のものが必要でした。

  1. テレビにSkypeをインストールして1回実行する
  2. SamyGoウィジェットのインストーラーをUSBフラッシュドライブにダウンロードする
  3. フラッシュドライブから実行する
  4. ???
  5. 利益!


悪魔たちはどうやってやったの?


これがインストーラースクリプトです

非表示のテキスト
var Main = { } var widgetAPI = new Common.API.Widget(); var tvKey = new Common.API.TVKeyValue(); var runf1=1; var runf2=1; var LabelString="Log: "; var usbPlugin; var FilePlugin; var nUSBCount; var commonFilePath; Main.onLoad = function() { alert("Main.onLoad()"); this.enableKeys(); widgetAPI.sendReadyEvent(); Func(); }; Main.onUnload = function() { }; Main.enableKeys = function() { document.getElementById("anchor").focus(); }; Main.keyDown = function() { var keyCode = event.keyCode; switch(keyCode) { case tvKey.KEY_RETURN: case tvKey.KEY_PANEL_RETURN: widgetAPI.sendReturnEvent(); break; case tvKey.KEY_RED: if(runf2==1) { runf2=0; Log (" Please Wait 20-30 sec...."); setTimeout("Func1(commonFilePath);",3000); } else Log('Activated yet!'); break; case tvKey.KEY_ENTER: case tvKey.KEY_PANEL_ENTER: if(runf1==1) { runf1=0; Log (" Please Wait 20-30 sec...."); setTimeout("Func1(commonFilePath);",3000); } else Log('Activated yet!'); break; default: alert("Unhandled key"); break; } }; function Log(Str) { var Label = document.getElementById("LogLabel"); LabelString = LabelString+Str+" "; widgetAPI.putInnerHTML(Label,LabelString); }; function sleep(ms) { ms += new Date().getTime(); while (new Date() < ms){} }; function Func() { usbPlugin = document.getElementById("pluginStorage"); FilePlugin = document.getElementById("pluginObjectFile"); nUSBCount = eval("usbPlugin.GetUSBListSize()"); var Param; var r1=0; var r2=0; var r3=0; Log("Found <b style='font-size:30px; color:green'>" + nUSBCount + "</b> USB devices"); for (var i = 0; i < nUSBCount; i++) { var nid1 = eval("usbPlugin.GetUSBDeviceID("+i+")"); var nid = parseInt(nid1); var VN = " Vendor Name = <b style='color:green'>" + eval("usbPlugin.GetUSBVendorName("+nid+")") + "</b>"; var MN = " Model Name = <b style='color:green'>" + eval("usbPlugin.GetUSBModelName("+nid+")") + "</b>"; nPartition = eval("usbPlugin.GetUSBPartitionNum("+nid+")"); for (var j = 0; j < nPartition; j++) { var mntPath = eval("usbPlugin.GetUSBMountPath("+nid+", "+j+")"); commonFilePath = '/dtv/usb/' + mntPath; Param = "FilePlugin.IsExistedPath(commonFilePath + '/InstallSamygo/data/SamyGO.zip')"; r1 = eval(Param); Param = "FilePlugin.IsExistedPath(commonFilePath + '/InstallSamygo/data/AutoStart')"; r2 = eval(Param); Param = "FilePlugin.IsExistedPath(commonFilePath + '/InstallSamygo/data/libSkype.so')"; r3 = eval(Param); if (r1 == 1 && r2 == 1 && r3 == 1) { Log("The installation files found on USB: " + commonFilePath + VN + MN); return; } else { Log("Some installation files not found on USB: " + commonFilePath + VN + MN); return; } } Log("The installation files not found on USB: error"); } }; function Func1(Path) { var r=0; var Param; var str =''; Param="FilePlugin.Copy ('"+ Path +"/InstallSamygo/data/AutoStart','/mtd_rwcommon/moip/engines/Skype/AutoStart')"; r = eval(Param); if (r==1) str = 'OK'; else str = 'No'; Log("Step1: " + str) Param="FilePlugin.Copy ('"+ Path +"/InstallSamygo/data/libSkype.so','/mtd_rwcommon/moip/engines/Skype/libSkype.so')"; r = eval(Param); if (r==1) str = 'OK'; else str = 'No'; Log("Step2: " + str); if(runf2==1) { Param="FilePlugin.Unzip('"+ Path +"/InstallSamygo/data/SamyGO.zip','/mtd_rwcommon/widgets/user/SamyGO/')"; r = eval(Param); if (r==1) str = 'OK'; else str = 'No'; Log("Step3: " + str); } Log("Now press exit and restart tv"); };
      
      





evalを介して呼び出されるFilePlugin.Copy関数の脆弱性により、どこにでもコピーできます。 このスクリプトは、置き換えられたlibSkype.soを取得してコピーします。これは、別のスクリプトのみを実行でき、SamyGoウィジェット自体をインストールします。



SamyGoで何が見えますか?

非表示のテキスト
 var Main = { } var widgetAPI = new Common.API.Widget(); var tvKey = new Common.API.TVKeyValue(); Main.onLoad = function() { alert("Main.onLoad()"); widgetAPI.sendReadyEvent(); document.getElementById("anchor").focus(); var FilePlugin = document.getElementById("pluginObjectFile"); var Param1="FilePlugin.Copy (\"/proc/self/cmdline\", \"$(sh /mtd_rwcommon/widgets/user/SamyGO/data/run.sh)/tmp/cmdline\")"; eval(Param1); } Main.keyDown = function() { var keyCode = event.keyCode; alert("Main Key code : " + keyCode); switch (keyCode) { case tvKey.KEY_RETURN: break; } }
      
      





まあ、それは一般的に銃です! $()構文を使用して、同じ関数からシェルコマンドを実行できます。

run.shはbusyboxと他のtinselをインストールし、data.xfsをマウントし、telnetdとncを起動し、接続時にshを起動します(/ dev / ptsに問題があり、telnetに接続できない場合)、同様のinitスクリプトを実行します。



中身は?


内部には、ARMv7アーキテクチャを備えた2コアプロセッサがあり、NEONをサポートしています。Cortex-A8ファミリ、MALI 400ビデオ、512MB RAM、カーネル2.6.35.13。 一般的に、2012年のかなり典型的な「タブレット」。

猫/ proc / cpuinfo
 VDLinux#> cat /proc/cpuinfo Processor : ARMv7 Processor rev 0 (v7l) processor : 0 BogoMIPS : 1794.04 processor : 1 BogoMIPS : 1794.04 Features : swp half thumb fastmult vfp edsp neon vfpv3 CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x3 CPU part : 0xc09 CPU revision : 0 Hardware : amber3 Revision : 0000 Serial : 0000000000000000
      
      





カーネルは、SquashFS、FAT32、XFS、RFS(Samsung FS、FAT32 +ジャーナリング)、NTFS(Tuxera tntfsドライバー)をサポートしています。 モジュールのサポートがあり、いくつかのFSモジュールがSamyGoで提供され、FUSEがロードされます。たとえば、ext2 / 3/4-いいえ。 カーネルにはそれらの文字はありません。



xf86-video-maliを備えた最も一般的なXサーバーがテレビで起動され、125メガバイトのexeDSPファイルがSmartTV全体を担当します( 分析開始の 17分にIDA PROにロードされました)が、音があればより興味深い:alsaはそうではなく、exeDSPのようです/ dev / systemと直接通信します。



何ができますか?


はい、何でも。 私は怠け者なので、再度何かをクロスコンパイルしないようにしています。そのため、 Ubuntu Coreを使用して、USBフラッシュドライブにXFSパーティションを作成し、Ubuntuを展開してテレビに挿入しました。 armhfバージョンに問題があり(すべての種類の不明な命令、thumb2でコンパイルしますか?)、12.04 armelが見つかりました。

USBフラッシュドライブをテレビに挿入し、Telnetで接続し、実行するだけです。

 chroot /dtv/usb/sda1 /bin/bash
      
      





そして、完全なubuntu 12.04を取得します。

mount --bindが機能しないため、chrootでprocとsysが必要な場合(そして必要になります)、次を使用します。

 mount -t sysfs sysfs ./sys mount -t proc proc ./proc
      
      







もちろん、まず、mplayerをインストールしました。 そして、あなたは知っています、それは働きます! もちろん、ゆっくりと、そして結論から、x11のみが機能しますが、それは示しています! 昨日は字幕付きで音なしで開いていました;)





ここで、スクリーンショットはscrot'omが取りました:

画像

画像



スクリーンショットの解像度は変更していないことに注意してください。実際、テレビ(少なくともXサーバー)の解像度は1280×720です!



それでは、Ace Stream EngineとAceProxyを使用して、TVストリームとTorrentをテレビで直接視聴することにしました。 このためにはPythonが必要です。なぜなら これら2つの製品が書かれているのはその上です。 なぜなら Ace StreamはARM向けに正式にリリースされたわけではありません。実際、その開発者はややワイルドです 。その後、Raspberry PIのアンパックバージョンを取得します。



実際、Ace Streamに必要なパッケージはリンクに記述されており、AceProxyにはpython-geventのみが必要です。 このすべてを開始します。組み込みのTVブラウザーでAceProxy統計ページを開くこともできます。

画像



驚くべきことに、Ace Streamは実際にはプロセッサーをロードしないため(トップで約15%)、TVで使用できます。

現在は、一部のプレーヤー(nStreamLmodなど)を取得してAceProxyのプレイリストを作成するだけです。



他に何か?


これはすべて概念実証です。 これはすべて純粋に短期的な関心から行ったものであり、おそらく、これ以上先へ進むことはないでしょう。 ただし、サウンドがどのように機能するかについて誰かが私にヒントをくれた場合、MKVでFLACとVorbisのビデオを一緒に実行するだけで見ることができます。

SamyGoに注意してください。 デフォルトでは、多くのサービスが開始され、telnetアクセスはパスワードなしで行われます。

頑張って!



All Articles