1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

完走賞用Advent Calendar 2022

Day 20

HSP3のstart.axを編集してみた

Last updated at Posted at 2022-12-19

なぜ編集する必要があるのか

HSP3の実行ファイルのデコンパイルは簡単で、公開されているデコンパイラ
https://github.com/YSRKEN/HSP-Decompiler
に実行ファイルを投げるだけで完了します。
ですが、場合によってはデコンパイルに失敗したり、内容が難読化されていて部分的な処理に手を加えるだけなのにそれが出来ない、という事態に陥ります。
(/*09 20 004E*/とかになる場合はhttps://github.com/onitama/OpenHSP/blob/master/src/hspcmp/hspcmd.cpp を参考にしながらDictionary.csvを編集するだけで動きますが)
それなら必要な部分だけ編集しよう、ということです。
また、axファイルを編集することでデコンパイルの対策にもなります。

axファイルの構造

https://wiki.hsp.moe/OpenHSP%E3%81%AE%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%EF%BC%8FAX%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E6%A7%8B%E9%80%A0.html
ここの読めば分かります。

編集する

if文の条件式を変える

こんなプログラムを用意します

#module
#defcfunc check int p1, int p2
    return p1 - p2
#global

if check(30, 29) == 1{
    mes "Oops!"
}else{
    mes "flag{cool}"
}

これからaxファイルを生成すると
image.png
こんな感じになります。
このままだとOops!が表示されてしまうので条件式を変えます。
=の命令コードは08なのでこれを!である09に変更します。
場所は0xB8ですね。
axファイルを編集したらレガシーツールからPACKFILEを編集してstart.axファイルを入れます。
そしてレガシーツールから実行ファイルを生成すると
image.png
無事にflagが入手できました。
(axファイルが編集できる時点で中の文字列が全部見えるけど)

関数名を変更する(主にデコンパイル対策)

つぎにaxファイルを編集してデコンパイラを使った場合に出力される関数名を変更してみます。
上と同じプログラムを利用します。
元のaxファイルはこんな感じです。
image.png
この"check"という文字列を同じ長さの"color"に変更して、実行ファイルを生成してみます。
このファイルを実行すると
image.png
結果は変わりませんが

	goto *label_1
#defcfunc color int prm_0, int prm_1
	return prm_0 - prm_1
*label_1
	if ( color(30, 29) == 1 ) {
		mes "Oops!"
	}
	else {
		mes "flag{cool}"
	}

デコンパイルすると関数名がcolorになっていることが分かります。
勿論、"color"という名前の色を指定する命令が既にあるので、コンパイルしようとしてもエラーが発生します。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?