ニュース
新春 heap情報まとめ (2コメント)
昨年は時間をみて、heapの勉強しておりましたが、これ、heapで軽く本が1冊書けるぐらいの内容です。
CTFのPwnジャンルが解ける人が少ないのは、ひとえにこのheap仕様の難解さが原因の一つでしょう。
いつか、heapに関してまとめようと思ってるんだけど。。何千文字かになりそう。
そんな訳で、私が参照させて頂いている&これから参照したい情報を以下にまとめました。
よくわかる!heapの基礎的(!?)な知識¶
mallocの旅(glibc編)
http://www.slideshare.net/kosaki55tea/glibc-malloc
malloc(3)のメモリ管理構造
http://www.valinux.co.jp/technologylibrary/document/linux/malloc0001/
NEC 古賀さんによるありがたい解説
http://www.soi.wide.ad.jp/class/20040011/slides/19/45.html
https://www.nic.ad.jp/ja/materials/security-seminar/20041004/3-koga.pdf
The 67th Yokohama kernel reading party(小崎さんのmalloc動画)
https://www.youtube.com/watch?v=0-vWT-t0UHg
Pwn/Exploit heapにまつわる攻撃手法¶
The Malloc Maleficarum (Bugtraq 2005) - ももいろテクノロジー
http://inaz2.hatenablog.com/entry/2016/12/24/002138
heap exploitationテク走り書き - 生きたい
http://potetisensei.hatenablog.com/entry/2016/12/10/034804
House of Forceの概要と実践(題材:BCTF2016 bcloud) - Pwn d3 r1ng
http://pwn.hatenadiary.jp/entry/2016/12/05/235942
[CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック
http://www.slideshare.net/codeblue_jp/cb16-matsukuma-ja-68459648
heapにまつわる脆弱性の実例等¶
たった1バイトの書き込みが引き起こすルート権限での実行の脆弱性 コンピュータサイエンス POSTD
http://postd.cc/a-single-byte-write-opened-a-root-execution-exploit/
情報セキュリティスペシャリスト試験を受けた話 - しゃろの日記
http://charo-it.hatenablog.jp/entry/2016/12/09/145231
CTFひとり勉強会 Secret Holder (HITCON 2016 Quals) 後編 - ヾノ>ㅅ<)ノシ帳
http://katc.hateblo.jp/entry/2016/10/28/124025
第26回シェル芸勉強会及びエクシェル芸勉強会に参加させて頂きました!
シェルスクリプト大好きなんですが、新しい知見が得られて、やっぱり面白いですね!
今回は、自分なりにうまく書けた解答がなかった(吐血)ので、自分用のメモ用に関連情報を載せておきたいと思います。
jus共催 第8回初心者の方角に向いて講師が喋るシェル勉強会(初心者向けとは言ってない)/第26回シェル芸勉強会及びエクシェル芸勉強会
その他、知見メモ¶
- ExcelやXMLをいい感じにアレコレするツールは沢山あるっぽいが、 xmllint と hxselect がよさげ。
- シェルのviモードは、emacs宗派を改宗させる破戒力がある。ヤバイ。
- Excelの文字列は、展開したファイルのxl/sharedStrings.xmlに順番に入っている(紐付けるIDとかは無い。XMLなのに)。ヤバイ。
- penというコマンドでMarkdownのプレビューができる。sayは喋る。ヤバイ。
難読化シェル芸を発案した
難読化シェル芸¶
Obfuscation Shell Script One Liner
- 難読化シェル芸
- 難読化シェル芸とは
- 難読化の基本
- 難読化技法
- 記号難読化
- Unicode結合文字難読化
- Unicodeゼロ幅スペース難読化
- アンチデバック技法(耐タンパー性の確保)
- 難読化シェル芸ツール
- もっとすげぇ難読化シェル芸ツール
- 難読化解除ツール
- Memo
難読化シェル芸とは¶
内部的な動作の手続き内容・構造・データなどを人間が理解しにくい、あるいはそのようになるよう加工されたシェル芸のこと。
例えばこんなの
普通のdateコマンド
date
2016年 12月 16日 金曜日 21:19:58 JST
難読化dateコマンド
$'\x64\x61\x74\x65'
2017年 3月 4日 土曜日 13:36:21 JST
$(printf "%b" $(printf '%s%x' '\x' $((0x83 ^ 0xe7))))$(ls --help|grep ^G|cut -c53)$(ls --help|grep ^G|cut -c10)$(ls --help|grep ^G|cut -c8)
2016年 12月 16日 金曜日 21:19:52 JST
難読化の基本¶
アスキーコードを記述して実行¶
俺的備忘録 〜なんかいろいろ〜 bashでコマンドをアスキーコードで記述して実行させる
$ echo -n 'date'|xxd
0000000: 6461 7465 date
$ $'\x64\x61\x74\x65' # date 16進数表記
2017年 3月 4日 土曜日 13:36:21 JST
$ $'\144\141\164\145' # date 8進数
2017年 3月 4日 土曜日 13:47:22 JST
$ $'\u0064\u0061\u0074\u0065' # date Unicodeの表記
2017年 3月 4日 土曜日 13:40:16 JST
コマンド置換で文字を生成して実行¶
`example` または $(example) で文字を出力する。
exampleの部分を複雑にすることで、難読化を図る
`echo d``echo a`$(echo t)$(echo e)
2017年 3月 4日 土曜日 13:44:33 JST
コマンドの間に無視される文字を挟み込む¶
''''''''''''''''''''''''''''''''''''''''''''''''''d''''''''''''''''''''''''''''''''''''''''''''''''''a''''''''''''''''''''''''''''''''''''''''''''''''''t''''''''''''''''''''''''''''''''''''''''''''''''''e''''''''''''''''''''''''''''''''''''''''''''''''''
Sat Sep 21 20:00:59 JST 2019
d""a$()t``e
Sun Apr 19 10:43:58 JST 2020
無駄なブレース展開¶
$ echo {{{{{{{{{a..c},},},},},},},},}
a b c
evalを使って実行¶
コマンド置換と同様。まとめ中
manに載っていないsedのeオプションを使って実行¶
sedのeオプションは、引数のコマンドを実行してくれるのでこれを利用する。
eオプションは通常、manに載っていない。sedを熟知していないとやはり何しているか解りにくい。
gnu.org の説明
https://www.gnu.org/software/sed/manual/sed.html#sed-commands-list
echo|sed 'e date'
2017年 10月 29日 日曜日 10:50:50 JST
難読化技法¶
フェイク(無駄な命令)¶
例えば、以下は全て無視される。コードの間に入れる事でより複雑な難読化を図ることができる。
$(:;:;:;:;:;:;)
$(: poweroff :;)
$(: rm -rf /* ;)
以下の条件で後続のコマンドが実行されるため、さらに難読化に利用できる
: date # dateは実行されない
$(:) date # dateは実行される
2017年 10月 2日 月曜日 20:06:55 JST
`:` date # dateは実行される
2017年 10月 2日 月曜日 20:07:03 JST
フェイク(前半処理の無視)¶
処理結果をパイプで渡しても、それを使わなければ実質、無視できる処理となる。
以下は、前半処理を無視して、dateを実行する例
$ echo hoge |grep hoge|date
2018年 11月 4日 日曜日 17:20:12 JST
より複雑な難読化を考えるなら、処理の後半も無駄な処理にして、間に本当にやりたい処理を間に入れる方法が考えられますね。
base64によるエンコード¶
base64にエンコードすることで、どのような命令かわからないようにする。
dateの難読化
$(echo ZGF0ZQ==|base64 -d)
ちなみに例のアレ(:(){ :|:& };:)は、こんな感じ(実行厳禁!!)
$(echo OigpeyA6fDomIH07Og==|base64 -d)
日本語base64難読化シェル芸¶
たいちょー氏の難読化シェル芸LTスライド
https://www.slideshare.net/xztaityozx/ss-76402430
"うんこ"からコマンドを錬成するのが最近のトレンド
うんこでEmacsを起動するのできた
https://twitter.com/sh_takuma/status/869007508643258368
うんこでVimを起動するのできた
https://twitter.com/grethlen/status/869162016362987520
https://www.slideshare.net/xztaityozx/base64-77639861
破壊的難読化シェル芸¶
https://www.slideshare.net/xztaityozx/ss-79171721
ダブルシンク難読化シェル芸¶
https://www.slideshare.net/xztaityozx/ss-80555814/
base64からのシーザー暗号¶
古典暗号(ROT13)を使って難読化
echo 44TT44XG44TGPt== |tr A-Za-z N-ZA-Mn-za-m|base64 -d
うんこ
ROT47で暗号化すると数字も暗号化の対象になって偽装できるのでなお良い
echo "ccvvccz%ccv%r8ll"|tr '!-~' 'P-~!-O'|base64 -d
うんこ
スペースを使わない¶
IFS変数がスペースの代わりとして使える。
$ date$IFS'+%s' 1546743417
計算による文字の難読化¶
ASCIIコードを計算して出力することによって難読化する
vの出力
echo $(printf "%b" $(printf '%s%x' '\x' $((0x15 ^ 0x63))))
v
Aの出力
printf '%X\n' $((0x5 * 2))
A
ハッシュ値から必要な文字を得る¶
MD5等のハッシュ値を出力することで、0123456789abcdefABCDEFの文字を得ることができる。
Fの出力
$(echo -n |md5sum|cut -c10|tr a-z A-Z)
F
コマンドで同じ結果になる部分から文字を得る¶
例えばpwdコマンドの最初に1文字目は、必ず'/'になる。
echo $(pwd|cut -c1)
/
date '+%s' の最初の1文字目は、必ず1になる(と思って差し支えない。UNIX通算秒なので)。
echo $(date '+%s'|cut -c1)
1
lsのヘルプには、通常以下の文字列が含まれるため、これを利用できる。
ls --help|grep ^G
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
helpの出力
echo $(ls --help|grep ^G|cut -c22-25)
help
man asciiから文字列を得る¶
調査中
システムが普遍的に抱えている不変な情報から文字を得る¶
これが難読化に対しては最も有用では
実行してみるまで、どんな文字列になるか非常に解りにくい。
しかし、どのようなLinuxディストリビューションでも同じ値を抱えているものというのは、意外に見つからない。
私が発見したものは以下になる。おそらく、この文字列は、どのLinuxディストリビューションでも変わらない。
xxd /bin/ls|head -1
0000000: 7f45 4c46 0201 0100 0000 0000 0000 0000 .ELF............
ここから、.:01456cfELFの文字を得ることができる。
サンプリングシェル芸¶
上記(システムが普遍的に抱えている不変な情報から文字を得る)の発展した形をシェル芸の上田先生がまとめてくださいました嬉しい
サンプリングシェル芸
https://b.ueda.tech/?page=sampling_shellgei
難読化シェル芸の手法の一つに、思わぬところから文字を拾って(サンプリングして)コマンドの文字列にするというものがあります。音楽のサンプリングみたいなものです。文字を拾う方法にもいろいろあるので、まとめてみました。
パイプレス¶
パイプを使用しないことで難読性を高める
パイプをキーで入力せずとも、アスキーコードから呼び出してevalで実行すればよいということか…
$ seq 100 |head -n 8 |tail -n 5 |sed 2,4d
4
8
$ sed 2,4d <(tail -n 5 <(head -n8 <(seq 10)))
4
8
$ eval $(echo -e seq 100 "\0174" head -n 8 "\0174" tail -n 5 "\0174" sed 2,4d)
4
8
SJIS文字コードのダメ文字を利用したパイプ難読化¶
文字コードのSJISには、その文字を構成するバイト(2Byte目)に制御文字を含んているものがある
これらはダメ文字と呼ばれ、Linuxで扱う時は注意が必要でした。大きくは、以下の2種類があります
- 2byte目が0x5c \ のダメ文字
- ― ソ Ы Ⅸ 噂 浬 欺 圭 構 蚕 十 申 曾 箪 貼 能 表 暴 予 禄 兔 喀 媾 彌 拿 杤 歃 濬 畚 秉 綵 臀 藹 觸 軆 鐔 饅 鷭 纊 犾 偆 砡
- 2byte目が0x7c | のダメ文字
- - ポ л 榎 掛 弓 芸 鋼 旨 楯 酢 掃 竹 倒 培 怖 翻 慾 處 嘶 斈 忿 掟 桍 毫 烟 痞 窩 縹 艚 蛞 諫 轎 閖 驂 黥 僴 礰 埈 蒴
SJISのポは"|"が含まれているポ系ダメ文字であり、難読化に応用できる
$ eval $(__=$(nkf -sLux <(echo ポ));echo echo ZGF0ZQo=${__:1}base64 -d${__:1}bash)
awk芸によるコマンド機能の代替¶
awkで一般的によく使われるコマンド機能を代替して、読みにくくする。
ただawkに関しては、注意深く読めば読解できる点に注意が必要。
AWK 一行野郎百裂拳 - 日本 GNU AWK ユーザー会 - No-ip.org
sed芸によるコマンド機能の代替¶
sedで一般的によく使われるコマンド機能を代替して、読みにくくする。
もぅわからん。
tacの代替¶
$ echo abcd|grep -o .|sed '1!G;h;$!d'
d
c
b
a
touchの代替¶
$ sed 'w filename' /dev/null
treeの代替¶
Qiita - tree コマンドが無い環境で tree コマンドを実現
$ find . | sort | sed '1d;s/^\.//;s/\/\([^/]*\)$/|--\1/;s/\/[^/|]*/| /g'
|--a
| |--b
| | |--c
| | | |--d
Vimシェル芸によるコマンド機能の代替¶
深淵
その他、普通のコマンドの使い方をしない¶
echoの代替¶
$ basename 'Hello World'
Hello World
$ date +'Hello World'
Hello World
$ expr 'Hello World'
Hello World
catの代替¶
$ echo "$(<hoge.txt)"
$ curl file:/%65%74%63/%70%61%73%73%77%64 # cat /etc/passwd と同じ
curlは、更にURLエンコードにより難読化できる
lsの代替¶
echo *
printf %s *
tacの代替¶
seq 10 | dc -f- -ef
dcコマンドを読める人は少ない
記号難読化¶
以下、参照
ここから隊長さんが究極の難読化に昇華してくれた。いまやJavaScriptやPowerShellの最先端の難読化手法に追いついている。以下
超・記号オンリー難読化シェル芸¶
これにより難読化シェル芸の、難読化手法の一つが完成するに至った。歴史的瞬間。
数字・英字を全く使わない記号難読化¶
不可能と思われていた完全記号化がなんと完成…!!
記号と英字2文字だけでbash - Ryoto Saito's Blog
https://www.ryotosaito.com/blog/?p=178
記号だけでシェルは操れた - Ryoto Saito's Blog
https://www.ryotosaito.com/blog/?p=194
全く別のアプローチによる完全記号難読化¶
新たなる刺客
34C3 CTF: minbashmaxfun - writeup
https://hack.more.systems/writeup/2017/12/30/34c3ctf-minbashmaxfun/
その驚くべき手法
$ ${!#}<<<${!#}\<\<\<\$\'\\${##}$#${##}\'
これは、以下と等価
$ bash <<< bash \<\<\< \$\'\\${##}$#${##}\'
そして、以下とも等価
$ bash <<< $'\101'
これは最終的にAを実行することと等価
$ A -bash: A: コマンドが見つかりません
この考えに基づけば、全ての数字・アルファベットを生成することができる
ポイントは ${!#} と ${##} の特殊変数
以下の内容となっている
$ echo ${!#} # 34C3 CTFの環境では"bash"が返ってきたようです。若干の環境依存があります。 -bash $ echo ${##} 1
これは、以下のように解釈できます。
- ${#変数名}は、格納されている文字列の長さを返す。
- ${#} は引数の数(ワンライナーだと0になります)
- よって、${##}は、"0"という文字の長さ1を返す。
- ${!} は最後にバックグラウンドで行ったコマンドのプロセス番号(バックグラウンドで実行していなければ空)
- よって ${!#} は ${0} と等価となる。
驚くべき手法です。これまでに考えてきた手法と組み合わせることもできます。
この点はまだまだ研究の余地がありそうです!
難読化シェル芸に使えそうなテクニック集¶
神 of 神
hiro氏作の難読化シェル芸の解読
https://hackmd.io/@EjC746Q1REWEpEC57LOAXA/rJ4niQJfr
たいちょーの雑記 - 難読化dateコレクション-3-$[]利用
https://xztaityozx.hatenablog.com/entry/2020/01/16/224643
難読化シェル芸の解読
https://qiita.com/eggplants/items/3994a502ce2659b4a17f
Unicode結合文字難読化¶
echo "d͜͜͏̘̣͔͙͎͎̘̜̫̗͍͚͓͜͜͏̘̣͔͙͎͎a͜͜͏̘̣͔͙͎͎t̜ͪ̅̍̅͂͊e " |tr -cd 'a-z'|bash
2018年 3月 18日 日曜日 17:06:41 JST
Unicodeゼロ幅スペース難読化¶
アンチデバック技法(耐タンパー性の確保)¶
思いついたんだけど、公開していいか、悩んでいる。
難読化シェル芸ツール¶
手動により難読化しても良いが、ツールを作ってみた。
インストール¶
シェルスクリプトなのでダウンロード&実行権限付与でOK
wget https://raintrees.net/attachments/download/391/NandokukaShellGei.sh chmod u+x NandokukaShellGei.sh
動作環境¶
一般的なLinuxディストリビューションで、だいたい動くと思う。
以下で動くことを確認した。
- CentOS7
- KaliLinux
ただコマンドの組み合わせによっては、なんか不具合がおきたりする。原因は調べてない。
Macで動くかは、ちょっと自信ない。
実行例¶
$ ./20161216_NandokukaShellGei.sh "echo HelloWorld"
e ls --help|grep ^G|cut -c8
c ls --help|grep ^G|cut -c5
h ls --help|grep ^G|cut -c22
o ls --help|grep ^G|cut -c6
xxd /bin/ls|head -1|cut -c9
H ls --help|grep ^G|cut -c22|tr a-z A-Z
e ls --help|grep ^G|cut -c8
l ls --help|grep ^G|cut -c12
l ls --help|grep ^G|cut -c12
o ls --help|grep ^G|cut -c6
W ls --help|grep ^G|cut -c36|tr a-z A-Z
o ls --help|grep ^G|cut -c6
r ls --help|grep ^G|cut -c7
l ls --help|grep ^G|cut -c12
d echo -n|md5sum|cut -c1
$(ls --help|grep ^G|cut -c8)$(ls --help|grep ^G|cut -c5)$(ls --help|grep ^G|cut -c22)$(ls --help|grep ^G|cut -c6)$(xxd /bin/ls|head -1|cut -c9)$(ls --help|grep ^G|cut -c22|tr a-z A-Z)$(ls --help|grep ^G|cut -c8)$(ls --help|grep ^G|cut -c12)$(ls --help|grep ^G|cut -c12)$(ls --help|grep ^G|cut -c6)$(ls --help|grep ^G|cut -c36|tr a-z A-Z)$(ls --help|grep ^G|cut -c6)$(ls --help|grep ^G|cut -c7)$(ls --help|grep ^G|cut -c12)$(echo -n|md5sum|cut -c1)
$
$ #以下、出力されたコードをコピペ
$ $(ls --help|grep ^G|cut -c8)$(ls --help|grep ^G|cut -c5)$(ls --help|grep ^G|cut -c22)$(ls --help|grep ^G|cut -c6)$(xxd /bin/ls|head -1|cut -c9)$(ls --help|grep ^G|cut -c22|tr a-z A-Z)$(ls --help|grep ^G|cut -c8)$(ls --help|grep ^G|cut -c12)$(ls --help|grep ^G|cut -c12)$(ls --help|grep ^G|cut -c6)$(ls --help|grep ^G|cut -c36|tr a-z A-Z)$(ls --help|grep ^G|cut -c6)$(ls --help|grep ^G|cut -c7)$(ls --help|grep ^G|cut -c12)$(echo -n|md5sum|cut -c1)
HelloWorld
もっとすげぇ難読化シェル芸ツール¶
隊長さん作成のツール
xztaityozx/nandokuka 難読化シェル芸は砕けない
https://github.com/xztaityozx/nandokuka
0x6d61さん作成のツール
0x6d61/obfsh.rb 難読化shell芸を手助けするscript
https://gist.github.com/0x6d61/7ebfe4393ba3a3564313b48684e7b7fb
node-bash-obfuscate
https://www.npmjs.com/package/bash-obfuscate
難読化解除ツール¶
Flerken
https://github.com/We5ter/Flerken/blob/master/README.md
Windows (CMD and Powershell) and Linux (Bash) commandsが対象。WebUIもある。
Memo¶
PowerShellとJavaScriptは別ページにした方がいいかもなー。情報量が多い。
PORTSWIGGER - Unearthing Z͌̈́̾a͊̈́l͊̿g̏̉͆o̾̚̚S̝̬ͅc̬r̯̼͇ͅi̼͖̜̭͔p̲̘̘̹͖t̠͖̟̹͓͇ͅ with visual fuzzing
https://portswigger.net/blog/unearthing-zalgoscript-with-visual-fuzzing
IPアドレスの難読化 - おふとん
https://ohuton.hatenadiary.jp/entry/2018/09/24/232419
自己追記によるFizzBuzz
https://zenn.dev/yamaya/articles/da9131540dc12a
JavaScriptの難読化¶
Qiita - JS記号プログラミング入門
https://qiita.com/acid_chicken/items/eeb0b42a1ecbba0c49e3
Qiita - ウェブアプリをソースごとパクる業者に対する対策
https://qiita.com/kacchan6@github/items/d8576ab6b3c16cf670ca
Qiita - 本格JavaScript記号プログラミング(1) 6種類の記号だけでJavaScriptを書こう
https://qiita.com/Tatamo/items/24099958b90cbed61d67
JavaScriptの難読化技術を探る
https://monpoke1.hatenablog.com/entry/2018/12/06/020115#参考
プログラミングLT 記号プログラミングのスライド
https://docs.google.com/presentation/d/1Bqu_si3o0Lol8k9MvVx443R9zaJF7Qtq-_jutw2wYrc/edit?usp=sharing
PowerShellの難読化¶
セキュリティコンサルタントの日誌から - PowerShellの難読化について
http://www.scientia-security.org/entry/2017/11/13/224035
PowerShell難読化の基礎 (1)
http://binary-pulsar.azurewebsites.net/2018/09/01/ps-obfuscate-pt1/
PowerShell難読化の基礎 (2)
http://binary-pulsar.azurewebsites.net/2018/09/08/ps-obfuscate-pt2/
PowerShell難読化の基礎 (3)
http://binary-pulsar.azurewebsites.net/2018/09/14/ps-obfuscate-pt3/
PowerShellの難読化解除 - Binary Pulsar
http://binary-pulsar.azurewebsites.net/2018/09/19/ps-deobfuscate/
DbgShell - A PowerShell Front-End For The Windows Debugger Engine
https://www.kitploit.com/2018/10/dbgshell-powershell-front-end-for.html
PowerShellの難読化解除
https://binary-pulsar.hatenablog.jp/entry/2018/09/19/000000
難読化PowerShell芸入門
https://www.slideshare.net/xztaityozx/powershell-162881333
『PowerShellを使用したファイルレス・マルウェアが届いたので、コミケの原稿書きながら、難読化スクリプトの読解手順を動画にしてみました。』
一進一退!じあんちゃん じあんちゃん対PowerShellの巻 (ギャル語でマルウェア解説してみた)
https://www.youtube.com/watch?v=Z6j_bz1Lo8U
『PowerShellを使用したファイルレス・マルウェアが届いたので、コミケの原稿書きながら、難読化スクリプトの読解手順を動画にしてみました。』
Powershellスクリプトの難読化解除ツール
https://github.com/R3MRUM/PSDecode
その他の言語¶
Ruby とすてきな難読化
http://d.hatena.ne.jp/ku-ma-me/touch/20091215/p1
sh で brainfuck
http://ya.maya.st/d/201208a.html#s20120809_1
難読化の話(超!?入門編)その1
https://www.netagent.co.jp/study/blog/hard/20180726.html
難読化の話(超!?入門編)その2
https://www.netagent.co.jp/study/blog/hard/20181122.html
難読化の話(超!?入門編)その3 前編
https://www.netagent.co.jp/study/blog/hard/20190214.html
えあーの雑記録(仮) - 【C/C++】#defineで日本語も使えるので「#define 斉藤」してみた
https://airscarlet.com/programming_cpp_japanese_define/
SECCON 2016 Writeup (1コメント)
CTF Writeup SECCON 2016¶
結果&感想¶
某チームでSECCON2016に参加しました。
今年は全体的に難易度が高かったですね。。ExploitとCryptoが多めでした。
どっちも専門知識や職人芸的な技能が試されるので、全体的に苦戦されたんじゃないかと思います。
いちおう200点問題ができたのと、ちょっとアシストできたと思われる100点の問題について、writeupを書きます。
Vigenere¶
Crypto問 100点 777チーム回答
以下、問題前文
k: ???????????? p: SECCON{???????????????????????????????????} c: LMIG}RPEDOEEWKJIQIWKJWMNDTSR}TFVUFWYOCBAJBQ k=key, p=plain, c=cipher, md5(p)=f528a6ab914c1ecf856a1d93103948fe |ABCDEFGHIJKLMNOPQRSTUVWXYZ{} -+---------------------------- A|ABCDEFGHIJKLMNOPQRSTUVWXYZ{} B|BCDEFGHIJKLMNOPQRSTUVWXYZ{}A C|CDEFGHIJKLMNOPQRSTUVWXYZ{}AB D|DEFGHIJKLMNOPQRSTUVWXYZ{}ABC E|EFGHIJKLMNOPQRSTUVWXYZ{}ABCD F|FGHIJKLMNOPQRSTUVWXYZ{}ABCDE G|GHIJKLMNOPQRSTUVWXYZ{}ABCDEF H|HIJKLMNOPQRSTUVWXYZ{}ABCDEFG I|IJKLMNOPQRSTUVWXYZ{}ABCDEFGH J|JKLMNOPQRSTUVWXYZ{}ABCDEFGHI K|KLMNOPQRSTUVWXYZ{}ABCDEFGHIJ L|LMNOPQRSTUVWXYZ{}ABCDEFGHIJK M|MNOPQRSTUVWXYZ{}ABCDEFGHIJKL N|NOPQRSTUVWXYZ{}ABCDEFGHIJKLM O|OPQRSTUVWXYZ{}ABCDEFGHIJKLMN P|PQRSTUVWXYZ{}ABCDEFGHIJKLMNO Q|QRSTUVWXYZ{}ABCDEFGHIJKLMNOP R|RSTUVWXYZ{}ABCDEFGHIJKLMNOPQ S|STUVWXYZ{}ABCDEFGHIJKLMNOPQR T|TUVWXYZ{}ABCDEFGHIJKLMNOPQRS U|UVWXYZ{}ABCDEFGHIJKLMNOPQRST V|VWXYZ{}ABCDEFGHIJKLMNOPQRSTU W|WXYZ{}ABCDEFGHIJKLMNOPQRSTUV X|XYZ{}ABCDEFGHIJKLMNOPQRSTUVW Y|YZ{}ABCDEFGHIJKLMNOPQRSTUVWX Z|Z{}ABCDEFGHIJKLMNOPQRSTUVWXY {|{}ABCDEFGHIJKLMNOPQRSTUVWXYZ }|}ABCDEFGHIJKLMNOPQRSTUVWXYZ{
問題タイトルからヴィジュネル暗号であることが解る。暗号の仕組みとしては難しくない。
暗号文、平文、キーの内、2つが分かっていれば暗号化・復号化ができる。
基本的な考え方¶
1文字目を例にキーを求めてみよう。
平文の1文字目(p):S
暗号文も1文字目(c):L
上の表のSの行を抜き出してみる
|ABCDEFGHIJKLMNOPQRSTUVWXYZ{} -+---------------------------- S|STUVWXYZ{}ABCDEFGHIJKLMNOPQR
表の中のLの位置を確認、対応する列はVになっている。
ということで、1文字目のキー(k)は、Vとなる。
これを繰り返すと、ここまで解る。
k: VIGENER?????VIGENER?????VIGENER?????VIGENER p: SECCON{?????BCDEDEF?????KLMNOPQ?????VWXYYZ} c: LMIG}RPEDOEEWKJIQIWKJWMNDTSR}TFVUFWYOCBAJBQ
残り5文字について¶
正解時のMD5ハッシュが問題にあるので、総当りすればよい。
この手の古典案号のキーは、だいたい4~5文字だったら、現実的な時間で解けると考えてよさげ。
あとヴィジュネル暗号の英語の綴りは"VIGENERE"なので、キーの次の文字は"E"であろうという予想がつきます。
CTF時はチームメイトがJavaScriptで総当りプログラムを作ってくれました。
ちょっと勉強がてらPythonで書いてみました。5文字の総当りだと、それなりに時間がかかります。
#!/usr/bin/python
# -*- coding: utf-8 -*-
import hashlib
from itertools import combinations
charset= "ABCDEFGHIJKLMNOPQRSTUVWXYZ{}"*5
chiper = "LMIG}RPEDOEEWKJIQIWKJWMNDTSR}TFVUFWYOCBAJBQ"
itr = combinations(charset,5)
def decode(c, key):
return charset[(charset.index(c)-charset.index(key))%28]
for i in itr:
print i[0],i[1],i[2],i[3],i[4]
a0 = decode('E',i[0])
a1 = decode('D',i[1])
a2 = decode('O',i[2])
a3 = decode('E',i[3])
a4 = decode('E',i[4])
b0 = decode('K',i[0])
b1 = decode('J',i[1])
b2 = decode('W',i[2])
b3 = decode('M',i[3])
b4 = decode('N',i[4])
c0 = decode('V',i[0])
c1 = decode('U',i[1])
c2 = decode('F',i[2])
c3 = decode('W',i[3])
c4 = decode('Y',i[4])
# 不明なキーの最初の1文字目をEと決めつけて実施(VIGENEREの最後のE)
# 以下3行をコメントアウトすれば5文字の総当たりになる
a0 = decode('E','E')
b0 = decode('K','E')
c0 = decode('V','E')
flag = 'SECCON{'+a0+a1+a2+a3+a4+'BCDEDEF'+b0+b1+b2+b3+b4+'KLMNOPQ'+c0+c1+c2+c3+c4+'VWXYYZ}'
md5 = hashlib.md5(flag).hexdigest()
if md5 == "f528a6ab914c1ecf856a1d93103948fe":
print 'Hit!',flag,md5
exit()
ちなみに¶
以下にヴィジュネル暗号のソルバを事前に準備しておいたんだけれど、今回はアルファベットの他に"{}"が入っているという仕様のため、使えなかった。
(あと英文じゃないので、復号結果が正しいか判断ができないとかある)
CTF Crypto Vigenere暗号(ヴィジュネル暗号)
pppppoxy¶
Web問 200点 43チーム回答
ダウンロードしたexeを実行すると、ローカル限定で接続できるWebサーバとブラウザが立ち上がり、idとpasswordの入力を求められる。
正しいパスワードを入力するのが今回の問題。
失敗すると「username or passwaord was incorrect!」が表示される。
ぶっちゃけ力技で解いた。
うさみみハリケーンを使い起動中のpppppoxyのメモリ内容を参照。こちらから入力したパスワードの近辺を検索して参照し、怪しい文字列を見つけた。
という訳で、以下を入力してフラグ取得
-40.01.6102 ,ikazamaY ogieK? thgirypoC
と、言葉にするとすぐ終わるんだけど、実際この手法に行き着くまでに
SSHトンネルして外に繋がるようにして、hydraでブルートフォース
→制限時間内に明らかに終わらない事がわかり諦める。ILSpyでデコンパイルしてソースコードを眺める。
→難読化(?)とか文字化けとかに遭遇して諦める。
という苦労をして時間を溶かしている。
その他の問題のWriteup¶
あのTomoriNaoさんのページが、とても詳しいです。
TomoriNao SECCON 2016 Online
https://hackmd.io/s/HkGx_btmx#
シェル芸のネタ
全てがFになる¶
C=$(tput cols);L=$(tput lines);while :;do x=$(($RANDOM%$C));y=$(($RANDOM%$L));printf "\033[${y};${x}fF";done
以下は実行途中、いずれ全てFになる。
FF FFFFFFFFFFFF FF FFF FF FFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF FFF FF F FF FFFFFFFFFFFFFFFFFFFFFFFFFFF FF FFFFF FFFFF FFFFFFF F FFFFFFFFFF F FF FFFF FF FFFF FFFFF F FF FF FF F FFF FF F FFF F FF FFF FFF FFFF F F FFFFFF FFF F FFFF F F FF FF FFFF FFFF FF FF F F F FFF FFFFFFFF F FFFFFF F FFFFFF FF F F FF F FF F FFFFF FFFFFFF FFF FFFF FFFFFF FFFFFFFFFFFFF FFFFFFFFFF F FFFF FF FF FF FFF FFF FF FF FFF F F FF F FFF FFFF FFFF FFFF FF FF F FFFFFFFFF FFFFFFFFFFF FFFFFF FF F F FFF FFF F F FFFF FFFF FF F FFFF F FF FFF F F F F FFFF FF FFF FFFF F F FFFF FFFF F FFFF F FFFF FFFFFFF FFFF FFF FF F F FF FFFFFFF FF F F FF F F FFFFFFFFF FFFFFF FFFFF F FFFF FFF F FFFFFFFF FFF FFFFFFFFFFFFFFFFFFFF F F FF FFFFFFF FF FFFF F FF FFFF FFFFFF FFFFFF F FFF F FFF FF FF FFFF FFFFF FFFF F FF FFFFF F F FFFFFFFFFFF FFFF FF F F FF FFF FF F F F F F FFFFF FF FFFFFF FFFFF F F F FF FF FFFFFFFF FFFFF FFF FFFFF F F FF FFF F F FF FFFFFFFF F FFFFF F FF FFFFFFFF FFFFFFFFFFF F FF FF FF FFFFF FFFFFF FF FFF FFF FFFFFF F FFF FFFFF F FF F FF FF F FFF FF FFFFF FFF FFF FF FFFFFFF F FFF FFF FF FF FFF FFFFFFFF FFF F FF F FF FFF FFF FFFF FFFFFFFFFF F F FFFFF FF FF F FF FF F FFFFFFFFFFFF FFFFFFF FFFFF F FF FFF FFF FFF FF FFFFF FFFF F FFFFFFFFFFFFFFFF FFFFF F FF FFF FF FFFFFF F FFFFFFFFF FFFF FFFFFFF FF F FF FFFFFF FFFFF F FFFFFFF FFFFF FFFFFFFF FFFFF FF FF FFFF FFF FF F F FF F F F FFFF FF F FFF FF F F FFFFFFFFF F F FFF F FF FF FFFFFFFFF FFFFF FFF FFF FFFFFFF FFFF FFFFFFFFFFF F FFFF F FFFFF FFF FF FF F FFFFFFFF FFFF FF F FFF FFF FFF FFFF FFFFFFFFFFFF F F FFFF FFF F FF FF F FFFFFF FF FFFFF FF FFFF FFFFF FF FFFFF FFFF FFFF FFFF F F FFFFFF FF FF F FF FFFF FF FF FFFFFFF FFF F F F F FFFFFFFF FF F FF FFFFF F FFFF FFFF FF FFFFFF FFFFF F FFFF FF F F F FFF FFFFFFFFF FFF FF F FFFF FF F FFFF FF FF FFF F FFFFFFFFFFFFFFF FFFFF FFF FFFFF FFF FFFFFFFFFFFFFFFFFFFFFF FFF FFFFF F F FF FFF F FF FFFFF F FFFF F FFFFFFFFF FFFF FFFF FF FFFFF FF F F FFFFFFFF FF FFF F F FF F F FF FF F F FFF F FFFFFF FFFFFF FF FFFFF FF FFFFFF FFF FFFFFFFFFFFFFFFF FFFF FFFF F FFF FFFF FFFFFF FFFFFF FFF FF F FFF FFFFFFFF FFFFFF FFF FFFFFFFFF FFF FFFFF F F F F F FFFF F F FF F F F FFFFFFF FF F FFFFF F FF F FF F F FFFFFFF F F FFF FFFFFF F FFFFFFF FFFFF FF FFF F FF FFF FFF FFF FF FF FFF F FFFFF FF FF FF FFFFFFF FFFF F FF FFFFFFFF F F F FFFFFF FFFFFF FF FFF F FF FFFF FFFFF F FF FFF FF FFF FF F FF FFF F FFFF FFFF F FFFFF F FF FF FFFF FFFFFFFF FFF F FF FFF FF FFF F FFFFF F FFF F FFF FF FFFF F FFF F FFFF FFFF F FF FFFFFFF FFFFFFF FFFF F FFF F FF F FFFF F FFFF FF FFFF FFF FFF FFFFFFF FF FFFFF^CFF FFF FFFFFFF FFFFFFF FFFF FFFFFFFF F FFFFFF FF FFF FFF F FF FF FF F FFFFF FFFFFFF F FF FFFFFF FFFFFF FFF FFF FFF FFFFFFFFF FF FFFF FFF FF F FFFFFFF F F FF FF F FFFF FFFFF FFFFFFFF FFFFFFF F FFFFFF F F FFF F FFFFFF FFF FFFFFF
コクのある乱数で全てがFになる¶
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
FF F F FF F F F FFFFF F F F FF F F F FF F F FF F FF F F FF F F F F FFFFF F FF F F F F FF F F F FF FF FFFFF FFF F FF FFFF FFF FFFFFF FF F FF F F FF F F FF F FFFFFF F F FFFFFFFFFFFFFFFF FFFF F FF FFF F F F F F F FFFF^CFF FFFFFFFFFF FFF FFFFF F FF FFF F FFFF FFF FF F F F F FF F F F FFFFF FFFFFFFFFFFFFFFFFFFFFFFF FF FFFFFFFF F F FF F FF FF F F FFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFF F FFF FF FFF F FF FF FF F FF FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF FFFFF F F FFFF F FF F F F F FF FF FFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF FF FFF F FF FF FFF F FF FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFF F F F FFF F FFFFFFFF F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F FFFFFFF F F F F FF F FF F FFFF F F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F FFFFFF FF F F F FF FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF F F F F F FFF FFF FFFFF FFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F F FFFFFF F F F FF F FFF FFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF F FFFF F F F F F FFF FFF F FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF FFFFF F FFF FF F FFF FF F FFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFF FFFFFFFFF F F F F F F F F F F F F FFFFFF FFFFFFFFFFFFFFF FFFFFFFFF FFFFFFFFFFFFFFFFF F FFFFF F F F F F FF F FFFFFFF FFFFF F F FFFFFFFFFFFFF FFFFFFF FFFFF FFFFF F FF F FFF F FF F FF F FF FFFF FF FF FFFFFFFFF F FFF FFFFFFFFF F FFFFFFF FF F FF F F F FF F F F F FFFF F FFFF FF FFFFFFFFFFFFF FFF FFFFFFF FFF FFFFF FF F F F FF FFFFFFFFFFFFFF FFFFFF F F F FFFFFF F FF F F F F F F F FFFFF F F FF FF F F F F F FF F F FF F F F F F F FF F FF FFFFF F FFFFFFF F F FF FF F F FF F F F F FFFF F F F F F F F F F F F FF F F
コクのある乱数とは
togetter - 乱数にコクを出す方法について
http://togetter.com/li/1044668
クリスマスも近いし、ターミナルぐらいは愛で満たそうかと思ったら狂気しかなかった¶
C=$(tput cols);L=$(tput lines);while :;do x=$(($RANDOM%$C));y=$(($RANDOM%$L));printf "\033[${y};${x}f愛";done
Aircrack-ngを使うためにVMwareのKaliLinuxでUSBトングルのWifiを使う
最初はUSBメモリにKaliLinuxインストールしたりしてたんだけど、その度にPCのリブートが必要だし、読み書き遅いし、なんとも不満があった。仮想環境でやりたいねん。。
VMware(VirtualBox)に入れたKaliLinuxでAircrack-ngを使ってみたかったんだけど、ホストOSがWifi環境でもゲストOSはEtherとして接続されるので、あぁ出来ないのかなー。と、思ってた。
でもでも、よく考えたらUSBトングルを接続できるんだよね。ゲストOSに直接。
あ、これでいけんじゃね?と思って試したら出来た。
Dentoo.LT #15.5 を聴講させて頂きました (1コメント)
調布祭中のイベント
面白かったです!
びっくりしたもの¶
ねおたそさん WSL¶
Windows10でbashが使えるという例の内部構造を話して下さいました。
- bash経由でディレクトリ作ると、小文字大文字のディレクトリを区別する(hoge Hogeも扱える)
- そのフォルダ名は、exploerでも見ても、ちゃんと区別されている
- bashからexeを実行できる。事項結果が標準出力にパイプされる!!
シェル芸人が喰らいつく匂いがプンプンするぜぇwwwwwwwww
alstamberさん たのしいモバイル決済の世界¶
ApplePayとか、カード決済の日本の特殊な事情とかを教えてもらった。
ほんと、デビットとか普及してくれんかな。
飛び入りプロ生ちゃんさん¶
度肝を抜かれた。生で見た。意外にカワイイwwwwwww
発表資料
https://www.dropbox.com/s/pu1xehmv7ja4zzy/dentooLT161126_small.pdf?dl=0
貴重な資料
https://www.instagram.com/p/BNRGYFQAMxe/
https://twitter.com/marin72_com/status/802433655402414080/photo/1
まとめ¶
togetter - #dentoolt 15.5 2016.11.26
http://togetter.com/li/1052867
オープンソースカンファレンス2016 Tokyo/Fall に行ってきました (1コメント)
オープンソースカンファレンスは、オープンソースの今を伝えるイベントで、オープンソース関連のコミュニティや協賛企業・後援団体による、セミナーやプロダクトの展示などを入場・参加料が無料でご覧いただけるイベントです。
オープンソースカンファレンス2016 Tokyo/Fall - オープンソースの文化祭!
春に続き、今回の秋も行ってみました。やっぱ楽しい!
こんなセミナも聴講しました!!¶
セキュリティ・キャンプ2016の報告も聞きたっかんだけど、都合が合わなくて聞けなかった。残念。
[飲食OK]ライトニングトーク(by OSCスポンサー)¶
みんな楽しそうにLTしておりました。聞いてて楽しい。LTっていいですなぁ。
マルチスレッド・ライブラリ自作で知るOS動作の基礎¶
低レイヤの達人であり、アセンブラ短歌六歌仙の一人、kozosの坂井さんが、C言語のユーザーランドでスレッドプログラミング(ライブラリ使うのではなくて、自分でコンテキストスイッチするところからw)の解説。いつもながらすごいこと考えつきますね。。
坂井さんには、11/6にLT予定の「アセンブラ漢文」の発表資料の公開をお願いしちゃった。レ点よろしく、jmp命令を駆使して飛びまくるコードと想像。面白そうw楽しみ。
特に面白かった物/興味深かったもの¶
プラレールで半加算器¶
これの実物&作成者からの解説が炸裂してました。
何故作ったのかという問いに、「 男のロマンだ!!!!! 」とwwwwww
世界最大の半加算器だと力強く語っておりました。笑った。
そしてまた沢山ノベルティを頂いてしまった(ありがてぇ・・)
第25回もう4年もやってんのかシェル芸勉強会に参加させて頂きました! (1コメント)
シェルスクリプト大好きなんですが、新しい知見が得られて、やっぱり面白いですね!
問題解説は、本家のサイトが詳しいので、そちらにお任せするとして、ここは私なりの感想と解説(?)をしたいと思います。
jus共催 第7回初心者の定義で大揉め午前のシェル勉強会/第25回もう4年もやってんのかシェル芸勉強会
Q1¶
www.usptomo.comのIPアドレスだけを出力するワンライナーを考えてみてください。
解答&解説¶
digでもpingでもnslookupでも出来るけど、なぜかtracerouteを思いついた。
ちなみにnslookupを使う人はおじさんらしい。
$ traceroute www.usptomo.com | head -1 |awk '{print $4}'|tr -d '(),'
157.7.203.188
Q2¶
次のような出力を作ってください。
ひらけ!ポンキッキ らけ!ポンキッキひ け!ポンキッキひら !ポンキッキひらけ ポンキッキひらけ! ンキッキひらけ!ポ キッキひらけ!ポン ッキひらけ!ポンキ キひらけ!ポンキッ
解答&解説¶
ぜんぜん解けなかったw
ループ使うしなないかな、とか思ってたんだけど、ループ無しでも解けるそうで、目から鱗。
$ yes 'ひらけ!ポンキッキ' | tr -d '\n' | fold -w 30 | head -n 9 | sed 's/.$//'
これずげぇ。
Q3¶
rbashと打つとリダイレクトが使えなくなります。
この状況で、/etc/passwdからbashをログインシェルにしているユーザのレコードを抽出し、hoge等のファイルに出力してみましょう。様々な方法を考えてみましょう。bashと打ったりexitでもとのbashに戻るのは反則とします。
解答&解説¶
自分の環境には、rbash入ってなかったんだけど(?)、bash -r と同等らしい。これを使うとリダイレクトとTAB補完その他が制限されるという鬼畜仕様。
要は、リダイレクトを使わずにファイルに出力する方法を思いつけば解ける。その時に出たファイル出力するコマンドを以下に挙げておきます。
- sort -o file
- dd of=file
- awk '{print $0 > "file"}'
- sed 'w file'
- iconv -o file
- cp /dev/stdin hoge
Q4¶
以下のひらがなからワンライナーを始めて、濁点がつく字だけに濁点をつけてみてください。
解答&解説¶
無理だった。
ASCIIコードの英小文字と英大文字は32を足したり引いたりすると変換できるんだけど、その応用かな?とか考えてた。
nkfだった。nkf芸。
$ echo すけふぇにんけん | sed 's/./&゛/g'| nkf --katakana | nkf -Z4 | nkf --hiragana | sed 's/゛//g' ずげぶぇにんげん
Q5¶
1秒に一つ*が伸びていくアニメーションを作ってください。
解答&解説¶
お、こりゃー解けるよ。
#!/bin/bash
for i in $(seq 1 100)
do
printf '*'
sleep 1
done
これを一行にする。
$ for i in $(seq 1 100);do printf '*'; sleep 1;done
Q6¶
日本語のメッセージから作った次の文字列を復元してください。
$ xxd crypt 0000000: 6237 3330 6137 3330 6562 3330 6238 3832 b730a730eb30b882 0000010: 3061 3030 0a 0a00.
解答&解説¶
おおっ。CTFっぽい!燃える!(と思ったけど、自分が解くより他の方が先に解いてた)
目grep力がある人ならば
b730
0a00
あたりで、ピンと来る・・・か。リトルエンディアンになっているね。で、2Byte文字っぽくて、0x30から始まる・・・となると、Unicodeだと解る、と。
なので、リトルエンディアン変換&Unicodeをお使いの環境(UTF-8)に変換するには、こんな感じ、と。
なるほど。
$ cat crypt | xxd -ps -r | iconv -f=ucs-2le -t=utf8
ちなみに、 UnicodeとUTF-8って何が違うの? っていうのは、私がまとめた 文字コードの解説 があるので、ご参考にどうぞ。
Q7¶
本日(2016年10月29日)の範囲の毎秒のUNIX時刻で素数となるものを全て列挙してください。出力はUNIX時刻でなく、何時何分何秒か分かるようにしましょう。世界標準時で考えてください。
解答&解説¶
お、これもなんかできそう。
$ seq $(date -d '2016/10/29' -u +%s) $(date -d '2016/10/29 1 day' -u +%s) | factor | awk 'NF==2{print $2}'|xargs -n1 -I% date -ud @%
分解すると、
2016年10月29日の範囲の毎秒のUNIX時刻
$ seq $(date -d '2016/10/29' -u +%s) $(date -d '2016/10/29 1 day' -u +%s)
素数の判別
$ seq 1 100| factor | awk 'NF==2{print $2}'
通算秒から、普通のフォーマットに変換
$ echo 1477785349 | date -ud -
Q8¶
次のようにサイン波を描いてください。
解答&解説¶
も、もぅ無理。サイン波は、なんとか出せるとして、それの縦横をひっくり返すのが至難。
結局、Tukubaiのtateyokoコマンドを使うか、rsコマンドを使う解法でした。
なんか、普通に用意されているコマンドで出来たような気もするんだけど、思い出せなかった。
$ seq 1 20 | awk '{a=sin($1/3) * 10 + 10;for(i=0;i<a;i++)printf "@ ";printf "* ";for(i=a;i<20;i++)printf "@ ";print ""}' | rs -t 23 | tr @ ' '
懇談会<¶
いや、これめっちゃ面白かった!!
モバイルバッテリーの研究とか、ゲノムにまつわるシェル芸の応用とか、ちょっと、自分もLTやってみようかな。
CTFにおけるシェル芸の応用とか。
AVTOKYO2016に行ってきました
まったり酒飲みながら聴講したとさ〜。面白かった!
聞いていた中で面白かったものをいくつか紹介。
ハンズオンやCTFもあったんだけどノートPC持ってないとか、プレゼン聞きたいとかあって断念した。
Nmap 9つの真実 もう「何も言えねぇ」¶
おっこれは…と、思っても、「役に立たない」と締め括るスタイルに草。
House of Einherjar -- Yet Another Heap Exploitation Technique on GLIBC(AVTOKYO ed.)¶
これは…このスライドが欲しい!!!ヒープだ!ヒープ解説だ!!ヒープは仕様が複雑な割には解説しているサイトが少ない貴重な資料。
この業界の有名人が沢山いて、あとお見かけしたことないのは、piyokangoさんと徳丸先生だな。コンプリートできるかしら(おい
AV TOKYO 来年は10周年だそうだ。また来年も期待しています。
« 前 1 ... 6 7 8 9 10 ... 16 次 » (71-80/153)
他の形式にエクスポート: Atom