News

bash ゼロデイ脆弱性(だと思ってた)を知った後の心の機微

Added by kanata almost 4 years ago

これは、ひょんなことから、bash ゼロデイ脆弱性(だと思ってた)を知ってしまった私の心の動揺に関する記録

長いです

2019/4/6 yamayaさんオーパーツ投下

yamaya(@yamaya)さんが驚愕のオーパーツを投下する。これは、現在の人類では生み出せない未知のテクノロジーが詰まっていた。
ワイ「読めないすごいwww」ということだけは瞬時にわかり、これは解読するには本腰を入れないといけないと腹を括り、自分のあとで解読するメモに追加した。

この時は2019/4/14に開催される技術書典6に関わる準備などで忙殺されており、すぐ解読したいのをこらえた(この時は体が4~5体必要だと思っていた)

なぜかフィボナッチ数列が出力される

なぜかシェルピンスキーのギャスケットが出力される

ちなみに私はシェル芸ピンスキーのギャスケットの方をまだ解読していない。

2019/4/6 ぐれさんの解読

ぐれさん(@grethlen)解読記事を公開。バスる。
とてもわかりやすく解説していらっしゃるので、興味のある方は是非。私もこれで構造については理解できた。

ここで未知のテクノロジーが紐解かれるが、この時、あんなことになるとは思いもしなかったのであった。。(フラグ)

yamayaさんの難読化シェル芸(フィボナッチ数列) 解説
https://gist.github.com/greymd/455a13bb6f757c5ccd00bfb155d525e2

これは本当に心からそう思っており、仮に私が自由な時間を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行追加するのだって簡単じゃない場合が沢山あるのを知っている。業務のバッチ処理に影響がでるかもしれない、と、若干気を揉んで、しかし最大のリスクは、この挙動を知らないままでいることだと思い、早々に公開することを決めた。(ままま、この記事どれだけの人が見るんだというのはあるけれど)

あと、ぐれさん解説してくれるかもしれないので、これも期待

その後

  • 4月以降、本当に難読化シェル芸が激増した
  • 変態が情報発信すると変態(褒め言葉です)が集まるという事がわかった
  • まれに戦闘力54万の方が現れる
  • それによりシンギュラリティが起きて技術が進歩する
  • 副産物で脆弱性が発見されることがるというのがわかった(シェル芸botは有志で随時脆弱性対応されていて、大変に強固になっています)

jus共催 第43回大暴れシェル芸勉強会 に参加しました

Added by kanata almost 4 years ago

第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でシェル芸が実行される歴史的瞬間

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シェル芸勉強会 に参加しました

Added by kanata almost 4 years ago

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を使って試す

Added by kanata about 4 years ago

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

Added by kanata about 4 years ago

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が与えられて中身がこれ

20190430_forensic1.jpg

あぁ~伝統の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

20190430_forensic2.jpg

おー見えた見えた。中央が令和で白抜きされているけど右半分のデータ部は生きてそうだからこの状態でも読めるかなと思ってた

QRazyBoxで調べる

このWebサービを使えばQRコードが結構破損してても読めるよ!

20190430_forensic3.jpg

あぁ~微妙に…微妙にフラグが見える…でタイムアップ(眠みがすごい)

他の方のwriteupを見ると、白抜きされた令和を埋める画像が入っていたみたいだから、それを合成すればいける気がしますね。。

jus共催 第41回(中略)シェル芸勉強会 に参加しました

Added by kanata about 4 years ago

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でのウィンドウ操作の仕方)

ぐりぐり動く

上田さんを圧縮

LTの現場では上田さんを限界を超えて圧縮したものをカラーパレットとして使用していた

ワイ、ネタかぶりwww

技術書典6に行って頒布シマシタワー

Added by kanata about 4 years ago

どんどん規模が大きくなる技術書の同人誌販売イベント。
今回は頒布する側になりました。

20190415_gshoten.jpg

戦利品

20190415_shirt.jpg20190415_book.jpg

「Radare2で学ぶバイナリ解析入門」を書いたかんばやしさんと、非公式アフターで話したonotchさんとは同じ趣味(CTF)の話で大変盛り上がり、心の友となった(CTFあるある話超楽しいw)

そして、お気づきの人少なかったかもしれませんが、熱血バイナリアンTシャツも売っていました!(レア)
着るから!めっちゃ着るから!

難読化シェル芸の本

