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
等のシンボル名になってしまったため、結果は不明です。
続きを読む