ぺぺっぱーの日記帳

なんか そういうかんじで

「ぺぺっぱー」の由来

初対面の人に「ぺぺっぱーです」って言うと稀によく「ペペ◯ーション?」と言われるが、そういえばまともにあちこちで使っている名前の由来って書き残したこと無いなと言うことに気づいたので思い出せる限りで列挙

ぺぺっぱー

もしかしたら現行で生きてる名前の中で使ってる期間が長い気もしている
どっちが先だったかはっきりとは覚えていないが、恐らくFantasy Earth Zeroあたりの「白こしょう」という名前かA.V.A.あたりの「ぺっぱー」だったか「pepper」だったかの名前あたりが起源だったような記憶がある
確か名前を決めようとして悩んでいたら頭の中にキッチンが思い浮かんだような記憶がある
で、「pepper」は高確率で既にIDを取られているので「pe」の部分を増やして「pepepper」になったのが長いこと使われている
略されるときは[ぱぺっ]+ー*とか[per]+とかになりがち(稀に倍くらいの長さに引き伸ばされている場合もある)
なお、Twitterで「pepepper」だけで検索するとガンギマリピカチュウアイコンの別人が出てくることで有名 追記: 800日ぶりぐらいにアズールレーンを起動したらユーザー名が「ぺっぱー」だった 2018年くらいに作成したアカウントっぽい?(所持艦にネプテューヌコラボがある)

白坂千春

Mastodonをやっていた2018-2020あたりで主に使っていたユーザー名 「千春」の部分はすごい名前メーカーか何かで生成して、白坂の部分はなんとなくだったはず
また、あるキャラクリゲーの美少女の名前にも使用していて、そちらは三姉妹設定があったこともある
それっぽい偽名で扱いやすいので不本意なユーザー登録等でも使いがち
この名前で呼ぶ人はMastodon時代にそれなりにつながりがあった人か、偽名で登録されたメールマガジン程度

百谷涼花

2023年位?に突然Twitterアカウントのアイコンと表示名を変えたらフォロワーがどんな反応をするのか気になったときに考えた名前
名前の生成は白坂千春と同様に苗字がなんとなく 名前がすごい名前メーカーだったはず
自分が名乗るときに使うことは基本的になく、私が「百谷涼花」と言って指すのはほぼ確実に青髪青目長髪巨乳美少女である
一方で他人が私のことを指す際に百谷涼花と呼ばれることはある

なお百谷涼花の外見に関しては、白坂千春と同じゲームで同時期に作成された水野七絵がベースになっている

生きてますよ

ツイッターで流れてくる話題を見ていると世間が嫌になってくることに気付いてツイッターから撤退してなんかもう1ヶ月位が経ったみたいです。

現実側では普通に動いているし、私の周辺のツイッタラーを眺めると生きていることはすぐ分かるのですがいっちょここらで生存報告を兼ねた近況をね。

 

 

 

でもこのブログの読者ってこれ無くても生存確認してるじゃんね。

 

電工落ちた

圧着で1.6mmx2本の時だけ小圧着を◯刻印するやつあるじゃないですか。

あれでミスって2.0mm+1.6mmのやつも勢いで◯刻印しちゃったことに終わったあとの会話で気付いてしまったんですね。

「電線接続はWAG◯に限る」とか無いんすか?

 

10分くらい余ってはいたんですがやっぱり焦りはするので、もっと時間を残すためにMCCのVA線ストリッパーを買いました。(ガシャコンするやつの中でも珍しくゲージが本体に付いてる)

がなんとMCCのストリッパーは右利き・左利きの区別がある&ちょうど行った店で右利き用が売り切れていたことにより、うっかり左利き用を買ってしまいました。(店に電話して入荷後に交換したのでgot kotonaki)

 

そういうところなんじゃないですか?

 

某社の長期インターンで勤務し始めた

8/1から某sksat氏とか某KOBA789氏がいる某社でインターンを始めました。

ちなみに某にした理由はハードウェア系ありで信頼できるオタク(上記二人)が某研究学園都から通っているからです。

 

 

TXが8両化して東京側が延伸されたら電車通勤も考えなくもないです。

 

イカ割った

某つくばの放電屋に招集(諸説)されてスイカを割ってきました。

www.youtube.com

リアルの私を知っている人は何回私が出てくるかを数えると面白いかもしれません。

あと一部シーンではカメラ回してます。なんかブレてる気がするので次回までに体幹を鍛えておいたほうが良さそうです。