こ21 で頒布しておりました。

本を作る側の苦労と楽しさがよくわかった。
これは、端的に申し上げると最高であり、何が最高かというと語彙力不足でうまく表現できませんが、えーと、
ソフトウェアと同じで、何か作って喜んでくれる人がいると最高なんだけど、そういう人たちと(語彙力不足

  • 買ってくださった方本当にありがとうございました
  • 手にとってださったかた嬉しかったです(パラパラ見て、それでけっこう笑ってくれるのがたまらなく嬉しい)
  • 一部の方にはサインしましたが汚くてなんかちょっと申し訳なく、もっとシュッと書けるようになりたい
  • 引き続き販売しておりますので、気になりましたらサンプルなど眺めて頂ければと

技術書典これまでの変遷

ちなみに第一回から参加しておりました。記録がこれです。そびえ立つキマシタワー

回を追う毎に人が増えてるな~と思っていました。
ほら、初回は参加者が1400人、今回は一万人ですよ!ほんと終了時刻の17:00まで人がいっぱいでした。
この伸びだと三年後には10万人か

20190415_suii.png

その他

  • ipusironさんに挨拶して名刺もらったやったぜ(というかご本人が売りに来てるのかw)
  • auth屋さんはシェル芸人
  • におうコードの問題集のグランパさんの執筆環境最高(dockerで公開中)

ワイの書籍執筆は、こんな趣味を面白いと思ってくれる、みなさまのおかげでモチベーションが保てました。
この場を借りて御礼申し上げ奉り候えば、またいずこでお会いできる日を楽しみにしております。

ターミナルに画像を表示したい(難読化シェル芸本の表紙の秘密)

Added by kanata about 4 years ago

難読化シェル芸の世界の表紙の秘密

20190407_nandoku-hyousi.png

表紙にあるネコの目は、みなさんがよく使うターミナルで表示しているものです。
teratermでもrloginでも画像が表示できるんです。

ターミナルに画像を表示する

ターミナルの黒い画面を使って、こんなことができます。
文字(背景)に色を着けて画像のように表現することができます。

20190321_screen1.png
20190321_screen2.png

文字に色をつける

エスケープシーケンスと呼ばれる特殊な文字を使うことで文字に色をつけることができます。
エスケープシーケンスは、ターミナルやエディタから入力する場合、通常の文字入力と違って比較的複雑な操作を伴います。
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

20190321_screen3.png

同様に背景色も変更できます。

$ for COLOR in {0..255};do echo "$(tput setab $COLOR)";echo -n $COLOR ;done;tput sgr0;echo

20190321_screen4.png

ターミナルに画像を表示する

エスケープシーケンスで文字に色をつける方法はわかりました。
では、これで絵を描く…のは難しそうです。私は綺麗に描く自信がありません。

でもこれでドット絵作れますね!

画像を入力にして、変換できないでしょうか。

実は、そういったコマンドを作った方がいらっしゃいます。
いくつか種類がありますが、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

20190321_screen5.png

難読化シェル芸の世界の中表紙も…

同じ方法で作っています。
実行したのは以下

$ 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

20190321_screen7.png

おまけ

エスケープシーケンスを利用した面白いイタズラを作ったのを思い出しました、
すべてが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

20190321_screen6.png

エスケープシーケンスを使えばいろいろ面白いことができそうですね!

宣伝

技術書典では割引もあるみたいです!ぜひぜひ

LTの資料

ターミナルに画像を表示する
https://www.slideshare.net/kanata1/ss-142580690

記号難読化シェル芸のやべーやつを解読してみた

Added by kanata over 4 years ago

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が実行できるか解読してみよう!

技術同人誌組版の今と闇を語る(愚痴る)会 に参加しました

Added by kanata over 4 years ago

技術同人誌組版の今と闇を語る(愚痴る)会 (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 は無料でフォント問題を解決できるので個人的にはやはり神

グラフィックレコーディングしてもらった

嬉しい

技術同人誌組版の今と闇を語る(愚痴る)会 #組版の光と闇 手がきメモまとめ|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 までご連絡ください。   前回はデザインに時間を取られてしまいましたが、今回はそこは反省点として、しっかりと執筆時間を確保したいと思います。 抽選受かってほしい!当日、みなさんお会いしましょう!

1 2 3 4 5 ... 15 (21-30/148)

Also available in: Atom

Add picture from clipboard (Maximum size: 100 MB)