圧縮コードから復元されたチューリングマシン

1日前、チューリングの誕生日が祝われ、Googleのウェブサイトにはチューリングjavascriptマシンの落書きがありました 。 これは、検索エンジンが些細で興味深いスクリプトを示した最初の例ではありません。その後、1日のお祝いの後、忘れられてしまいます。 すべてのDoodleのページにDoodleに関する言葉がほとんどないのは奇妙ですが、たとえば、検討中のチューリングマシンのDoodleのような動作モデルはありません( UPD406.26.2012、5 :20)- このリンクにライブスクリプトが表示されますが、プレイできますが、ページ上よりもさらに難読化された)。 おそらくそれらはどこかにありますが、インターネット検索は結果につながりませんでした。 インターネットの要素のこのような見事な振る舞いはいらいらし始めたので、昨日私はあまりストレスと労力を費やすことなく、作業コードを抽出して管理しようと決心しました。



これを行うには、検索ページのGoogleコードの難読化を解除し(スクリプトの量から判断すると、検索を呼び出すことさえできません)、親サイトからエンジンを解放する必要がありました。 デフォルトでエンジンに接続されているカウンターアルゴリズムを実行することが判明しましたが、ロジックタスクパッシングメカニズムは機能せず、コードによって判断するとそれが含まれていますが、三角形のボタンをクリックしても開始されません。 それにもかかわらず、作業の約20%が完了しており、私はそれが消えることを望んでいません。 別の空き時間に私が彼の面倒を見るか、誰かがリクエストを受け取って分岐し、彼(または一緒に)がタスクを開始できるかもしれません。



既に難読化を解除して、Githubすべてを引き出しました 。 著者が不満を表明し、削除を要求する場合、著者のマテリアル(Doodleからの多くのコード、スプライトアニメーションはオプション)から逃れる方法を見つけますが、現時点ではプロジェクトは教育的であると見なされます。 結局のところ、おもちゃのリエンジニアリングのタスクには別の目標、リエンジニアリングと難読化解除の方法を学ぶ方法、そして最初はそのような単純なサイトの禁止スクリプトのキッチンに精通するという目的がありません。 そのため、マシン自体のスクリプトだけでなく、ページに表示されるすべてのスクリプト(バー、フッターなど)もリポジトリに配置しました。 これは、知り合いとおもちゃ(チューリングマシン)の機能の復元の両方に役立ちます。これは、ユーザーの2つの状態を区別するためです。最初に来て最初の6レベル(「Google」の文字数)を通過します



最終的に、ゲーム全体が1つのturing12.3.jsファイルと2つのスプライト画像(turing12-hp-deferredsprite.png、turing12-hp-sprite.png)で囲まれます。 メインタスクの他のすべては無関係です。



さらに、ゲーム自体の起動は(手動で) gTuring01.htmファイルで行われ(組み込みのバイナリカウンターがマシン上で動作を開始します)、シェルやその他すべてのrs.js、ssl_gb.jsファイルに慣れるための検索ページの起動はgoogleTuring.htmにあります、ただし、最後のファイルのゲーム自体は実行されておらず、最初のファイルでのみ実行されています。 extern_chrome_ca.js-カナダのGoogleからのファイル。何をするのか不明で、ゲームには適用されません。 圧縮されたソースが必要な場合はそこにありますが、必要ではないはずです。通常、 このサービスによって難読化が解除されます



2012年に改善されたチューリングマシンシミュレーター(JS)を見つけました。

Open-Turing-Project / OpenTuring (C言語)






UPD :コメントのrrockは、ゲームをさらに開始し、レベルを渡す方法を説明しました。 これは完全なソリューションではありませんが、継続があります!



UPD22012年6月26日、1:30):Githubにコミットする前(まだ完了していません)-もう少し掘り下げます。



turing12.3.jsコードを表示すると、 var T = function(a){ ...(約3638行目)にそれぞれのマシンのタスクとプログラムが含まれていることがわかります。 最初のタスク( U = [{ ... z: ""、p: ""、)は、明らかに、デフォルトで開始するカウンタープログラムです。



さらに、人工的に作成されたページからではなく、検索ページから起動することができた理由-クリックイベントがゲームプレイの外部のオブジェクトでハングしたため、id =“ hplogo”のブロック。 最初のタスクは、明らかに「 if((Y = document.getElementById( "hplogo"))&& 」という行から始まり、IDが発生する唯一の場所です。



また、すべてのU [...]がタスクレベルのルールの選択であり、 U [0]と場所 " m.aa(U [0] .a.Va、e); "がカウンターの開始であると推測し、仮定するのは簡単ですデフォルトでは、 Ab()および「a.onload = Ab 」がデフォルトのスタートアップ関数です。 (ただし、レベル1の起動をU [1]に置き換えても、動作は変わりますが、コンテキストは重要です。)



掘りの目標は、 gTuring01.htmページからゲームの第1レベルを起動するリンクを作成することです。



UPD306/26 / 2012、3 :30):コミットが行われました。 75%の目標に到達-両方のHTMファイルが起動され、いくつかのレベルで再生されます。 動作と状態の記憶の詳細は調査されていません。 これまでの主なことは機能していることです。

rrockオプションはgithub.com/rrockru/GoogleTuringです。



UPD42012年6月26日、5時20分):しかし、このスクリプトを復活させないのではないかと心配していました。夕方にはそこに写真があり、現在はスクリプトが機能しています。 www.google.com/doodles/alan-turings-100th-birthday 。 しかし! そこで、難読化の奥深くまで埋められます(どうですか?Src = "/ doodles / js / doodle_javascript.js")。ここでは読みやすく開いています。



UPD52012年6月26日、午前6:00):ここでの作業例: spmbt.kodingen.com/gTuringMachine/index.htm










All Articles