動画にはぴじぇねこが出ていますが、動画に出ていないところで何故かこの2日間ハトがずっと佇んでいました。何だったんだアレは。

イカジュースはマジで美味かったです

 

NT東京に出ていた

東京広域電話網として出していました。私はワープロ担当ですね。

特にワープロに興味を持って見に来る人のパターンとしては、懐かしい〜という人と、Kernel/VMで見ました!という人と(ありがたい限りです)、某芸能人のホームページにつられて来る人が多かったように感じます。

あと、何をトチ狂ったのか化南郡立化学物質不使用小学校のPTA総会開催のお知らせを10枚刷って持っていったのですがなんか捌けてて怖かったです。(ほとんど身内が持っていっていたとは思いますが)

ワープロの例文集の一番上がPTA総会開催のお知らせだったのが悪いよ。

 

 

 

あとなんか書くことあるかな 思い出したら適当に書きます。

ICのデータシートを探すコツのメモ

データシートアルヨみたいな顔して全く関係ないカスのPDFを置いているサイトがあるので注意する。www.alldatasheet.comとwww.datasheetarchive.comはちゃんと置いてある(ただしTechnical ManualではなくProduct Briefが置かれている場合もあるのでその時は残念) bitsavers.informatik.uni-stuttgart.deも使えるときは使えるがアーカイブの方針上最初に探す場所としては向かないかも

後は国内で販売されたことのありそうなICなら

部品検索|e-NEXTY|電子部品・半導体商社のネクスティエレクトロニクス(NEXTY Electronics) とかで引っかかることもある

現代のICなら素直にMouserとかDigiKeyを探そう

 

NECの石を探す時、刻印が"D"から始まっているときは"uP"をその前につけて検索すると出る

 

NXPとTexas Instrumentsは神。公式で大体データシートが出る

反対にQualcommとかBroadcomはお察し

 

根気よく探し続けると謎の個人サイトに謎の断片的情報があってそこから辿れることもあったりなかったりする

ワープロが計算機になる舞台裏

Kernel/VM補完計画

 

はじめに

 この記事はKernel/VM探検隊@東京 No18での発表「ワープロって実は計算機で」を補完するものです。そちらと合わせて読むとより楽しめるかと思います。

 

基板関連

 OASYSの画面を変換するための基板に関してはかなり前から構想があり、Tang Primer 20Kを使用して画面の変換とスーパーディスク(PATA)エミュレータを一緒に載せてスーパーディスクの部分に入れ替えるという形で考えていました。

高画質版回路図

 7月中旬頃になってこの基板はおそらくKernel/VMまでに完成しないと悟ったので、機能縮小版として画面に専念した基板が設計されます。

妥協の産物

 この基板の設計がだいたい完成したのが7/15で、慎重に一日置いて眺めたら案の定ADCへの電源ラインがつながっていなかったので一日置くことの大事さを感じました。(使わなかったのでどうでもいいけど)

 JLCPCBに投げたのは7/16の夜手前くらいで、一番安いオプションで投げて7/22に手元に届きました。

 なお、この期間は第二種電気工事士 技能試験の準備と被っており、ジョジョ5部のキャラみたいな発言をしながら両方やっていました。

