News
bash ゼロデイ脆弱性(だと思ってた)を知った後の心の機微
これは、ひょんなことから、bash ゼロデイ脆弱性(だと思ってた)を知ってしまった私の心の動揺に関する記録
長いです
- 2019/4/6 yamayaさんオーパーツ投下
- 2019/4/6 ぐれさんの解読
- 2019/4/12 脆弱性(だと思ってた)発覚
- 2019/4/14 技術書典6
- 2019/9/2 ご回答があった
- その後
2019/4/6 yamayaさんオーパーツ投下¶
yamaya(@yamaya)さんが驚愕のオーパーツを投下する。これは、現在の人類では生み出せない未知のテクノロジーが詰まっていた。
ワイ「読めないすごいwww」ということだけは瞬時にわかり、これは解読するには本腰を入れないといけないと腹を括り、自分のあとで解読するメモに追加した。
この時は2019/4/14に開催される技術書典6に関わる準備などで忙殺されており、すぐ解読したいのをこらえた(この時は体が4~5体必要だと思っていた)
なぜかフィボナッチ数列が出力される¶
1
— シェル芸bot (@minyoruminyon) 2019年4月6日
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
10946
17711
28657
46368
75025
121393
196418
317811
514229
832040
1346269
2178309
3524578
5702887
9227465
14930352
24157817
39088169
63245986
102334155
165580141
267914296
433494437
701408733
1134903170
1836311903 https://t.co/8Rj5NtWE4W
なぜかシェルピンスキーのギャスケットが出力される¶
https://t.co/uict1Hg30k pic.twitter.com/g5ou4OweoE
— シェル芸bot (@minyoruminyon) 2019年4月7日
ちなみに私はシェル芸ピンスキーのギャスケットの方をまだ解読していない。
2019/4/6 ぐれさんの解読¶
ぐれさん(@grethlen)解読記事を公開。バスる。
とてもわかりやすく解説していらっしゃるので、興味のある方は是非。私もこれで構造については理解できた。
ここで未知のテクノロジーが紐解かれるが、この時、あんなことになるとは思いもしなかったのであった。。(フラグ)
yamayaさんの難読化シェル芸(フィボナッチ数列) 解説
https://gist.github.com/greymd/455a13bb6f757c5ccd00bfb155d525e2
このツイートの解説記事を雑に書きました。興味のある方は是非。#シェル芸#難読化シェル芸
— ぐれさん@技術書典6「こ06」 (@grethlen) 2019年4月8日
yamayaさんの難読化シェル芸(フィボナッチ数列) 解説https://t.co/cK9zHi7Iaw
このフィボナッチ数列を出す暗号文のようなシェル芸、なんとかやってること完全に理解したんだけど、単に読みづらくしているというレベルではなかった。
— ぐれさん@技術書典6「こ06」 (@grethlen) 2019年4月7日
少なくともbashのundocumentedな挙動を3つくらい利用してて、読み解きながら背筋がゾッとした。https://t.co/wfC1wsFZqN
解説記事が深イイすぎて脳が死んだwww #シェル芸
— kanata@技術書典6 こ21 (@kanata201612) 2019年4月8日
理解したけど……わからん…これを…人類が作ったとは…到底思えない…
この境地に辿り着けるイメージが全くわかない…(驚嘆) https://t.co/nKOfWxbVPz
これは本当に心からそう思っており、仮に私が自由な時間を10年ぐらい貰ったとしても、同じものを作れる気がしない。この境地に辿り着けるイメージが全くわかない(驚嘆)
2019/4/12 脆弱性(だと思ってた)発覚¶
ぐれさんから、yamayaさんがbashの脆弱性を見つけたので、例のオーパーツには触れないよう(解説記事などを公開しなよう)とご連絡を頂く。
私は、後で解読すると公言していたので、気を使って連絡して頂いたようだ。
あのオーパーツに触れると脆弱性の秘密が発見されるリスクがあるというのだ(ΩΩΩ<な、なんだってー!? )
パンドラの箱に触れてはいけない…
この謎を解明するべく我々スタッフ一同はアマゾンの奥地へ飛ぶこともなく、
なるほど、了解しました。自重しますと冷静に返答することもできず、溢れ出る興奮を隠しきれずハイテンションで「うっほおおおおお自重しますwwwwwww」となってしまった。大丈夫かコイツという一抹の不安を与えてしまった事は否めない。
ここは強めに言っておきますが、普段「うんこうんこ」と言っているシェル芸人でも、こういうことはちゃんと守る。ちゃんと守りますうんこ。
あとすいません、不謹慎に興奮してしまいました。bashのメンテナさんはリスペクトしています。
ちなみに、POCは以下である。
POC¶
整数型を宣言してる変数に外部から文字列を食わせることで任意の算術式を実行させられるというもの。任意の算術式なので、もちろんコマンドも注入できる。
$ echo '_[$(whoami >&2)]' | bash -c 'declare -i x; read x'
これを最初に見た私の気持ちは「わからんわwwwwwwwww」であった。
どうしてこれで、コマンドが実行されるのかわからなすぎて笑った。あとやべーなやっぱり。バックエンドでbash動いているシステムはけっこう危険。
脆弱性に名前つかないかな¶
このあと、興奮冷めやらず、CVE番号振られるだろうな~、あ、Shellshockみたいに名前つかないかな~。UNKOにならないかな~
UNdocument Killing Obfuscated ──UNKO
こんな感じだな、よし満足したwとやっていた。頭おかしい。
セキュリティ好きなので、自らの手でCVE番号を取得するのが夢だったりします。
2019/4/14 技術書典6¶
とまぁ、この脆弱性の連絡を頂いたのが技術書典6のなんと2日前である。こういう大イベントは意外と重なりがち。
技術書典はもぅ頒布する側としての参加は初めてでもあったので、すごく楽しかった。
と、同時にbashのゼロデイ脆弱性(だと思ってた)を知っているという甘美な秘密(すいません)を抱えながら参加することになった。いい経験だった。
脆弱性が家にあると、ちょっと嫌なことがあっても「まあ家に帰れば脆弱性あるしな」ってなるし仕事でむかつく人に会っても「そんな口きいていいのか?私は自宅で脆弱性とよろしくやってる身だぞ」ってなれる。戦闘力を求められる現代社会において脆弱性と同棲することは有効
ただし、この脆弱性について私は1ミリも貢献していない。
あ、よかったらポチっとお願いします。
2019/9/2 ご回答があった¶
yamayaさんが、以下を投稿される。大変にわかり味がある。
どさにっき¶
使ってる人がいちばん多いだろうからタイトルでは bash としてるけど、ここで取り上げることは zsh および ksh 一族(本家 ksh、pdksh、mksh)にも該当する。ash、dash などでは該当しない。...
結論は、yamayaさんの投稿から引用させて頂くと、以下であった。
「スクリプトを書く人が対処すべき問題であってシェルそのものの問題ではない」との回答
私個人としては、bashに対して恨みはないどころか毎日使わせて頂いて本当にありがとうございます。
なので、仕様であれば仕様であると、とりあえず受け入れることにした。
ここらへん各言語に裁量があって、開発効率とのトレードオフになっていると理解している。
例えばPHPは注意してコーディングしないと脆弱性を生みやすい(偏見かも)んだけど、PHPがなければWordPressは生まれなかったと開発者の方が述べている。
そして、いま書いているこの日記のようなものを公開するタイミングを考え出す。変に煽ってないだろうか、コードを1行追加するのだって簡単じゃない場合が沢山あるのを知っている。業務のバッチ処理に影響がでるかもしれない、と、若干気を揉んで、しかし最大のリスクは、この挙動を知らないままでいることだと思い、早々に公開することを決めた。(ままま、この記事どれだけの人が見るんだというのはあるけれど)
あと、ぐれさん解説してくれるかもしれないので、これも期待
その後¶
jus共催 第43回大暴れシェル芸勉強会 に参加しました
第43回大暴れシェル芸勉強会¶
アツかった(いろんな意味で)
jus共催 第43回シェル芸勉強会リンク集 | 上田ブログ¶
2019年8月10日土曜日、さくらインターネット様のセミナールームにて、 日本UNIXユーザ会 さんとシェル芸勉強会を共催いたしました。また、松江、大阪、長崎でサテライト会場を設けていただきました。毎度略儀ながら、ご協力いただいた皆様ありがとうございました。 個人的には、大阪サテライトの呪文詠唱シェル芸が強烈すぎました。 昨日の呪文詠唱シェル芸の様子 #やばい #シェル芸 https://t.co/2kvwPfrmue - 上田 隆一 (@ryuichiueda) August 11 2019 「第43回大暴れシェル芸勉強会」をトゥギャりました。 https://t.co/QjN37xbaF0 - 上田 隆一 (@ryuichiueda) August 10 2019 はてなブログに投稿しました第43回シェル芸勉強会 大阪サテライト レポート https://t.co/t9iusynaSR #はてなブログ - so (@3socha) August
知見¶
同じ文字が使われるパターンを検出する¶
難しいgrep芸を使えば可能
$ seq 4321 | grep -Ev '(.).*\1'
awk 1文字ずつで処理する¶
デミリタに空文字を設定
-F "" (Fと""の間はスペースで空ける)を使うことで1文字単位で処理できるようになる
$ echo abcdefg|awk -F "" '{print $0,$1,$3,$5}'
abcdefg a c e
bashcms本は面白いから買うべき¶
フルスクラッチから1日でCMSを作る シェルスクリプト高速開発手法入門 改訂2版 単行本 – 2019/6/28
https://amzn.to/31tfSzY
Ryotoさんのbash製Webサーバに載せればオールbash製Webシステムが完成しますね…!
https://github.com/ryotosaito/shttpd
bashでwebサーバを作っている
https://docs.google.com/presentation/d/1AHY_mPz07DcaERwygWuj3hAPvzlgcjJ4KC102wK5QYg/edit?usp=sharing
LT¶
今回は濃かった。濃いLT揃いでした。
VUIでシェル芸が実行される歴史的瞬間
昨日の呪文詠唱シェル芸の様子 #やばい #シェル芸https://t.co/2kvwPfrmue
— 上田 隆一 (@ryuichiueda) August 11 2019
bashでwebサーバを作っている¶
bashでwebサーバを 作っている Ryoto (@systemctl_ryoto)
ANSIエスケープシーケンスで遊ぶ - /home/jiro4989¶
発表者 次郎 目次 自己紹介 ANSIエスケープシーケンスとは ANSI escで遊ぶ textimgと実装 まとめ 自己紹介 発表者 次郎 @jiro_saburomaru https://twitter.com/jiro_saburomaru 社会人2年目のサーバサイドエンジニア GoとNimでCLIツールを作ったりするのが趣味 2019年4月に前職を退職 2019年7月に転職先が決まりました
シェル芸川柳。意外に難しい。みんなも詠もう!
jus共催 第42回BLACK HOLEシェル芸勉強会 に参加しました
jus共催 第42回BLACK HOLEシェル芸勉強会¶
今回も激しい
jus共催 第42回シェル芸勉強会リンク集 | 上田ブログ¶
null
【問題と解答】jus共催 第42回BLACK HOLEシェル芸勉強会 | 上田ブログ¶
null
jus共催 第42回BLACK HOLEシェル芸勉強会¶
2019年6月15日 さくらインターネットさんのセミナールーム + 松江、長崎、大阪のサテライト会場にて問題と解答:
なぜBLACK HOLEなのか¶
記念すべき第42回開催にちなんで、BLACK HOLEと命名したとのこと!
アトランチスの謎というファミコンのゲームがありました。懐かしい(?)ですね。スーパマリオで言う所の土管に入ると特定のステージにワープする事ができるのですが、42面がトラウマ級の鬼畜仕様で、残機を全部持って行かれる初見殺しステージを元に命名したとw
42面には、BLACK HOLEと書いてあります
生命、宇宙、そして万物についての究極の疑問の答えではないそうです。人によって"42"でいろいろ連想することが違いますね。
知見¶
awkに渡したコマンドを逐次再実行させるには¶
awk内でコマンドの実行結果を渡せますが、closeしておかないと初回実行の出力結果が使い回されます。
これだと、matsuyaは同じメニューしか出力してくれません。
$ seq 2 20 | factor |
awk 'NF==2{"matsuya" | getline a;print $1,a}NF!=2{print $1}' |
sed 's/:$//'
こうしてmatsuyaをcloseしないと再実行されないです
$ seq 2 20 | factor |
awk 'NF==2{"matsuya" | getline a;print $1,a;close("matsuya")}NF!=2{print $1}' |
sed 's/:$//'
textimgコマンド¶
シェル芸botで毎分使われているターミナルのスクリーンショットを撮ってくれるコマンド
次郎さん作成
https://github.com/jiro4989/textimg
上田さん改定本買うしかない¶
フルスクラッチから1日でCMSを作る シェルスクリプト高速開発手法入門 改訂2版 単行本 – 2019/6/28
https://amzn.to/31tfSzY
シェルスクリプトでCMSを作ってるすげーやつ
これはビックリ情報なんですが、上田ブログはなんとシェルスクリプトで動いていると…!
シェルスクリプトなのに速えぇー
ワイ昔cgiをシェルスクリプトで書いてたことがあったのですが、処理速度が課題でした。まったくそれを感じさせない速度で動いています。すごい。
LT¶
難daコレwww¶
なんだこれwww
難daコレ.pdf¶
難daコレ.pdf
記号で書く難読化シェル芸の系譜と、やべーやつの解析¶
ワイがLTしたやつ
新MarpをWSL上のDockerを使って試す
electron製の旧Marpをずっと使わせて頂いております
この旧Marpなんですが、pdf出力時の画像が荒くなってしまう場合がありました
そんな訳で新Marpに期待しており、pdf化の際に画像がキレイに出るか確認してみました
Marpとは¶
旧Marp¶
- electron製でどのプラットフォームでも動く
- markdownで書いて、pdfで出力できる
- 旧とはいえ、今でも現役。十二分に使える
新Marp¶
- 現在開発中?electron製ではない
- CUIで操作したり、WebUIがあったり、いろいろある
- もちろんpdfも出るし、reveal.jsのような使い方もできる
今回試す環境¶
以下の流れでやっていきます。
- Windows10のWSL(Windows Subsystem for Linux)にDockerを入れる
- MarpのdockerイメージからCLIコマンドを呼び出してブラウザで表示
- ブラウザからの印刷機能でpdf化する
試してみる¶
WSL(Windows Subsystem for Linux)のインストール¶
ググるといろいろ出てくるので省略
私はUbuntsu入れてます。これを試した時の環境は以下
$ cat /etc/issue Ubuntu 18.04.2 LTS \n \l
Dockerのインストール¶
以下を参考にしましたが、現状だとちょっと異なる点があるので注意
Qiita - [2019年1月版]WSL + Ubuntu で Docker が動くっ!動くぞコイツッ!
https://qiita.com/koinori/items/78a946fc74452af9afba
$ sudo apt update && sudo apt upgrade -y
$ sudo apt install -y docker.io=17.12.1-ce
$ sudo usermod -aG docker $USER
2019.5.3現在、dockerのバージョンが18のやつはWSLでは動かない。WSLが対応していない機能があるらしい。
なので、バージョン指定で1つ前のバージョンを導入する。
いったんターミナルを閉じる。またWSLを立ち上げて
$ sudo cgroupfs-mount $ sudo service docker start $ docker version
docker versionの出力結果で server の項目が出てたらok
$ docker version Client: Version: 17.12.1-ce API version: 1.35 Go version: go1.10.1 Git commit: 7390fc6 Built: Wed Apr 18 01:23:11 2018 OS/Arch: linux/amd64 Server: Engine: Version: 17.12.1-ce API version: 1.35 (minimum version 1.12) Go version: go1.10.1 Git commit: 7390fc6 Built: Wed Feb 28 17:46:05 2018 OS/Arch: linux/amd64 Experimental: false
hello-world してみて動くことを確認する
$ docker run hello-world Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/
毎回実行することになるので…¶
sudo cgroupfs-mount と sudo service docker start は、立ち上げる度に必要らしいので、ShellScriptを作った
#!/bin/bash # dockerの起動 sudo cgroupfs-mount && sudo service docker start sudo service docker status echo -------------------------------------------------- docker version echo -------------------------------------------------- docker run hello-world
Marpのテーマダウンロード¶
デフォルトのテーマでもいいんですが、横に長い(1280pxx720px)です。
普通のやつ(960pxx720px)にしたいため、有志の方?のGitHubが作ったテーマをダウンロードする
$ cd [今Markdownを書いているディレクトリ] $ wget https://raw.githubusercontent.com/matsubara0507/marp-themes/master/themes/haskell.css
他の種類もあるのでお好みで
marp-cliでhtmlを生成¶
$ docker run --rm -v $PWD:/home/marp/app/ -e LANG=$LANG marpteam/marp-cli ./作ったファイル.md --theme haskell.css
marp-cliでserverモードを起動¶
$ cd [今Markdownを書いているディレクトリ] docker run --rm -v $PWD:/home/marp/app/ -e LANG=$LANG -p 8080:8080 marpteam/marp-cli ./ --server --theme haskell.css
実行後、ブラウザで、http://localhost:8080/ にアクセスするとスライドが見れる(reveal.jsみたい)
pdf化¶
あるにはあるけど、私のこの環境で実行するとエラーになってうまくいかない
$ docker run --rm -v $PWD:/home/marp/app/ -e LANG=$LANG marpteam/marp-cli ./作ったファイル.md --theme haskell.css --allow-local-files
htmlかserverモードでChromeで表示した後、Chromeの印刷機能でpdf化すればキレイに出ました^
旧Marpとの非互換¶
- 画像の%指定による拡大/縮小がなくなった → px指定になった
- 画像の中央寄せができない → 今後に期待(テーマのCSSをいじればなんとかなるかもしれない)
中央寄せができるようになるといいな、旧Marpから乗り換えたい
参考¶
SECCON 令和CTF Writeup
CTF Writeup SECCON 令和CTF¶
SECCON 令和CTFがありました。
SECCON 令和CTF¶
null
結果&感想¶
簡単に言うとダメだった。1問くらい…1問解きたかった悔しい…
以下、反省文
Misc 零は?¶
サーバにncで繋ぐと方程式が出てくるみんな大好き計算問題
100回計算が必要のようだ
$ nc zerois-o-reiwa.seccon.jp 23615 [1/100] 0=12-? ?=12 [2/100] ・ ・ ・
それで、作ったシェルスクリプトが以下
これ系問題は、昔作った類似問題のソルバを使い回しができて好き
方程式なのだけれど、正しい値を求めるためにxの値を1個ずつ増やす総当たり方式でつくった
これでいけそう…だと思ってた(実際、これで98問目までいった)
#!/bin/bash
exec 5<>/dev/tcp/153.120.18.15/23615
for I in {1..101}
do
cat 0<&5>test.txt &
sleep 3
pkill cat
Q=`cat test.txt|awk -F= '{print $2}'`
echo Debug [${I}] $Q
C=0
while :
do
if [ 0 == `echo $Q|sed s/\?/$C/g |bc` ]
then
ANSWER=$C
break
fi
: $((C++))
done
echo ${ANSWER} >&5
echo Debug [${I}] $Q answer is $ANSWER
done
exit 0
ただ98問目…
[98] 17*53-23+23+60*92-59+38*34-19-63+39*5+71-67*75+39*4-97+72*24-60-80+41*8+81*40-3+33*84-16+7*5-28-96*78+48+12*89-45+77*74-29-80+75*37*56+51-43*33+78-25+86-38*59+4-58*65*7+19-49+26*45-25+67*9-90-83+12*99-33+4*88*64+2-31*32+79-87+77*25-50+56-4*28*28+8-82+33-18*26+41*5-58-8*35+79-4-?
これ、答えは 157961 なんだけど、総当たりで計算しているとタイムアップしちゃう。。
あぁこれシェルスクリプトの処理速度の限界かしらと思ってpythonで書き直そうとして無駄に時間を溶かしてしまった
よくよく考えると、最後が -? のパターンは総当たりすることなく自明なので、個別に処理を書けば回避できたと思う。惜しい。
Forensic 新元号発表¶
pdfが与えられて中身がこれ
あぁ~伝統のQRコードが見えますねぇw
binwalkで調べる
$ binwalk newera.pdf DECIMAL HEXADECIMAL DESCRIPTION -------------------------------------------------------------------------------- 0 0x0 PDF document, version: "1.5" 523 0x20B Zlib compressed data, default compression 1322 0x52A Zlib compressed data, default compression 8552 0x2168 Zlib compressed data, default compression 9827 0x2663 JPEG image data, JFIF standard 1.01 9857 0x2681 TIFF image data, big-endian, offset of first image directory: 8 52646 0xCDA6 JPEG image data, JFIF standard 1.01 52676 0xCDC4 TIFF image data, big-endian, offset of first image directory: 8 65317 0xFF25 Zlib compressed data, default compression 65788 0x100FC Zlib compressed data, default compression 78688 0x13360 Zlib compressed data, default compression
それで画像を取り出す(binwalk使って取り出そうとしたけど上手くいかなくて、めんどくせぇddだ!ってなった)
$ cat newera.pdf | dd bs=1 skip=9827 >1.jpg
おー見えた見えた。中央が令和で白抜きされているけど右半分のデータ部は生きてそうだからこの状態でも読めるかなと思ってた
QRazyBoxで調べる
このWebサービを使えばQRコードが結構破損してても読めるよ!
あぁ~微妙に…微妙にフラグが見える…でタイムアップ(眠みがすごい)
他の方のwriteupを見ると、白抜きされた令和を埋める画像が入っていたみたいだから、それを合成すればいける気がしますね。。
jus共催 第41回(中略)シェル芸勉強会 に参加しました
jus共催 第41回{ウン,ガク,}{チ,ト,}{,ン}{,コイン}{ブ,}{ラブラ,ハ,}{,イブ}{無,有}罪シェル芸勉強会¶
このタイトルなんですが、bashとshufコマンドの機能で出力結果が変化します
$ shuf -n1 -e jus共催 第41回{ウン,ガク,}{チ,ト,}{,ン}{,コイン}{ブ,}{ラブラ,ハ,}{,イブ}{無,有}罪シェル芸勉強会
第41回ウンブハイブ無罪シェル芸勉強会
$ shuf -n1 -e jus共催 第41回{ウン,ガク,}{チ,ト,}{,ン}{,コイン}{ブ,}{ラブラ,ハ,}{,イブ}{無,有}罪シェル芸勉強会
第41回ウンンブハイブ有罪シェル芸勉強会
$ shuf -n1 -e jus共催 第41回{ウン,ガク,}{チ,ト,}{,ン}{,コイン}{ブ,}{ラブラ,ハ,}{,イブ}{無,有}罪シェル芸勉強会
第41回ガクチンコインブラブライブ有罪シェル芸勉強会
$ shuf -n1 -e jus共催 第41回{ウン,ガク,}{チ,ト,}{,ン}{,コイン}{ブ,}{ラブラ,ハ,}{,イブ}{無,有}罪シェル芸勉強会
第41回チンブイブ無罪シェル芸勉強会
$ shuf -n1 -e jus共催 第41回{ウン,ガク,}{チ,ト,}{,ン}{,コイン}{ブ,}{ラブラ,ハ,}{,イブ}{無,有}罪シェル芸勉強会
第41回ガクコインハ有罪シェル芸勉強会
今回は相対的に優しい問題だった(解けるとは言っていない)
【問題と解答】jus共催 第41回{ウン,ガク,}{チ,ト,}{,ン}{,コイン}{ブ,}{ラブラ,ハ,}{,イブ}{無,有}罪シェル芸勉強会 | 上田ブログ¶
null
jus共催 第41回{ウン,ガク,}{チ,ト,}{,ン}{,コイン}{ブ,}{ラブラ,ハ,}{,イブ}{無,有}罪シェル芸勉強会¶
2019年4月27日 さくらインターネットさんのセミナールームにて問題と解答例:
午前:鳥海さんの資料¶
一年間に及んだ文字コードは今回で終わり。せっかくなので、過去6回分を記載する
文字コードの高度な情報の宝庫
特にUnicode絵文字結合が狂おしいほど好き
https://umidori.github.io/shellgei-36th-am/
https://umidori.github.io/shellgei-37th-am/
https://umidori.github.io/shellgei-38th-am/
https://umidori.github.io/shellgei-39th-am/
https://umidori.github.io/shellgei-40th-am/
https://umidori.github.io/shellgei-41th-am/
知見¶
いろんな便利なコマンドがあってヤバイ
そして、ググると大抵blacknonさんのサイトが1位でヒットして神
numfmt¶
数字を人の読みやすいように加工する『numfmt』コマンド
https://orebibou.com/2015/11/%E6%95%B0%E5%AD%97%E3%82%92%E4%BA%BA%E3%81%AE%E8%AA%AD%E3%81%BF%E3%82%84%E3%81%99%E3%81%84%E3%82%88%E3%81%86%E3%81%AB%E5%8A%A0%E5%B7%A5%E3%81%99%E3%82%8B%E3%80%8Enumfmt%E3%80%8F%E3%82%B3%E3%83%9E/
uconv¶
uconvコマンドを使ってローマ字⇔ひらがな/カタカナ変換をする
https://orebibou.com/2018/02/uconv%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%83%AD%E3%83%BC%E3%83%9E%E5%AD%97%E2%87%94%E3%81%B2%E3%82%89%E3%81%8C%E3%81%AA-%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A/
numconv¶
numconv(1) - Linux man page
https://linux.die.net/man/1/numconv
多言語で表現された数値表現をニューメリックな表現に変換するコマンド
つまり、四もIVも4もⅣもこのコマンドを使うと 4 になる。
素晴らしい。。
LT¶
シェル芸でターミナルを動かす(CUIでのウィンドウ操作の仕方)¶
ぐりぐり動く
おおおおおおおwwwwwww #シェル芸 pic.twitter.com/m4RZVpD0CU
— 上田 隆一 (@ryuichiueda) 2019年4月27日
上田さんを圧縮¶
LTの現場では上田さんを限界を超えて圧縮したものをカラーパレットとして使用していた
草
プライバシーに配慮されたドット絵だ #シェル芸 pic.twitter.com/8WbrK35gLQ
— nmrmsys (@nmrmsys) 2019年4月27日
ワイ、ネタかぶりwww¶
ターミナルにウ●コを表示する。まさにインスタ蠅。 #シェル芸 pic.twitter.com/076hUg1kqJ
— Hisatoshi Onishi (@hisa0211) 2019年4月27日
技術書典6に行って頒布シマシタワー
どんどん規模が大きくなる技術書の同人誌販売イベント。
今回は頒布する側になりました。
戦利品¶
「Radare2で学ぶバイナリ解析入門」を書いたかんばやしさんと、非公式アフターで話したonotchさんとは同じ趣味(CTF)の話で大変盛り上がり、心の友となった(CTFあるある話超楽しいw)
そして、お気づきの人少なかったかもしれませんが、熱血バイナリアンTシャツも売っていました!(レア)
着るから!めっちゃ着るから!
難読化シェル芸の本¶
こ21 で頒布しておりました。
本を作る側の苦労と楽しさがよくわかった。
これは、端的に申し上げると最高であり、何が最高かというと語彙力不足でうまく表現できませんが、えーと、
ソフトウェアと同じで、何か作って喜んでくれる人がいると最高なんだけど、そういう人たちと(語彙力不足
- 買ってくださった方本当にありがとうございました
- 手にとってださったかた嬉しかったです(パラパラ見て、それでけっこう笑ってくれるのがたまらなく嬉しい)
- 一部の方にはサインしましたが汚くてなんかちょっと申し訳なく、もっとシュッと書けるようになりたい
- 引き続き販売しておりますので、気になりましたらサンプルなど眺めて頂ければと
技術書典これまでの変遷¶
ちなみに第一回から参加しておりました。記録がこれです。そびえ立つキマシタワー
回を追う毎に人が増えてるな~と思っていました。
ほら、初回は参加者が1400人、今回は一万人ですよ!ほんと終了時刻の17:00まで人がいっぱいでした。
この伸びだと三年後には10万人か
その他¶
- ipusironさんに挨拶して名刺もらったやったぜ(というかご本人が売りに来てるのかw)
- auth屋さんはシェル芸人
- におうコードの問題集のグランパさんの執筆環境最高(dockerで公開中)
ワイの書籍執筆は、こんな趣味を面白いと思ってくれる、みなさまのおかげでモチベーションが保てました。
この場を借りて御礼申し上げ奉り候えば、またいずこでお会いできる日を楽しみにしております。
ターミナルに画像を表示したい(難読化シェル芸本の表紙の秘密)
難読化シェル芸の世界の表紙の秘密
表紙にあるネコの目は、みなさんがよく使うターミナルで表示しているものです。
teratermでもrloginでも画像が表示できるんです。
ターミナルに画像を表示する¶
ターミナルの黒い画面を使って、こんなことができます。
文字(背景)に色を着けて画像のように表現することができます。
文字に色をつける¶
エスケープシーケンスと呼ばれる特殊な文字を使うことで文字に色をつけることができます。
エスケープシーケンスは、ターミナルやエディタから入力する場合、通常の文字入力と違って比較的複雑な操作を伴います。
tputコマンドを用いると比較的簡単にエスケープシーケンスを出力できます。
文字の装飾は下表の通りです。
説明 | tputでの出力方法 |
---|---|
全ての属性をリセット | tput sgr0 |
文字を太字に変更 | tput bold |
文字に下線 | tput rmul |
文字を点滅 | tput blink |
文字と背景色の反転 | tput rev |
文字への色付けもできます。環境に依存しますが、8色、または、256色が表現できます。
256色を順に表示するシェル芸を作りました。
まず、お使いのターミナルが256色を表示する設定になっていないかもしれません。
TERM環境変数で色数を制御してしているため、256色を表示できるように設定します。
$ export TERM='xterm-256color'
文字を256色分表示してみます。
$ for COLOR in {0..255};do echo -n "$(tput setaf $COLOR)";echo -n "$COLOR " ;done;tput sgr0;echo
同様に背景色も変更できます。
$ for COLOR in {0..255};do echo "$(tput setab $COLOR)";echo -n $COLOR ;done;tput sgr0;echo
ターミナルに画像を表示する¶
エスケープシーケンスで文字に色をつける方法はわかりました。
では、これで絵を描く…のは難しそうです。私は綺麗に描く自信がありません。
でもこれでドット絵作れますね!
画像を入力にして、変換できないでしょうか。
実は、そういったコマンドを作った方がいらっしゃいます。
いくつか種類がありますが、camというコマンドを使わせて頂きました。
camコマンド作った 〜 端末で画像を表示しよう
https://itchyny.hatenablog.com/entry/20130318/1363605537
インストール¶
製作者の案内に従ってインストールしましょう。
$ git clone https://github.com/itchyny/cam
$ cd ./cam
$ autoreconf -i
$ ./configure
$ make
$ sudo make install
使い方¶
画像ファイルを指定するだけです。
$ cam hoge.jpeg
画像形式によっては、以下のように表示され画像が表示されない場合があります。
$ cam fuga.jpg cam: fuga.jpg: progressive jpeg
これは、jpeg形式のファイルにはベースラインとプログレッシブという2種類があり、camはプログレッシブのjpegに対応していないためです。
そこで、ImageMagicのconvertを使って、プログレッシブをベースラインに変換して表示してみます。
以下のようにシェル芸で実現できます。
$ cam <(convert fuga.jpg -interlace none /dev/stdout)
camの出力結果をシェル芸にする¶
さあ完成に近づいてきました。
camが導入されていない環境でも、シェル芸でこの画像を表示したいです。
camによって変換された後は、エスケープシーケンスを含んだ文字列なので圧縮した上でbase64エンコードにしてみましょう。
だいぶコンパクトになりました。
表示する際は、逆にbase64デコードした上でgunzipで伸長すると元に戻ります。
これでどこでも画像を表示できる難読化シェル芸になりました。
$ cam <(convert fuga.jpg -interlace none /dev/stdout)|gzip -cf|base64 H4sIAJAxk1wAA+2cOW7kMBBF87lCJ3MEbXSr4cAH6Qs4mL5/OsAE00WgPljFRaTkn30YREui6rFW +fb8WsKf23N63Z7b/hk+l3V+/aamph5VT69fY9wINTU1YaWmvoQmrMfo6a2XLa3l+iHun3oATVhb 6XkXekX6/tb31aA38fuTeq0Y+v77QE1YT6UjKIXXjLUF7pIDQHrxVdwnvfhJNGE9RAtvJ8F6bKXS hrvBf+8yUF/77xg1Me2pkX8V7O37fxkW7a9tfK5B7yDrHmBfL64J6iFwikwyCaQuH0FHJ8K+BF+D Jr7E9Go6QvPNGAhkBYReSCBgqq+GIbNFO7Hemf0S01H0Amqx3pAy8oteH/m+rnDRB0hD+nwX20Zu yWczDkF/xMBS0oo9SCQDY11W/bHk7yJCGQyTyjz6dIPy4FRu692kHnGj4NsbGaCG0Pyhnn5D2AOh 7KPnVT3kR4DERZEvmwWhc7XwGq3PryDH8F7a6/5cMOddNxyPoYMSj6GuY7FaEy0WQiwaVXxEP0cO S8k+zw7WbKHSPftIXmaZ1fY3NFLqpVFmiEWVGmRQ0mAnXcs10D1ZrqWXVXNnHwRSAjvbDj+c63ew G5WOHNTzGcAaieniQ8pTpInx8xmxxbhtQ72pe88stEbUSFqlnsTNir390GR4uDYLpBjeXhDwvufF 9HxoQo8IcATvNW0EO7q+sLxN2Oa0AC3P813/nV23ZgFH1Q5IfNSIawM/qiOYlEF/QvRmk41hf19W VolPVWwal8vYjfjSl+xxVgM2Erk8c41ohnQ6uh9VkIyOm1D8jOlHzHabepQA+T1VNjoWj9FrSY7T FMdxqJABDEge+1UdB9JV3SRygfLaofis6fmEKEIfHsj+EMpIvxympNfQWw7zmo4cK7hDkGEhfUys CoAUjjGoB1EAkYIlIF9TL8QzxJCcQ4pKtmM2WXpxqEf55RyWdwFlWIgA+RC37yES5o9CS/tv3/OM CIqCZgOq6MACj/NwPFmaLUOO4m639J3L78Ni7sF/bG8e2inUAWhk49IpDzYUpEe0oEilU1bAU8nn 5g0G8aNP0psx2otFdXRtBADTEoRlBu1xDEPMARkIavwJipu49PqCBkq7OPdADsEIad3P+Uew78zM xzU1lNfw982xFjFQsiat3Y7V9ZOG8+c+JIX6v4qyffXnObS6ScPXDnpuFBdjZ9+aKGP1ZbI27atw wrzQHWIa4PL60Hyma8w5zcDhHM5lh9bfCCSm+wSboWdwGq3ntN3eSVn0W3XKcAYstAPREl5mBlDt Cekmo9gPuc4S11ZS5gR4pYpoA0fw7Y0KRsbvJQ7HmOau2cF3gPFnNqOONTWQqKGyj4RYLwGNW4Su CmP5s2V2JaNBAfO0azvS9Bs+ACRKytwRm1aZni+jGxg50nd9mRvTV0gkZfYmIsdjSieypKXG/QdE jCO8f8pxoMrlC3zAXF4SqQObu3MXJeigjr6BejzSk16iyZNimqOuVCckUXYmdia/WX85Ge1LVKQz WIm0KtipyapynARDampqwkpN/cM0YaWmPokmrNTUJ9GElZr6JJqwUlOfRP+DdXrdnl9L+P4LO26A MTyMAAA=
$ echo -n H4sIAJAxk1wAA+2cOW7kMBBF87lCJ3MEbXSr4cAH6Qs4mL5/OsAE00WgPljFRaTkn30YREui6rFW+fb8WsKf23N63Z7b/hk+l3V+/aamph5VT69fY9wINTU1YaWmvoQmrMfo6a2XLa3l+iHun3oATVhb6XkXekX6/tb31aA38fuTeq0Y+v77QE1YT6UjKIXXjLUF7pIDQHrxVdwnvfhJNGE9RAtvJ8F6bKXShrvBf+8yUF/77xg1Me2pkX8V7O37fxkW7a9tfK5B7yDrHmBfL64J6iFwikwyCaQuH0FHJ8K+BF+DJr7E9Go6QvPNGAhkBYReSCBgqq+GIbNFO7Hemf0S01H0Amqx3pAy8oteH/m+rnDRB0hD+nwX20ZuyWczDkF/xMBS0oo9SCQDY11W/bHk7yJCGQyTyjz6dIPy4FRu692kHnGj4NsbGaCG0Pyhnn5D2AOh7KPnVT3kR4DERZEvmwWhc7XwGq3PryDH8F7a6/5cMOddNxyPoYMSj6GuY7FaEy0WQiwaVXxEP0cOS8k+zw7WbKHSPftIXmaZ1fY3NFLqpVFmiEWVGmRQ0mAnXcs10D1ZrqWXVXNnHwRSAjvbDj+c63ewG5WOHNTzGcAaieniQ8pTpInx8xmxxbhtQ72pe88stEbUSFqlnsTNir390GR4uDYLpBjeXhDwvufF9HxoQo8IcATvNW0EO7q+sLxN2Oa0AC3P813/nV23ZgFH1Q5IfNSIawM/qiOYlEF/QvRmk41hf19WVolPVWwal8vYjfjSl+xxVgM2Erk8c41ohnQ6uh9VkIyOm1D8jOlHzHabepQA+T1VNjoWj9FrSY7TFMdxqJABDEge+1UdB9JV3SRygfLaofis6fmEKEIfHsj+EMpIvxympNfQWw7zmo4cK7hDkGEhfUysCoAUjjGoB1EAkYIlIF9TL8QzxJCcQ4pKtmM2WXpxqEf55RyWdwFlWIgA+RC37yES5o9CS/tv3/OMCIqCZgOq6MACj/NwPFmaLUOO4m639J3L78Ni7sF/bG8e2inUAWhk49IpDzYUpEe0oEilU1bAU8nn5g0G8aNP0psx2otFdXRtBADTEoRlBu1xDEPMARkIavwJipu49PqCBkq7OPdADsEIad3P+Uew78zMxzU1lNfw982xFjFQsiat3Y7V9ZOG8+c+JIX6v4qyffXnObS6ScPXDnpuFBdjZ9+aKGP1ZbI27atwwrzQHWIa4PL60Hyma8w5zcDhHM5lh9bfCCSm+wSboWdwGq3ntN3eSVn0W3XKcAYstAPREl5mBlDtCekmo9gPuc4S11ZS5gR4pYpoA0fw7Y0KRsbvJQ7HmOau2cF3gPFnNqOONTWQqKGyj4RYLwGNW4SuCmP5s2V2JaNBAfO0azvS9Bs+ACRKytwRm1aZni+jGxg50nd9mRvTV0gkZfYmIsdjSieypKXG/QdEjCO8f8pxoMrlC3zAXF4SqQObu3MXJeigjr6BejzSk16iyZNimqOuVCckUXYmdia/WX85Ge1LVKQzWIm0KtipyapynARDampqwkpN/cM0YaWmPokmrNTUJ9GElZr6JJqwUlOfRP+DdXrdnl9L+P4LO26AMTyMAAA= |base64 -d|gunzip
難読化シェル芸の世界の中表紙も…¶
同じ方法で作っています。
実行したのは以下
$ echo H4sIAC3WWlwAA51X32vbMBB+918hJ3TxmKO+FMbSgUtXQiirnjLKGI0vJaN7Gexpj/7bZ+t0J50sJfaOYFmK9Om+704/rNRM02TFvGHvngIz9YzR+vFpZD9nTK9p0PdFb7v5Lrj570pqqPYIgU5A+gdjF1Yh6rVtevUAZ/zRT3/ATeWwlqXsgY05CLAaaqrWtvdV1AkhwlGFm5Ib0AH9wXZ9L+E6iYaibQsaiT+t38IwbjzBwX4Qx2EmfULVabjkVsl8MMxNnaI6if8QM4v+D+2oibhDZxVqzISCOCUGY3YJcKyGUnpJhTtptABPPUf1FKkqB/PKXjSEC5TDJF1i8mCSvWt61MCEgJ5C1mq/S2EFgWE0ogPBUyVXRLOP8G6j/6n9d80h8hYH6yWG1wx/TG0PsT5bhA+nUM0zcTrWwC4kqIwyx4oAQgELON6xmFYm+7C7Mce3fp8mnL2AOSOLScMdXcptKsewXxV+ddtiAPJBT4Wffei6Vn1WbePTOZaIvdoJt1Le/epJbrq1Ahf+IHaAUH7UckTUCEhzrfqdrOP5R2plFkmapxZkjA4FGx71DDC7eq3hqK+jnLqZg8Yrx+7UJpKst2//4xoSvZWLzxbNBYjA+BACW31JHWvTlTPswimLNp2tPyCtbleMBiJNJrJd8hDr2yZKNn79Owlty25Y7CIC4ddJYHzBsCHdZm8n2cMmciwQrRTJBoFv5zY0shX1944FFIP3aX75eROCUf3ioqe0AGSwKiIAD5u4zUorBdJhvDCFll/yQAeHY51flvGB6L2yHSCbsojj7mMP+WvqCRXN4Axh0y5Z7jm5xK4PXABoTYNSK91UFV8k78pCAkCo33Dvu5BVnw5xDqFZIveHszFbLA6SAGRXncdtPpI1TTmeN7RYH3AfYP47DG3tvsxUf+LUeq3Vui9027bVCMVaq8oSALpBald0w6sCuseX/et6aJE7G/wDg0BJ0DIOAAA=|base64 -d|gunzip
おまけ¶
エスケープシーケンスを利用した面白いイタズラを作ったのを思い出しました、
すべてがFになりますので、Ctrl+c で止めてください。
$ C=$(tput cols);L=$(tput lines);while :;do x=$(($RANDOM%$C));y=$(($RANDOM%$L));printf "\\033[${y};${x}fF";done
$ C=$(tput cols);L=$(tput lines);while :;do x=$((($RANDOM%$C+$RANDOM%$C+$RANDOM%$C)/3));y=$((($RANDOM%$L+$RANDOM%$L+$RANDOM%$L)/3));printf "\\033[${y};${x}fF";done
エスケープシーケンスを使えばいろいろ面白いことができそうですね!
宣伝¶
技術書典では割引もあるみたいです!ぜひぜひ¶
変態の本、もとい、変態技術の本よろしくおねがいします
— kanata@技術書典6 こ21 (@kanata201612) 2019年4月3日
難読化シェル芸の本 4/24発売です
amazonでget! https://t.co/mQYj3ZMvQN
4/14 #技術書典 で先行発売! こ21 でお待ちしていますhttps://t.co/P51DnHR3LP
表紙が完成した! pic.twitter.com/sRyM0ubdiy
LTの資料¶
ターミナルに画像を表示する
https://www.slideshare.net/kanata1/ss-142580690
記号難読化シェル芸のやべーやつを解読してみた
2019年2月は、記号で作る難読化シェル芸がメガシンカした歴史的な月でした。
一度にたくさんの素敵な情報が集まって、私の思考回路はショート寸前です。
記号と英字2文字だけでbash
https://www.ryotosaito.com/blog/?p=178
記号だけでシェルは操れた
https://www.ryotosaito.com/blog/?p=194
34C3 CTF minbashmaxfun - writeup
https://hack.more.systems/writeup/2017/12/30/34c3ctf-minbashmaxfun/
そんな中やべーやつが開発されます。yamayaさんという方が作成した記号だけのdateです。
$ _(){ __=$@;};_ /*/$$/../?????-*;_ ${__##*-};$(${__%?????} '!-:' ^-~<<<"'\$${#__}(") 2019年 2月 28日 木曜日 12:37:56 JST
こんなに短いのに全て記号で、そしてちゃんとdateとして動作します。美しい…そして恐ろしい…
人の褌で相撲を取るようで大変恐縮なのですが、これが埋もれてしまうのは人類の損失のような気がしたので、解読してみました。
大きく、4パートに分かれます。
$ _(){ __=$@;};_ /*/$$/../?????-*;_ ${__##*-};$(${__%?????} '!-:' ^-~<<<"'\$${#__}(") ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ① ② ③ ④
①関数_の定義¶
_(){ __=$@;}
関数_を定義しています。$@が特殊なシェル変数になります。動作は「変数__に関数の全引数の内容を設定する」という動作になっています。
②一意なディレクトリパスの取得¶
_ /*/$$/../?????-*
さっそく関数_が実行されています。引数に渡されている /*/$$/../?????-* は、ワイルドカード(glob)てすね。
/*/$$/../?????-* に一致するディレクトリは1つだけになりました。
/proc/[PID]/../sysrq-trigger というファイルが該当します。これはマジックSysRqキーと呼ばれるカーネル機能を制御するためのインタフェースになりますね。この機能を利用するわけではなく、triggerという文字列を取得するのが目的になっています。
※マジックSysRqキーは、カーネルのデバッグなどに使用されるやつです。昔、クラスタの動作確認するために、これを使って意図的にカーネルパニックさせた記憶があります。
③"trigger"の取得¶
_ ${__##*-}
ここから変数展開を使って-以降だけを切り取って、再び変数__に設定しています。
"trigger"で7文字になるのですが、この7という数字も最後に使われます。
④trでdateコマンドを生成する¶
ここは更に細かく分けました。
$( ${__%?????} '!-:' ^-~ <<<"'\$${#__}(" ) ^^^^ ^^^^^^^^^^^ ^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^ ④-1 ④-2 ④-3 ④-4 ④-1
④-1¶
$( )
コマンド置換ですね。最終的にこのカッコの中がdateになれば、dateが実行されます。
④-2¶
${__%?????}
変数展開の機能を巧みに使って先頭ニ文字を切り出しています。triggerの頭ニ文字、trが取得されます。
④-3¶
'!-:' ^-~
trの範囲指定を巧みに使っています。!-: と ^-~ どいういう範囲でしょうか。
Asciiコードから確認してみます。
0x20 | 0x21 | 0x22 | 0x23 | 0x24 | 0x25 | 0x26 | 0x27 | 0x28 | 0x29 | 0x2A | 0x2B | 0x2C | 0x2D | 0x2E | 0x2F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
space | ! | " | # | $ | % | & | ' | ( | ) | * | + | , | - | . | / |
0x30 | 0x31 | 0x32 | 0x33 | 0x34 | 0x35 | 0x36 | 0x37 | 0x38 | 0x39 | 0x3A | 0x3B | 0x3C | 0x3D | 0x3E | 0x3F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | < | = | > | ? |
0x40 | 0x41 | 0x42 | 0x43 | 0x44 | 0x45 | 0x46 | 0x47 | 0x48 | 0x49 | 0x4A | 0x4B | 0x4C | 0x4D | 0x4E | 0x4F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O |
0x50 | 0x51 | 0x52 | 0x53 | 0x54 | 0x55 | 0x56 | 0x57 | 0x58 | 0x59 | 0x5A | 0x5B | 0x5C | 0x5D | 0x5E | 0x5F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
P | Q | R | S | T | U | V | W | X | Y | Z | [ | \ | ] | ^ | _ |
0x60 | 0x61 | 0x62 | 0x63 | 0x64 | 0x65 | 0x66 | 0x67 | 0x68 | 0x69 | 0x6A | 0x6B | 0x6C | 0x6D | 0x6E | 0x6F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
` | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o |
0x70 | 0x71 | 0x72 | 0x73 | 0x74 | 0x75 | 0x76 | 0x77 | 0x78 | 0x79 | 0x7A | 0x7B | 0x7C | 0x7D | 0x7E |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
p | q | r | s | t | u | v | w | x | y | z | { | | | } | ~ |
ここから考えると !-: は、0x21から0x3Aの範囲、^-~ は、0x5Eから0x7Eの範囲になります。
trで変換される変換表を作ってみます。
! | " | # | $ | % | & | ' | ( | ) | * | + | , | - | . | / | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
^ | _ | ` | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w |
dateの変換前の文字は '$7( ですね。
④-4¶
<<< "'\$${#__}("
<<<は、ヒアストリングという機能になります。通常、変換したい文字はパイプ経由でtrに渡しますが、これでも渡すことができます。
渡している文字は"'\$${#__}("です。この中の ${#__} は"trigger"の文字数を返す変数展開です。7ですね!
ゴールが見えてきました。
①〜④まとめ¶
まとめると、以下になります。
$ _(){ __=$@;} # ①関数_の定義 $ _ /*/$$/../?????-* # ②一意なディレクトリパスの取得 $ echo $__ /proc/16120/../sysrq-trigger $ _ ${__##*-} # ③"trigger"の取得 $ echo $__ trigger $ echo ${__%?????} # ④-2 "trigger"からtrを取り出す tr $ echo ${__%?????} '!-:' ^-~ # 結果としてtrが実行できる tr !-: ^-~ $ echo ${#__} # ④-3 "trigger"の文字数から7を生み出す 7 $ cat <<<"'\$${#__}(" # ④-4 ヒアストリングでtrの入力にする '$7( $ $(${__%?????} '!-:' ^-~<<<"'\$${#__}(") # ④-1 $(tr '!-:' ^-~ <<< "'\$7(" ) を実行 2019年 2月 28日 木曜日 12:54:22 JST
おわかりいただけたでしょうか…
ここまでくるともはや芸術品...!
出典は、ココのコメントにあります。
記号だけで Hello world したやべーやつもありますねw
2019.3.7 yamayaさん新作が以下になります¶
$ : /*/$$/../?????-*;: ${_##*-};$(${_%?????} '!-:' ^-~<<<"'\$${#_}(") 2019年 3月 7日 木曜日 22:51:09 JST
より短い!なぜこれでdateが実行できるか解読してみよう!
技術同人誌組版の今と闇を語る(愚痴る)会 に参加しました
技術同人誌組版の今と闇を語る(愚痴る)会 (2019/02/17 17:00〜)¶
概要 本を作るのに、どんなソフト/環境でやってますか? Re:view?Markdown?Word?InDesign? どれもこれも、いい面もあれば悪い面もあり、我慢ならないクソな部分もあろうかと思います。 コンピュータで組版をする世の中になってはや30年(適当ですが)経ちましたが、 未だに決定打がないとはどういうことか? というわけで、同人誌執筆者が集まって、組版に関する光と闇を共有する会です。 # 参加するといいことある人 * 執筆環境に不満がある人 * 他の環境を試してみたいが、行き先がわからない人 * 本(技術同人誌)を書いてみようと思っている人 ...
同人誌執筆者が集まって、組版に関する光と闇を共有する会でした。
LTしました¶
補足¶
LTした時の現場の議論はこんな感じ
- Microsoft Print to PDF は実はアウトラインも飛ばしちゃうらしい(まるっと画像化しているらしい)
- Microsoft Print to PDF のフォント埋め込みは、必要最低限じゃなくて、まるっとフォント全部取り込むのでPDFのサイズが増えるらしい
- Type3フォントは印刷所的には、やっぱりあるとダメらしい
Microsoft Print to PDF は無料でフォント問題を解決できるので個人的にはやはり神
グラフィックレコーディングしてもらった¶
嬉しい
kanataさんのフォントの話です #組版の光と闇 pic.twitter.com/R1MY3xqccA
— kondoyuko🌼デブサミ2019 (@kondoyuko) 2019年2月17日
技術同人誌組版の今と闇を語る(愚痴る)会 #組版の光と闇 手がきメモまとめ|kondoyuko|note¶
技術同人誌組版の今と闇を語る(愚痴る)会 #組版の光と闇 手がきメモまとめ
参考¶
この環境がなかったら諦めてた
技術書典6に向けての Re:VIEW+CSS組版 環境構築 - 圧倒亭グランパのブログ¶
前回の技術書典5では、 Re:VIEW+ CSS 組版 にチャレンジしました。 at-grandpa.hatenablog.jp 今回もこの構成で行こうと思っていますが、docker周りが複雑で分かりづらかったのと、自分の リポジトリとして公開してもいいかなと思ったので取り組みました。また、 Re:VIEW がちょうど3.0.0になったので、良い機会だと思いました。 公開している リポジトリ は以下です。 主にできることは以下です。 その他のコマンドは、 リポジトリルートで make help と打ってください。 サンプルとして説明書PDFを生成できるようにしています。 git clone して make setup と make pdf を実行すれば生成されます。 PDFのリンクは、 リポジトリ の README.md とリリースページにありますので、お好きにダウンロードしてください。 cloneした リポジトリにある説明書PDFを元に、いろいろと試行錯誤していただくのが一番早いと思います。 Re:VIEWの初期生成 ディレクトリを用いたい場合は、 make init とすれば ./articles 以下を初期化できます。 よりよい Re:VIEW+ CSS 組版環境にしたいと思っています。もしなにかお気付きの場合はPRを作っていただくか、issueをお待ちしています。もしくは Twitter で @at_grandpa までご連絡ください。 前回はデザインに時間を取られてしまいましたが、今回はそこは反省点として、しっかりと執筆時間を確保したいと思います。 抽選受かってほしい!当日、みなさんお会いしましょう!
« Previous 1 2 3 4 5 ... 15 Next » (21-30/148)
Also available in: Atom