「Ishkur's Guide to Electronic Music」のFLASHを軽く解析してみた。

#概要
年末からFLASHのオワコン攻撃が始まっており、苦しんでいる人も多くいるかと思われる。Adobeの **Flash Player** だけでなく、**Google Chrome**、 **Mozilla Firefox**、 Microsoft **Windows Update** という波状攻撃には、**お前らそんなに仲良かったっけ？** とすら感じるほどの連携プレイで爽快感さえ感じる👍。いいぞもっとやれ。さっさと **IEも同様に終了して欲しいなぁ** と思ったのはさておき。

[Ishkur's Guide to Electronic Music](http://techno.org/electronic-music-guide/) と言えば、ダンス ミュージック シーンのジャンル解説FLASH。


* Ishkur's Guide to Electronic Music | New Home on Techno.org
http://techno.org/electronic-music-guide/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72257/3517ccc9-2555-c648-6941-2c903e85dcd6.png)

* エレクトリックミュージックの源流を辿る老舗FLASHサイト『Ishkurs Guide to Electric Music』 | Tipstour
https://tipstour.net/website/3758

このFLASHが見れなくなってしまったのは、**この世で一番のダメージ** ではないかと思う。

なのでこのFLASHの動作を解析し、人類の文化の保存に寄与するべく再構築しよう！と、妄想したものの。取り敢えず **力量** ・ **時間** ・ **体力** 、そして **権利** など無いものづくしだったので、取り敢えず簡単な解析結果についてのメモ。


# 諸々自己責任でお願いします。
JASRACから請求があったりしても、当方は関係ありませんし、当方に責任もありません。違法ダウンロードなどで摘発されても、自己責任になります。

何より、**DI.FM 及び、 HARDCORE TECHNOに迷惑がかかることの無い様に** しましょう。


# 解析
## 環境
* Windows 10 Pro v1809  
  ※ 2019年10月にインストール以後、Windows Updateもしていない (必要がないので)
* Microsoft Edge (EdgeHTML版)  
  ※ 手元でなんとかFLASHが動いたオワコン ブラウザ
* Wireshark
* Cygwin bash

## 要約
* 基点は ``music.swf``
* 各ジャンルの内容は個別ファイル
   * 楽曲データはSWF。ジャンルごとに1ファイルになっており、コントロールと複数の楽曲データが格納されている。
   * ジャンル説明はテキストファイル。ジャンル個別のSWFファイルは同じファイル名のテキストファイルを読み込んで表示される。
* 一式同じフォルダにあれば、ローカルでも ``Media Player Classic`` などでは再生出来る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72257/f964029b-38a9-e9da-e324-261dc1e8e5ef.png)


## ① 通信解析
まず実際に操作を行いながら、WiresharkにてURLをまず探す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72257/9aac4e41-26b2-00d4-5cdc-79995e8d9acb.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72257/227841df-9aa7-4801-30b5-40805e12863d.png)
※ SWFとTXTの通信が連続して発生しているのが確認できた。

## ② パターンを考える
通信内容を眺めながら、どの様なルールになっているのかを考える。

|caption|swf file|txt file|memo|
|:--|:--|:--|:--|
|RAVE|rave.swf|rave.txt|単純小文字化|
|HAPPT GABBER|happygabber.swf|happygabber.txt|スペースなし|
|GABBER HOUSE|gabberhouse.swf|gabberhouse.txt|スペースなし|
|ROTTERDAM|rotterdam.swf|rotterdam.txt|単純小文字化|
|NU STYLE GABBER|nustylegabber.swf|nustylegabber.txt|スペースなし|
|HAPPY|happyhardcore.swf|happyhardcore.txt|表記違い (衝突回避？)|
|...|...|...|
1. 表示名には表記揺れなどが見受けられる。
2. 階層分けはされておらず、ファイル名をユニークにしている。
3. 表示名とファイル名は別管理であろう。
4. SWFとテキストとは同じファイル名っぽい。

## ③ ``SWFファイル`` からファイル名表記を抽出
``music.swf`` の中身を覗くと、テキストが埋め込まれているのがわかった。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72257/16ffac0d-a4f7-9c35-6ecd-1b94d92ce8a1.png)
このテキストを一括抽出しようと考えたものの、shではバイナリ操作が出来ない。うまく特定の文字だけを通過するフィルターが出来ないか考えた結果 

1. sedで特定の文字以外を改行に置換
2. grepでswfのある行を抽出

```sh:
sed -e "s/[^a-zA-Z0-9.\-]/\n/g" music.swf | grep "swf"
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72257/f28c74c4-e75e-267a-2d7c-fe229a02cc41.png)
良い感じじゃない？

## ⑨ ~~リスト作成~~
頑張ってまとめてたけど、ちょっと心が折れた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72257/0a1acc9b-8322-83e3-b239-1c751a0b9474.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72257/ab27ba51-bc54-8bcb-6fbc-f54e4db9c5f0.png)
🤮🤮🤮🤮
この確認作業は、もう面倒くさすぎる。。。。
いずれ、気が向いたらやる。。。。


# 取り敢えず簡易収集スクリプト
大体傾向はわかったので。簡単に諸々を一括ダウンロードするスクリプト。

```sh:collect&#x20;electronic-music-guide.sh
#!/bin/sh


BASE_URL="http://techno.org/electronic-music-guide/"

# download music.swf
wget "${BASE_URL}music.swf"

# download genre swfs
sed -e "s/[^a-zA-Z0-9.\-]/\n/g" music.swf | grep "swf" | sort | uniq | while read line
do
  swf_file="${line}"
  txt_file=`echo "${line}" | sed -e "s/\.swf$/\.txt/g"`
  swf_url="${BASE_URL}${swf_file}"
  txt_url="${BASE_URL}${txt_file}"
  echo "${swf_url}"
  wget "${swf_url}"
  echo "${txt_url}"
  wget "${txt_url}"
done
```

# まとめ
正直このタイミングで、 ``システムの賞味期限に危機感を感じてこなかった企業・組織の尻拭い`` のために、FLASHを解析させられるお仕事も増えているのでは無いかと思っている。特にFLASHなんて作ったことないのに解析させられる人なんかにとっては、結構しんどいのでは無いかと思う。リバース エンジニアリングの解析する際の考え方の1つとして、なにか参考になれば。

とは言っても、Wiresharkを触ったのは初めてだったし、そんな高尚なことやってないけど。

あと、このFLASHをJavascriptで作ってみたいけど。流石にきつそうだなあ。。。


#追記
同一作者と思われる、新しいジャンル解説サイトがあった。

* Ishkur's Guide to Electronic Music  
http://music.ishkur.com/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72257/3e7edb48-6747-f70c-faf2-a0c762d6e6ff.png)

情報の解像度上がりすぎwww
FLASHからのリビルドなんて全く必要ないね！

そんな感じで、今更Flashなんて使っているということは。

* **そもそも解析する必要がある？** 
* **いちから要件定義し直したほうが正攻法なのでは？**

と言う場合も往々にあるはずなので。
安請負などせず、**何もしない** と言う選択肢も、FLASHオワコン問題については大事かなぁとお思います。

# 外部リンク
* Ishkur's Guide to Electronic Music - Wikipedia
https://en.wikipedia.org/wiki/Ishkur%27s_Guide_to_Electronic_Music

* Ishkur's Guide to Electronic Music | New Home on Techno.org
http://techno.org/electronic-music-guide/

* Ishkur's Guide to Electronic Music
http://music.ishkur.com/

* Every Noise at Once
http://everynoise.com/engenremap.html