FPGA関連

 FPGAは今回Tang Nano 9kを使用しました。これは過去にLX-3000(モノクロ機種)で似たようなことをしたときに使っていたからというのと、前述の全部載せ基板を作ろうとした時の部品選定時に秋月で売っているTang系FPGAボードでDIP型で一番上が9kだったというのが理由です。

 なお早速7/24にADCのクロックが生成できないことを嘆いている作業ログがあります。音まで載せられたら面白かったのになあ。

 しかもGowin EDAからIPコアの生成をする際に何故かよく失敗する(根気よく再生成し続けると通る)という謎の現象にずっと苦しめられました。次Efinixにしようかな。

 

 で、初期の内部構成の構想というのは下のようなものだったんですね。

 


 まあこれだけだと簡単に見えるんですが、入力側はVSYNCを見て適切にフレームバッファの頭に戻る必要があるので、FIFOを挟むとフレームバッファであるPSRAM書き込み部分ではどう同期を取ればいいのかわからなくなるので困るわけです。

 ということで、実際には入力FIFO前でピクセルデータにVSYNCがアクティブかどうかのビットを追加してPSRAM手前まで引き回しています。

 しかしこの構成には問題があり、同期が全然合いません。MN89304の出力するVSYNCは2ピクセル目のDCLKのposedgeと同時に立ち上がるため、それまでピクセルデータの頭出しができず、3クロックデータを溜める部分でグチャグチャになるわけです。 この時点で8月5日になっており焦りが出てきます。

 

 というわけで次の構成がこうなります。

 1ラインデータを貯める君はDCLKごとに貯める君のデータを左8ビットシフトしたものと今のピクセルデータをくっつけた物で更新されていきます。このレジスタをhsyncをクロックとして使用することで安定して1ラインをFIFOにいれることができるようになります。(ちなみにhsyncはDCLKが動いていないときに動くので周りの高周波の変動に影響を受けないという地味な利点があります 多分)

 しかしこの構成にも問題があり、GowinのFIFO IPコアの生成ではビット幅が1~1024bitに制限されています。横640ピクセルなのでRGBで1920bitが入る必要がありますがそのようなFIFOは作れません。

 ということで、入力段を単純に分割して入力FIFOを5個くらい並べたのですが、今度はFIFOがBlock RAMを食いつぶしてしまいそもそも合成不能になって頭を抱えます。

 しかもKernel/VMは着実に近づいており、配線の混雑度が上がって少しコードを弄るだけでFmaxが大きく落ちるような状態の中、皆さんの目を守るための平均化をする余裕がなくなってきました。結果最終的な構成は下図になりました。

 だいぶ簡略化されましたね。したんですがリソース使用量はこうなりました。

 そりゃあちょっと弄ったらすぐ関係ないところのFmax落ちるわという感じですね。フィードバックFIFOを入れる余裕もなさそうです。ちなみに2個しか無いPLLをメモリとTMDS用に使用しているので本当にADCのクロックを生成する方法がありませんでした。よく考えろよな。

 

 斯くしてワープロの画面は正しく変換されるようになりました。8月8日の午前4時に。

 途中で何度かこれ間に合わんから普通にPCでやったほうがいいんじゃないかと思いました。

 

 あと謎現象として、ワープロの信号を入れるとなぜかHDMIの信号がロストするようになったことがありました。最初は自分のコードを疑ったのですがexampleのコードすらろくに出力できなかったのでなにかおかしいと思い、別のTang Nano 9kにすると動いたのでア〜となりました。

 ところで動いた方のTang Nano 9kは昔LX-3000の画面を変換するために"5V信号ラインに直結されていた"ものです。スライドで「なんか5Vになってるけどヨシ!」というのはそういう経緯もあります。逆に壊れたほうなんで壊れたんですか?

 

 あとこれは同期がおかしくてデスノート二期OPの夜神月がいっぱいいるところみたいな見た目になった動画です(?)。

 

スライド映す君関連

 画面変換君ができていないとスライド映す君を作ってもしょうがないのでFPGA側がまともになるまで手を付けていなかったのですが、結果として1日で映す君を作る羽目になりました。

 1枚絵を映すだけなら既にできていたので、問題となるのは画像読み込みの遅さと操作系の実装になるのですが、画面読み込みに関してはかなり右往左往しました。

 というのが、当初発表の通りGIFを読み込めるようにしようと考えていたのですが、問題としてOASYSフレームバッファが64KBごとに細切れにされていると言うところがあります。展開した結果のバイト列を書き込む際64KB境界を跨いだときのことを考えようとして、1分くらい考えかけたところで今やるのは無理だなとなりました。多分デバッグ込みで2~3日は確保すべきものです。

 

 仕方がないので生画像を入れるわけですが、生画像は1枚300KBあるのでフロッピー1枚に3枚までしか画像が入りません。(DOS/Vフォーマットなら4枚で行けたと思う)

 しかも300KBをいちいち読み出すというのはかなり時間のかかるものなので、そのままだとプレゼンに使うにはかなり厳しいレイテンシで画面が切り替わります。(それもそれで面白かったかもしれませんが)

 

 というわけでメモリ上に次のスライドを先に読んでおくという手法でスライド切り替えを高速化することにしました。ですが、300KBというのはDOSのメモリにとってもかなり重いものです。OASYSDOSは空きメモリが400KBくらいしか無いので一か八か試しに32KBの領域を複数mallocしてみました。

 すると案の定途中でmalocに失敗しました。

 

 しかし、OASYSDOSから見えるメモリの外にさらに6MB存在しているはずです。これを扱うためのドライバがEMM.SYS(システムディスク内にある)です。

 EMM.SYSは、DOSから見えるメモリ領域上の一部を使用して「窓」を作ります。この窓を通して本来DOSからアクセスできないメモリ領域を見せることでDOSでもメモリがたくさん使えるというわけです。

 ちなみにOASYS上での実装は、チップセット内のメモリバンク切り替えレジスタを切り替えることで行われています。便利〜

 さらにこのEMM.SYSはシステムコールが他のEMM実装とちゃんと互換なのでそこら辺の資料とかChatGPTを使って呼び出しを書けます 。おかげでサクッと拡張メモリを実装して先読みバッファを作ることができました。

 

 さて、先読み自体の実装は楽ですが一つ考慮しなければならない点として、「先読み対象のファイルが次/前のフロッピー」にあるときというものがあります。

 今回ここの管理をケチって「R」キーを押すととりあえず無条件に先読みを走らせるという仕様にしたのですが、getch()でキー入力を受けているためにうっかり連打するととんでもないことになります。さらにフラグ管理をしていないので、先読みに失敗しても何も言わないしそのまま内部のインデックスを進めてしまいます。結果として状態の整合性が取れなくなり、次のスライドを表示することがままならなくなります。(発表時3枚目のディスクに入れ替え失敗しPCにフォールバックした際に発生した現象です)

 

