プログラム系統備忘録ブログ

記事中のコードは自己責任の下でご自由にどうぞ。

.NET 8からはLibraryImportAttributeで使うSafeHandle型のコンストラクタをpublicにしよう

2023/12/02(土)追記: Breaking change: SafeHandle types must have public constructor - .NET | Microsoft Learnで本破壊的変更が明記されていました!

本記事のタイトルをより厳密に記述すると、「LibraryImportAttributeを使ったメソッドの戻り値やout引数、ref引数に自作のSafeHandle派生型を使っている場合は、.NET 8からはその型の引数なしコンストラクタのアクセス修飾子をpublicにする必要がある」です。以降、実験に使用したコードや、ドキュメントを調べた結果を記述します。

続きを読む

EXP-301受講記 & OSED合格記

OffSec社のEXP-301コースを受講し、OSED試験に合格できました。コースや試験の概要、これから取り組む方へのアドバイス、備忘録等の記事です。

なお、レポート作成方法はPEN-200-2022受講記 & OSCP合格記の時とほぼ同じです。よろしければそちらの記事もご参照ください。

続きを読む

IDAは一部レジスタと同一名のシンボルを無視するので注意

2023/09/20(水) 23:40頃に、PDBファイルやELFファイル中のシンボル名の確認結果を追加しました。その確認中に「x86 PEビルド結果でIDAが正常に関数名を表示できているように見えるものの、そもそも先頭にアンダースコアが付与されている」と気付いたので、本記事タイトル等を修正しました。(以前の記事タイトル: IDAはx86 ELFとx64 PE/ELFで一部レジスタと同一シンボル名を無視するらしい)

先日開催されたSECCON 2023 Qualsのxuyao問題のバイナリをIDAで解析していると、シンボル情報を含むELFであり、明らかにユーザー定義の関数であるにも関わらず、IDAがとある関数を何故かsub_15B9とさもシンボル名が無いかのように表示しました。

終了後にTwitter(この表記を使い続けます)でぼやいていると、Arata氏から、Cソースで定義しているes関数がレジスタ名と衝突しているためIDAはシンボル名として使われなかったのでは、という情報をいただきました。

確認してみると、少なくともx64 PEの場合やx86/x64 ELFの場合は、eax等の一部レジスタ名と同一であるシンボル名(=関数名やグローバル変数名)について、IDAは無視しました。なお、x86 PEの場合はビルド結果のPDB中のシンボル名が先頭にアンダースコアの付いた_eax等のシンボル名になってしまったため、結果は不明です。

続きを読む

SECCON CTF 2023 Quals write-up

SECCON CTF 2023 Qualsへ参加しました。そのwrite-up記事です。

本記事で解説する問題4問のうち3問はptr-yudai氏作問の問題で、氏が作問に使用したファイル等はptr-yudai / writeups-2023 / SECCON_CTF_Quals — Bitbucketで公開されています。

2023/09/20(水) 02:50頃に、ptr-yudai氏作問のリポジトリのリンクと、xuyao問題でのes関数のシンボルがIDAでは認識しなかった話を追加しました。

続きを読む

防衛省サイバーコンテスト 2023 write-up

防衛省サイバーコンテスト 2023(参加者間では「防衛省CTF」等とも呼ばれていました)へ参加しました。そのwrite-up記事です。

本コンテストは3回目の開催で、今回からコンテスト終了後はwrite-up等の公開が許可されています。なお、前回以前の募集ページも同一URLであり、以前の内容は現時点では閲覧不能のようです。参考として前回以前の募集時のInternet Archiveリンクを貼っておきます:

2023/08/08(火) 22:35頃に、「Analysis」問題、「Ladder」問題の解説と、「全体的な感想」を一部追記しました。

2023/08/29(火) 21:40頃に、アンケートメールが届いたことを追記しました。

2023/10/22(日) 06:30頃に、結果一覧ページで、今回分含め過去3回分すべてで上位5名が掲載されるようになっていたことを追記しました。

続きを読む

WinDbgの旧バージョンではfnstenv結果のFIPが0固定になるらしい

WinDbg (classic)の古いバージョンでは、fnstenv命令の取得内容のうちFPU Instruction Pointer Offset (FIP)が常に0になってしまうようです。最新のWinDbgでは正しくFIPを取得できました。本記事では検証用コードや検証結果スクリーンショットを紹介します。

続きを読む