【うさみみハリケーン】パラサイトルーチンを触ってみる

2019年4月4日

アザラシです。パラサイトルーチンの仕組みを知ってはいたのですが
実際に触ってみることはなかったので、今回触りました。
パラサイトルーチンってこういうものだよという
記事を書きます。(勉強したてなので間違っていたらすみません)

毎度口すっぱくいいますが
うさみみハリケーンの関連記事はチートを推奨する記事ではありません。あくまでも、解析して遊びたいなどの知識欲を埋めるためだけに存在する記事です。オンラインゲーム等での不正行為を助長するものでは一切ありません。
記事と同様の事を実行し、電子機器に損害を与える現象及び事例、違法行為による起訴逮捕書類送検等でユーザーに不利益を被った際、アザラシ(このブログの責任者)に責任は一切ありません。及び賠償などはいたしません。

まとめると
真似して不利益被ってもお前の責任

理解できた方のみ見てください

1.パラサイトルーチンってそもそも何?

■ モジュール情報・逆アセンブル(うさみみハリケーンのサイト)

上図のようにA -> Bの処理を乗っ取り
A -> 追加処理 -> B とまさに寄生する手法です。

ちなみにパラサイトルーチンという言い方は
日本のPCゲーム解析分野での言い方で、海外では コードインジェクション
といいます。(うさみみハリケーンのサイトより参考)

コードインジェクションのほうが今は一般的なのかな・・・?
(パラサイトルーチンの方が直感的にわかりやすいけど結局和製英語だろうからだめなのか?)

2.実際にやってみた

実際にやるにあたって使用するソフトは
毎度おなじみぱちゅコン!です

やるにあたって
■【うさみみハリケーン】うさみみハリケーンを使ってみよう【お触り編】
■【うさみみハリケーン】うさみみハリケーンをつかってみよう【逆アセンブル編】
でやった、お金アドレスを見つけること、逆アセンブルをして
増減を管理しているアセンブルコードを見つけるところまでは
やってあります。
(この記事を参考にやる場合は各自そこまでやってある状態にすること)

ここまでわかっている状態であればOKです。
では実際にパラサイトルーチンを作ってみましょう。

うさみみハリケーンの画面より、
デバッグ -> パラサイトルーチン作成
を選択します。
するとこのような画面が出たかと思います。

これがパラサイトルーチン作成用のウィンドウになります。
ここで一番最初に図で説明した、実行したい追加処理を
作成していきますが、そもそも追加処理ってどこに記述されるの?
という疑問があるかと思います。
処理を追加する部分は、未使用メモリ領域です。
そこに新規に処理を追加し、元の処理をそのアドレスのジャンプさせて
実行。実行後元の処理に戻るという手はずです。

なので、パラサイトルーチンのスクショ左上辺りに
パラサイトルーチンの設定 というグループがあるかと思います。
その中のバッファアドレスがあり、その右側に確保というボタンが有るかと思います。そちらを押してください。押すことで、未使用メモリ領域を
使用するために確保できます。(これをまず押さないと何もできない)

確保ボタンを押すと バッファアドレス部分のテキストボックスに
7FE30000
と入りました。
(人によって確保したアドレスが違うかもしれませんが問題ありません)

うさみみハリケーンの元画面では

確保したアドレスが表示されているかと思います。
ではいよいよ追加したい処理を書いていきましょう。

パラサイトルーチン作成ウィンドウの右側に
アセンブルコード記述補助
というグループがあると思います。その中に
テンプレート出力というものがありますね?
セレクトボックスを押してみると、
基本パラサイトルーチン
メモリコピー
メッセージウィンドウ表示
・・・など
が出てくるかと思います。
これらはパラサイトルーチンを作成するにあたって
簡単に記述することができるテンプレートです。
用途に合わせて用意してあるのでとても便利ですね。

今回はそんなに大したことをする予定はないので
基本パラサイトルーチンを選択します。

ウィンドウ左下がこのようになったかと思います。
ここに処理を記述します。

と、その前に一つ忘れていたことがありました。
ウィンドウ左上、パラサイトルーチン設定->ジャンプ元アドレス
ですが、ここは逆アセンブルをした際に見つけた
所持金を減産する処理部分のアドレスを指定してください。
アドレスを指定した上で プレビュー ボタンを押してみましょう。

ウィンドウ右下に、逆アセンブルコードが出てきましたね
今回指定したアドレスは 0x00448852 ですが、
右下のウィンドウのが移動アドレスを見ると、
JMP 7FE30000
となっています。これはバッファアドレスで確保したアドレスです。
実際にこのように書き込みますよというプレビューです。

話は戻り、ウィンドウ左下のコード記述部分に戻ります。
コードを記述する部分は

;追加コード先頭

ココ!

;追加コード終端

です。ココに任意の追加コードを記述してみましょう。
今回はそんなに難しいことはせず、
キャラが購入されたら、購入された分の金額が減るのではなく
増える記述を書きます
正直これだけならパラサイトルーチンの必要は無いですが、お試しという
ことなのでこの記述をやります。
記述する内容は

元コード : SUB [EAX+241C],EDX
で減算していたので、
ADD [EAX+241C],EDX
として追加してやるようにしましょう。

このように追加しました。
追加したら、パラサイトルーチン作成・ジャンプ+ルーチン書き込みグループ内の、ジャンプ+ルーチン書き込みを押します。
これを押すと、元のコード部分に JMP 7F~ が書き込まれるのと、
確保したアドレスに今回追加した処理が書き込まれます。

確保したアドレスも先程は 00 00 … のままでしたが、
書き込まれているのが確認できました。
では実際にぱちゅコンで操作してみましょう。

元の所持金は1760ですが、紅美鈴を1体購入してみます・・・

アレ?かわってない・・・
なんてことだ・・・
と、先程躓いておりました。なぜかというと

先程のパラサイトルーチン作成画面、テキスト選択部分
及び、右画面アセンブルコードをみると、
テキスト選択部分の処理。これはもともとの減算処理ををそのまま使用している状態になってしまっています。
ですので

; をつけることでコメントアウトしてしまいましょう。
つけてから、
パラサイトルーチン作成・ジャンプ+ルーチン書き込みグループ内の
プレビューをおして確認してみると

右側の逆アセンブルコードを再度確認すると、該当のコードが消えていますね?
コードも無事修正したので、ジャンプ+ルーチン書き込み・・・
をそのまま押さず、ボタンの右にある ルーチンのみ に
チェックを入れてから ジャンプ+ルーチン 書き込みを押しましょう。
(ジャンプ部分は特に変更無いので不用意に書き換える必要が無いため)
押したら再度、ぱちゅコンの画面にもどり、再度紅美鈴を一体購入してみます。

お 金 が 増 え ま し た
無事パラサイトルーチンが動作しているということです。

3.終わりに

やろうやろうと思って、特にやっていませんでしたが、
いざやってみるとそんなに難しくはなかったですね
(ツールのおかげですが)
今回はただ、逆アセンブルコードを修正するだけでも
正直事足りるようなことでしたが、このようなこともできるんだよ
という説明になります。

昨今は面倒くさい世の中なのでしつこいようですが
決してオンラインゲームで使用してはいけません。
■ チート行為はやめましょう! 警視庁
■「サドンアタック」のチート使用で書類送検
電子計算機損壊等業務妨害 にあたり、
警察のお世話にになることになります。
他にも、ゲーム会社から損害賠償請求をされることもあります。

自身の勉強の為ならば、オンラインゲームではないもので
個人で楽しむ範疇でやりましょう。
以上!