ちょっと次は全体的にいい感じにして再チャレンジと行きたいですね。

 

当日の発表について

 発表が午後一番だったのですが、昼飯の量の予測に失敗しギリギリお腹に詰め込むことに成功しました。一瞬お腹のFIFOがスタックに変わるかと思いましたが辛うじて会場に戻るまでには落ち着きました。

 機器セットアップは昼休み中にやっておこうかと思ったのですが午後の会場案内とかで発表台が使われるのと昼飯のせいでそのような余裕はなく急いで準備しました。(その結果キャプチャ画面のアス比がおかしくなっているのを直す時間がありませんでした あれはキャプチャ側の設定なので)

 

 発表中に仕込んだネタは多分全部ウケてたので良かったです。レイン◯ーアートとかすぐ通じるかちょっと心配だったんですよね。

 突然画面を切り替えてワープロになるのも大ウケでした。ロード時間が長めなので先に1枚目を表示させた状態で待機させておこうかとも思っていたのですが、多分こっちのほうがウケがいいだろうということで起動時から出しておきました。

 画面とプリンターが取り外されていることに関してそれって外しても動くんだという反応がちょくちょくあったのですが、一応動きます。ただしプリンターを抜いた状態でプリンター関連の動作をさせるとフリーズします。まあしょうがない。どちらもネジ抜いてケーブル抜くだけなのでそんなに面倒ではないです。

 

 ディスク交換は実は手元メモ(配信だとたまに映り込んでいる)にこのタイトルのスライドになったらディスクを交換せい!というのが書いてあったのですが、絶妙に時間が足りなくなっていて急いでいたのですっかり忘れていました。まあPC側でキャプチャした画面を投影してるだけなのでフォールバックは簡単です。

 

あとはキャプチャした画面に乗ってるノイズに関しては多分スライドを画像として出力した際のアンチエイリアスのせいですね。やはり皆さんの目を守っておくべきだったか〜

 

視聴者の皆さんをたくさん怖がらせることができたので満足です。お疲れ様でした。

 

 

 

 

 

次回はな〜んだ?

#TsukuCTF 2025 writeup

しばらくCTFをやっていなかったので久しぶりにやりました

 

始まってから主戦場であるReverseがない事に気づきこれやれるか?となったもののまあまずまずという感じでした

 

osint

一番専門外

Casca

海が綺麗なこの日本の街は、かつてポルトガルのリゾート地との交流がありました。」とのことで、そのままググると熱海っぽいことがわかります。

 ついでにcasca.jpgを検索にかけるとこのサイトによれば該当の場所はジャカランダ遊歩道の付近にあるようです。

 ということでそのあたりでこの特徴的なちょっと小高いところを探すのですが、ちょうどGoogleストリートビュー範囲外です(位置はここ)

 仕方ないので「ジャカランダ 熱海 記念碑」で検索すると記念碑がよく写ってる写真があるサイトが引っかかり、2014年6月6日であることがわかります。

 

Curve

写真を見るとカーブしてそうなエスカレーターです。珍しいことで有名ですね。

検索結果でランドマークタワーの主張が強いので見比べてみると似てそうな雰囲気です。

 

destroyed

ウクライナでのミサイル(ракет)攻撃の被害の様子のようです。一旦日本語に翻訳させるとステプノ(Степненської)という地域のギムナジウム(гімназію 体育館と翻訳されますがギムナジウムのようです)であるということがわかります。

ミサイル ステプノ ギムナジウム で更にウクライナ語で検索していくと、ステプノの中でもレジノ村(Лежино)という場所にあるようです。

