Slide 1

Slide 1 text

ソースコードの ソースコードを読みたい Medley.inc Yuji Tamai

Slide 2

Slide 2 text

ソースコードという日本酒を買った

Slide 3

Slide 3 text

隠しメッセージ!

Slide 4

Slide 4 text

隠しメッセージ読んでみたい・・・ けど、写経はあまりに大変そう・・・ OCRでなんとかならんかな

Slide 5

Slide 5 text

ChatGPT4が使えると評判のBing Copilotでやってみた

Slide 6

Slide 6 text

全然ダメだった

Slide 7

Slide 7 text

AWS Rekognition使ってみた もっとダメだった

Slide 8

Slide 8 text

他に画像からテキスト起こすやつないかな・・・ Googleドライブでいけるらしい

Slide 9

Slide 9 text

Googleドライブに画像あげてGoogleドキュメントで開くだけ

Slide 10

Slide 10 text

結構いい感じ!

Slide 11

Slide 11 text

console.log(String.fromCodePoint([!![]+!![]+!![]+!![]+!![]+!![]+, [],+!![],+!![].].join("")),String.fromCodePoint([+!!,+!!],~~[]].join(""),String.fromCode ("")),String.fromCodePoint([+!![],+!![],!![]+!![]+!![]+!![],].join(""),String.fromCode []+!![]+!![]+!![]+!![]+!![]+!![],].join("")),String.fromCodePoint([+!![],+!![], ([+!![],+!![],+!![]+!![]+!![]+!![]+!![]+!![]+!![],].join("")),String.fromCode ("")),String.fromCodePoint([!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+ ("")),String.fromCodePoint([+!![],+!![],+!![]+!![]+!![]+!![]+!![]+!![],].join(String.fromCode [],].join("")),String.fromCodePoint([+!![],+!![],+""[],].join("")),String.fromCode ("")),String.fromCodePoint([+!![],+!![],+!![]+!![]+!![]+!![]+!![],].join("")),String.fromCode ("")),)console.log(String.fromCodePoint([!![]+!![]+!![]+!![]+!![] ("")),String.fromCodePoint([+!![],+!![],+!![] なにこれ?

Slide 12

Slide 12 text

「+!![]」って何? JavaScriptでは、`+!![]`は次のように解釈されます: 1. `[]`は空の配列を表します。 2. `!`は論理否定演算子で、オペランドをブール値に変換し、その逆を返します。したがって、 `![]`は`false`を返します(なぜなら、空の配列は真と評価されます)。 3. 2つ目の`!`は、先ほどの`false`を再度否定し、`true`を返します。したがって、`!![]`は`true`を 返します。 4. 最後に、`+`は単項プラス演算子で、オペランドを数値に変換します。ブール値の`true`は数 値の`1`に変換されます。 したがって、`+!![]`は`1`を返します。このようなテクニックは、 JavaScriptの型変換の特性を利用したもので、しばしば難読化や圧縮のために使用されます。 🙂

Slide 13

Slide 13 text

試しに一部出してみた console.log(String.fromCodePoint([+!![],+!![],!![]+!![]+!![]+!![]+!![],].join(""))); => s console.log(String.fromCodePoint([1,1,1+1+1+1+1,].join(""))); console.log(String.fromCodePoint([1,1,5,].join(""))); => s

Slide 14

Slide 14 text

なぜ「s」が出るの? `String.fromCodePoint([1,1,5].join(""))`が"s"になる理由は、`String.fromCodePoint`メ ソッドがUnicodeのコードポイントを文字列に変換するからです。 まず、`[1,1,5].join("")`は配列の要素を連結して`"115"`という文字列を作ります。 次に、`String.fromCodePoint("115")`は、`"115"`を数値に変換し、その数値に対応する Unicodeの文字を返します。 Unicodeのコードポイント`115`は、小文字の`s`に対応しています。 したがって、`String.fromCodePoint([1,1,5].join(""))`は`s`を返します。🙂

Slide 15

Slide 15 text

そして隠しメッセージとは!!! 絶賛解析中です!!!
 登壇に間に合いませんでした

Slide 16

Slide 16 text

曲面の文字列の解析大変 ● Googleドキュメントでも文字起こし精度は7〜8割くらい ● 元の文字が”[+!![],+!![],+!![]+!![]+!![]+!![]+!![]+!![]+!![],]”みたいなのばっかりだ から、より間違えられやすい ● 曲面を3箇所から撮影してうまくつなぎ合わせればいけるかなと思ったけど、1 枚目の時点で面倒で途中で挫折 ● パノラマ撮影機能を使って結構いい感じに1枚の画像にできたけど、それでも 間違い探しが大変 ● 間違え正すくらいなら、全部手で打った方が多分早い

Slide 17

Slide 17 text

解析完了したら
 口頭で
 お知らせします!!!
 また何かのイベントでお会いしましょう

Slide 18

Slide 18 text

ご清聴ありがとうございました