satumaimoの備忘録

個人的なメモ中心

【Interface 2023年7月号】Linux+VSCode+DockerによるTry Kernel開発環境の構築

はじめに 本記事では,「Interface 2023年7月号」にて掲載されているRTOS「Try Kernel」の,Linux+VSCodeを用いた開発環境構築手順を説明します. 実のところ,「Try Kernel」の開発環境はPicoprobeによるRaspberry Pi Picoのデバッグ環境であり,関連する情…

【Python】os._exit()で終了するプログラムではファイルを書き出す時にflushする

はじめに os._exit()を使用するPythonプログラムでは,ファイルへ書き込まれたデータがユーザランドのバッファからOSに移る前にプロセスが終了する場合があります. この場合,プログラムで行ったはずのファイルへの書き込みは,実際のファイルシステムには…

【C言語】静的ライブラリに未定義関数を含める

はじめに ライブラリの中には,未定義の関数が存在する場合があります. 例えばNewlibでは,システムコールに相当する部分 (_sbrk()など) がライブラリ上で定義されていません. 開発者がこのようなライブラリを使用する場合,未定義の関数は開発者自身が実…

【個人的メモ】gcc -Dでインクルードファイルを定義する場合は"<"と">"をエスケープする

GCCの初歩的な話題ですが、2時間近くハマったのでメモします。 -Dオプションとは -D name Predefine name as a macro, with definition 1. -D name=definition The contents of definition are tokenized and processed as if they appeared during translat…

インラインアセンブラで.textセクション内にデータを挿入する

はじめに 書籍「実践バイナリ解析」第6章の終わりに、以下の練習問題がありました。 objdumpを混乱させるプログラムを記述してみよう。 という訳で、本記事ではobjdumpによる解析を妨げるHello Worldプログラムの作成を試みます。 方針 objdumpのような線形…

PythonでQEMUとシリアル通信を行う方法の考察

こちらの記事の続きで、QEMUの起動/停止やQEMUモニタの操作と合わせてQEMUとのシリアル通信もPythonで自動化したいと考えています。 そこで、PythonでQEMUとシリアル通信を行う方法を考えた結果をメモします。 QEMUからのシリアル通信デバイスの種類 公式ド…

x86_64環境上でのARM64組み込みバイナリのクロスコンパイルに関するメモ

Interface 2022年7月号第3部第3章の内容を(今更)実践したので内容をメモします。 なお、誌面ではmacOSを用いて仮想マイコンの実験を行っていますが、本記事ではUbuntu 22.04 LTSを用いて実験します。 ARMツールチェーンのインストール 仮想マイコン上で動…

boofuzz v0.4.1に関する個人的なメモ

boofuzzがターゲットの異常を検出しない場合がある ターゲットが、本来であればバッファオーバーフローを起こすはずのファズデータを受け取っても、boofuzzがターゲットの異常を検出しない場合があった。 session.pyの1768行に time.sleep(0.5)を挿入すると…

【boofuzz v0.4.1】ターゲットの死活監視を伴ったファジング

boofuzz v0.4.1を用いてファジングを行います。 ターゲットには、VulnServer-Linuxを使用します。 スクリプトの作成 サンプルスクリプトや下記参考サイトを参照し、以下のmyscript.pyを作成しました。 #!/usr/bin/env python3 from boofuzz import * import …

boofuzzコード読み(3)

前回に引き続き、boofuzzのコード読みをします。 前回までは静的にソースコードを読んでいましたが、あまり理解が進まなかったので、 今回からはvscodeのデバッグ機能を用いて順に処理を追っていきます。 簡易httpサーバの起動 boofuzzを実際に動かす都合上…

boofuzzコード読み(2)

boofuzzのコード読みを前回の続きから行います。 fuzz()のコード読み _generate_mutations_indefinitely() def _generate_mutations_indefinitely(self, max_depth=None, path=None): """Yield MutationContext with n mutations per message over all messa…

boofuzzコード読み(1)

ファジングの基本的な仕組みを学ぶために、オープンソースであるboofuzzのコード読みをします。 テンプレートを見る どのようなファジングを行うかユーザが定義するためのPythonスクリプトを、こちらのサイトに倣ってテンプレート (fuzzer template) と呼ぶ…