レジノ村はそこまで広くないのであとは写真と見比べながらそれっぽい場所を探します。大体このあたりのようです。

 

rider

目立つのは右端の"OTi? Fried Chicken"です。検索するとインドネシアの一部地域に展開しているチェーン店のようです。 数は多くないので検索に引っかかるものを一つ一つ道や横のパンダの看板と見比べて一致するものを探します。"OTI Fried Chicken Salatiga"が該当の店舗です。


schnee

上の"SKI RENTAL GRINDELWALD"の幟が目立ちます。GRINDELWALDはスイスの山のようです。

幟の下部の"Buri Sport"がどうも店の名前のようです。これで検索すると複数店舗ありますが数が少ないので全部見ます。これが該当の店舗です

 

power

ほとんど点字しか見えないので点字を訳すと下の文章っぽいところに”きゅうせきまさかど”とあります。検索すると将門塚が出ます。

 

hidden_wpath

解けてないです が貼られている画像からパスを推測するとリサイズされていないTsukuCTFのロゴ画像が落とせて、binwalkしまくると謎の画像が手に入ります。

よくわかりません まず代表というのは・・・?

ちなみに色を弄ったりとか輝度を弄ったりとかもしましたが特にわかりませんでした。

Crypto

これも専門外です

PQC0

システムの更新をサボっていたのでOpenSSLが3.5.0まで上がってませんでした。(ArchLinuxなので逆に言えば更新するだけで3.5系になります)

基本的にはoutput.txtの内容を適切に切り出して保存してprob.pyを参考にpublic key

の生成、secretのdecapを行い、その結果でAESのdecryptをするだけです。

 

a8tsukuctf

ヴィジュネル暗号を使った暗号です。tsukuctfの部分が変わらないということはその部分の鍵がaaaaaaaaになってしまっているということです。

暗号化部分を読むとヴィジュネル暗号を変形していて、鍵長を超えた部分は暗号文を鍵として使用しています。さらに暗号文の中にはスペースを無視するとちょうどaaaaaaaaになる部分が存在します。

なのでtsukuctfの部分が暗号文のaaaaaaaaと重なることより、元の鍵長は8であることがわかり、復号できます。

すると"????????joy this problem or tsukuctf, or both? the flag is concatenate the seventh word in the first sentence, the third word in the second sentence, and 'fun' with underscores."という文字列が得られます。文字数と復号できた部分から推測するに"please en"から始まるので(嘘っぽい)、後は復号文の指示通りにflagを組み立てます。

 

PQC1

秘密鍵が途切れているのでそのままだと使えません。

一旦PQC0の鍵を見てみましょう。

"-----BEGIN PRIVATE KEY-----"から始まる鍵はPEM形式と呼ばれるもので、データがBase64エンコードされているものです。

なので一旦Base64エンコードをほどきhexにします。

ついでに openssl pkey -inform PEM -in "PQC0の鍵ファイル" -text もします。

これら2つの情報を見比べるとなんとなく鍵データの構造がわかります。

どうやらseed, 復号用のdk, 暗号化用のekの3つのデータがあるようです。

ではPQC1の鍵データはどうなっているかというと、seedの途中で切れてしまっています。

これは大変困ります。seedが欠落していたら鍵の復元もできないように思えます。

 

ところで、PythonでのML-KEM-768の実装で、指定されたseedから鍵を生成するこのコードを見てみましょう。

このコードでは64Byteのseedを32Byteの2つのデータd,zに分割しています。そして実際にekとdkを生成する_keygen_internalに渡しています。この中でdとzの値の使われ方を見ると、dは積極的に使用されているのに対し、zはdkの末尾にくっつけられているだけです。ekに対してzは関与していないので、zが異なっていてもdが同じseedから生成されたdkならば正しく復号できないとおかしいですね。(そうでないとekが魔法を使ってzを知っていることになりますからね)

 

さて、PQC1の鍵データに戻りましょう。先程seed値がちぎれているということでしたが、どうも32Byte以上は存在しているようです。つまりdは確保できるというわけです。

ということで先程のPythonのライブラリを使用して、zの欠落部分は0埋めしたseedからek,dkを生成し、このdkでsecretをdecapすることで、PQC0と同様にAES decryptをしてフラグを手に入れることができます。

 

PQC2

解けてないです。が、PQC1と同様にすると先頭が切れているdkと完全なek(とseedのz)は手に入ります。でもekからdkが生成できると公開鍵暗号方式としてはマズイんですよね。dk欠落部分かseedのdを総当りしていたら時間終わっちゃいますし。d->(ek,dk)も途中でハッシュ関数が挟まっているので一方向ですし。

 

web

やっぱり専門外です

len_len

JavaScriptは変数になんでも代入できてしまうのでパースした結果うっかりオブジェクトが代入されることがあるというわけです。これでlengthプロパティを上書きしてしまうというわけです。

array={"length":-1} をPOSTするとフラグが帰ってきます。

 

flash

フラッシュ暗算みたいなアプリですが途中の数値が消えます。

しかし、出てくる数値はセッションIDから生成されているので、Cookieを控えた上で一度正解を取得し、2回めで結果送信前にCookieを書き戻し、取得しておいた正解を送信することで正解することができます。

 

pwn

行けるかと思ったら一つも解けませんでした。(1つ目が解けないならどうにもならんので それはそう)

easy_kernel


試行錯誤の跡

おわりに

おわりです

専門外しかない割には頑張ったんじゃないでしょうか 一人だし

2024年7月近況

うっかりしていたら「2023年のまとめと2024年の抱負」を書き忘れたまま7月になっていました。ふとブログの存在を思い出したのでなんか書こうと思います。

卒業&進学

2024年3月を以て広島市立大学情報工学情報工学科を卒業しました。

実は卒論のテーマを9月くらいに変えて全部ひっくり返す羽目になりました。

そこからLLVMのバックエンドについて調べて実装した結果本稿提出前日まで実装を弄っていたり提出10分前に仕上げたりととんでもなくギリギリでした。お前はいつもそうだ。

できたことにはできたので何とか卒業はできました。ちなみに卒論で作ったやつを授業で使うかもしれんから出るまでにドキュメント作れって言われました。これ使うのマジ?

 

卒業式当日は、革靴を忘れて家に取りに戻ったら時間がギリギリになりました。

そして会場まで走っていたら階段(Google マップ)でコケました。おかげで手が血まみれの状態で1日を過ごすことになり、出会う人全員に本当に心配されました。傷が塞がるのに一か月かかりましたし深かった方の手の傷跡はまだ消えてません。多分1年経っても消えないんじゃないかな。

 

卒業式が終わったら傷だらけの手で何とか進学先のつくば行きの荷物をまとめました。部屋が片付いたわけではないですが必要そうなものは何とか詰めました。本が多いと引越しって大変ですね・・・

その後残りの必要な荷物を愛車に積み、つくばに向けて出発しました。

入居が入学式前日だったので、1週間くらい前に某放電屋の知人宅へ、道中で拾った学群新入生とともに転がり込みました。到着してまず最初にやったことは肉焼き用のグリルを日本語の怪しいマニュアルを読みながら組み立てることでした。(???)

 

入居後はその日中になんとか生活可能な状態にしました。手動ドライバーでベッド組み立てるのしんどい。

 

そして入学式の日を迎え、4月より筑波大学大学院 理工情報生命学術院 システム情報工学研究群 情報理工学位プログラムに入学しました。名前が長くていまだに覚えられません。ところで入試の出願もギリギリに出してました。

一人暮らし

22年住んだ広島を離れてつくばで一人暮らしを始めたわけですが、お風呂とご飯の時間の自由が利くので気分的には楽です。ただしまともにご飯を食べているかというと・・・

つくば市は元々住んでいたところと似ているところがあるので過ごしていて違和感とかも特になく過ごしています。あまり外には出ていませんが。

 

入居してから、シャワートイレから水が漏れて交換したり、現在進行形で給湯器が死んで交換予定だったりしています。物がちょっと古かったのでしょうがないですね。

 

備え付けの無料インターネット回線は速度に不満はない(むしろ実家より夜間は安定している)のですが、ポート開放ができないので回線を追加で引きました。といっても光配線自体はどうも各戸に元から通っているようで工事はしませんでしたが。

そして頑張ってIX2215のコンフィグをこねてIPv6IPv4両方でポートが開くようにしました。(注:私はネットワーク屋ではありません)

 

 

といった感じでぼちぼちと生きております。

2022年のまとめと2023年の抱負で書いた抱負を大体は達成できましたね。

SekaiCTF 2023 感想

ノリで誘われたのでノリでSekaiCTF(Project SEKAI CTF 2023)に参加してきました。

開始時点ですでに48時間のうち24時間が過ぎていましたが何問かは解きました。

ということで雑に書き残しておきます。

解けたやつ

Azusawa’s Gacha World(Reverse)

電子辞書のやりすぎでリバースエンジニアリングに関してはできそうだったのでとりあえずそこから攻めていきました。

dist.zipをダウンロードするとUnityのゲームが出てきます。とりあえずフォルダーの中を見るとil2cppではなくMonoを使用していることがわかるのでAssembly-CSharp.dllをdnSpyに食わせます。

中身を見ていくとGachaManagerクラスが怪しそうなのでリクエストの中身を確認します。このあと私はcurlでリクエストを投げてみたりしていましたが全く必要ありませんでした。

後でゲーム内に100万回目で確定排出と書いてあることに気づき、BepInEx+UnityExplorerを入れてGameStateクラスのpulls変数を999999に書き換えてからガチャを回すと目的のキャラクターが排出されそのリザルト画面に左下にフラグがあるので終了です。30分弱くらいでした。

Guardians of the Kernel(Reverse)

Linuxカーネルとinitramfsがあります。とりあえずGhidraにカーネルを食わせつつ(無意味でしたが)initramfsの中を漁りました。

initramfsの中の/initを見てみるとflag_checker.koという怪しげなモジュールをロードしているのでそれをGhidraにかけます。

ただ取っ掛かりがないのでとりあえずString Searchで怪しい文字列を探します。すると"Unlocked layer 1."や"Unlocked layer 2."といったものが見つかります。device_ioctl()から参照されていることがわかるのでその関数を見に行きます。

Layer1は単純でbufferの中身が"SEKAI{"であることをそのまま検証しているだけです。

Layer3はnバイト目の変換にnバイト目とn+1バイト目を使用しているので、比較に使っている定数から逆変換するにはヌルのバイトから逆方向に1文字ずつ処理すれば良いです。コードを書いても出せますが12文字くらいなので手で解きました。末尾が"SEKAIPL@YER}"であることがわかります。

Layer2が曲者で結果から逆算しようとしても途中で乗算が入ってしまっているためオーバーフローにより必要な値を一意に定めることができません。しかしバッファがヌルを含めて8文字であり全て数字であることを検証しているため、判定部をそのまま持ってきて0~9999999で総当りするプログラムを書きました。結果"6001337"であることがわかります。

ガチャの分から1時間後くらいに終了しました。

I love this world(Misc)

上2つ以外のリバースエンジニアリング系の問題は唐突にレベルが上がって解きづらかったのでその他のジャンルもぶらぶらしつつ様々な問題に中途半端に手を突っ込んでいました。その時に見つけた問題です。

.svpファイルがあります。ソフトはよくわからない(Synthesizer Vですか? 持ってないのでよくわからないです)ですが中身は平文JSONなので読んでみます。

どうやら歌詞やピッチが書いてあるようですが歌詞に対して明らかに発音データが合っていません。歌詞にもフラグとして成立しそうな文字列がありますが問題の方にフラグに日本語は含まれていないと書いてあるため、気合で発音をアルファベットに変換してみるとフラグを含む文字列が得られます。フラグは書き残してないので忘れました。

カーネルの分から実に3時間半後のことでした。

DEF CON Invitation(Forensics)

.emlファイル(電子メールデータ)があります。文面は普通ですが添付されているカレンダーデータ中にあるサイトに飛ぶと地図が出てきます。地図下のオフラインマップをダウンロードするボタンを押すとpngに拡張子偽造しようとした.vbsファイルが出てきます。

.vbsファイルはかなりいらない情報が多いのでいい感じに読み飛ばします。まず必要なのはOwOwO(ewkjunfw)の結果です。ewkjunfwの中身はある画像データのダウンロードURLをHexにしたものでした。

とりあえずそれをダウンロードしますがファイル名にXORedと書いてあります。PNGのmagicと突き合わせて鍵を見つけようとしましたが16Byte程度では規則性が見つけられませんでした。PNGファイルで基本的に値が一致するのはそれくらいのようなのでこの方法では鍵がわかりません。

しばらく悩んでいたのですが、最後のExecuteのところを見る必要がありました。これはあるURLにJSONをPOSTしています。試しにPOSTしてみるとJSONが返ってきて、msgにお前はadminじゃねえというメッセージが入っています。ということでusernameをadminとして送信してみるとなんか鍵が返ってきます。この冒頭部分がさっきXORして計算した結果と一致するのでこれがXORに使用した鍵とわかります。

あとはファイル全体にその鍵でXORをかけて復元しpngを開くと画像にフラグ"SEKAI{so_i_guess_we'll_get_more_better_next_year-_-}"が書かれています。

I love this worldから1時間くらいあとに終わっていますが実際にはI love this worldに手を付ける前から始めています。

解けなかったやつ

こっからは順不同です。強いて言えば問題の添付ファイルの名前順?

Cosmic Ray(Pwn)

実行ファイルがあり、このプログラムのメモリ空間のうち1bitを反転させることができるプログラムです。

チームの他の人がうんうん唸っていた記憶はありました。最終的に私がたどり着いた結論はデータ領域ではなくプログラム領域、それもmain関数のスタックカナリアの部分を無効化すれば良いことに気づきました。jeとjneはちょうどオペコードが1bit違いなのでそこを反転させるとスタックカナリアが「破壊されていないとき」に文句を言ってabortするようになります。

あとはshellcodeを組むだけなのでしょうが実際に攻撃する環境下でのスタックアドレスがわからず戻りアドレスを確定させられなかったのでSIGSEGVを起こさせるのが精一杯でした・・・。

Infected(Forensics)

.pcapngがあります。WordPressに対して攻撃しているっぽいのはわかるんですがどこで攻撃が完了したのかさっぱりわからず・・・。

Scanner Service(Web)

Docker用のファイル一式があります。中のプログラムはrubyで書かれています。

入力を検証してコマンドラインに渡してそうではあるんですが、rubyの標準の文字列->数値変換関数は数字として認識できる文字までで変換をストップしてしまうので実際には検証しきれていません。

そこがポイントであることまではわかりましたが、その前段にシェルで意味を持つ記号類がエスケープされてしまっているのでどう入力を組めば実際の攻撃が可能なのかはわかりませんでした。他のチームメンバーも同じところで詰まっていた気がします。

Text Sender(Pwn)

実行ファイルがあり、メッセージを作成したり送信できるプログラムということになっています。Ghidraに食わせましたがどこが弱いのかよくわかりませんでした。

Conquest of Camelot(Reverse)

実行ファイルがあり、OCamlで書かれているようです。本体の処理部分の位置は分かりましたが非C系言語のネイティブバイナリにありがちなよくわからない関数呼び出しで追いきれませんでした。

Eval Me(Forensics)

.pcapngファイルがありますが、中の通信の大半がTLS通信で見えません。client randomがエクスポートできるような感じですが中の通信と一切合致しませんでした。

SSH(Misc)

.ovpnファイルがありネットワークに接続できます。nmapしてみると10.0.0.1~10.0.0.4がありますが10.0.0.4の22番くらいしか開いていません。後で気づきましたがwiresharkも見るべきだったかもしれません。どこかから10.0.0.4に対してsshしてるかもしれないので。

Teyvat Travel Guide(Reverse)

急に別ゲー出すじゃん。

実行ファイルがあります。48x48のマスの右下まで到達する必要がありそうですが途中に見えない罠がありそこを通ると死んでしまいます。

罠を置いている処理の箇所は見つかったのですが進むたびに更新されているので追うのがめんどくさいです。全探索すれば終わってしまうからPoWがついてるんでしょうね。

と書いて気づきましたがもしかしてバイナリを弄ってPoW無効化してから全探索すればよかったですか?

A letter from the Human Resource Management(Misc)

.txtファイルがあります。Human Resource Managementは持っとらん。

Network Tools(Pwn)

実行ファイルとそのソースコード(rust)があります。main関数は中がunsafeで囲まれており、また他のチームメンバー曰くバッファに対してデータを読みすぎているところがあるということでしたがshellcodeの組み方がわからないので撤退。

Sahuang Flag Checker(Reverse)

実行ファイルがあります。これが地味に厄介でGhidraだとAVX命令周りでディスアセンブルに失敗するところがあるのでまともに読めません。Cutter(radare2のGUIフロントエンド)を使用したらちゃんと読めるんですが逆にデコンパイラの出力が地味に読みづらく追うのを諦めました。

SekaiCTFCorp(Misc)

ウェブサイトのURLがあります。下の方の企業ロゴ(?)のリンクが切れている以外は特に何もありません。多分。それ以外何もわかりませんでした。

感想

簡単な問題しか解けませんでした。Cosmic Rayとかも簡単ではあるっぽいんですが・・・。

CTF筋が足りてない感じがします。まあCTFはちゃんとやったことは今までないですしリバースエンジニアリング系は単純にGhidra力でゴリ押してるのでさもありなんという感じでしょうか。本来定石を押さえておくべきなんでしょうね。

ただ全くできないというわけでもなさそうなので、もしまたやるときがあればもう少しいい感じにしておきたいですね。