結果だけでなく過程も見てください

日々の奮闘を綴る日記です。

ドラゴンクエストX VISAカードを解約(退会)する方法

使わなくなったことで年会費がかかるようになったため、解約しました。
簡単に手順を備忘録として残しておきます。

手順

1.以下のページにアクセスして、「三井住友カードおよび提携カード」を選びます。
カードの退会(解約)|クレジットカードの三井住友VISAカード
2.ページを進み、VPass(カードのWebサービス)にログインします。VPassに登録していない場合はここで新規登録します。
3.ページを進み、解約するカードと解約理由を1つ選んで退会のボタンを押します。

WindowsとLinux(Ubuntu)のデュアルブートで、デフォルトのブートOSを変更する方法

前提

前提として先にWindowsをインストールし、後からLinux(Ubuntu)をインストールしたものとします。
この場合Linux(Ubuntu)のブートローダーが起動し、そこからLinux(Ubuntu)を起動するかWindowsを起動するかを選択する画面になります。
なお、この記事ではLinuxUbuntuですが、Ubuntu以外のディストリビューションでも同様の方法でいけると思われます。



GRUBのブート画面の例

以下のようにUbuntuが一番上になっており、二番目がWindows 10になっているものとします。
この場合、一定時間経過すると一番上のOSが選択されUbuntuが起動します。今回はこれをWindowsに変更します。

* Ubuntu
  Windows 10



GRUBのデフォルトブートOSを変更する

Linux(Ubuntu)上で端末を開き、以下のコマンド実行してGRUBの設定を変更します。

sudo vi /etc/default/grub

GRUB_DEFAULTという行を探し値を変更します。
本記事の「GRUBのブート画面の例」で、一番上(Ubuntu)が0、次(Windows 10)が1と番号が割り振られていますので今回はここを0から1に変更します。

GRUB_DEFAULT=0
   ↓
GRUB_DEFAULT=1

GRUBの設定を反映させます。

sudo update-grub



設定が反映されているか確認する

再起動してデフォルトで選択されるOSが変わっていることを確認しましょう!(以下は画面イメージ)

  Ubuntu
* Windows 10

サガフロンティア Remastered (サガフロリマスター) トロフィーコンプリートへの道

皆さまサガフロリマスター楽しんでますか?私は最高に楽しんでいます!
この記事ではトロコンする上で、個人的にひっかかったところを紹介したいと思います。
できる範囲で画像はつけていこうと思います…(期待はしないでください)
なお、当方Steam版です。項目は適宜追加していこうかと思います。


ショッピング王

すべての店(術も含む)の全項目のアイテムを1つ以上買う必要があります。
すでに持っているアイテムも、そのお店で買ったことがなかったら購入する必要があるようです
なお、売却の店はスルーして問題ありません
また、術については一通り購入したらその場で(術購入画面で)Yボタンから術を忘れることで、反対属性の術もスムーズに覚えることができます。

自分がコンプリートしたルートを紹介しておきます。
リュート編でNEW GAME+する
→ルミナスへ行きオーンブル内の道具屋で買い物
陰術の素質を得る
→ネルソンで金を買ってクーロンで売りつつ各ショップを回る
→カードorルーンを集めて、秘術or印術の素質を得る
→ドゥヴァンの神社に行き、麒麟の空間で麒麟を仲間にせず術を購入
→ヴァジュイールと会話して時の器のイベントを進める
→ファシナトゥールで時の器を購入
→時の君を仲間にせず術を購入
→アセルス編でNEW GAME+して、ゴサルスの店でLPで買えるものをすべて購入
→T260G編でNEW GAME+してボロの道具屋をすべて買う

リージョン お店 備考
ルミナスから行けるオーンブル 道具屋
お土産屋
心術屋
麒麟の空間 空術屋 麒麟を仲間にしなかったときだけ購入可。仲間にしない→もう一度話しかけて術を買う
クーロン 金ショップ
クーロン 薬屋
クーロン 防具屋
クーロン 防具屋
クーロン 防具屋
クーロン 武器屋(剣) マンホールの中にあります
クーロン 武器屋(銃) マンホールの中にあります
クーロン 武器屋(重火器) 裏通りにあるロボット(pzkwV)が店主のお店
時間妖魔のリージョン 時術屋 時の君を仲間にしなかったときだけ購入可。術を教わりに、を選んで買う
シュライク 中島製作所内のショップ
ドゥヴァン 秘術屋
ドゥヴァン 印術屋
ネルソン 金ショップ 酒場の右の方にいる男から買えます
ネルソン 武器防具屋 右のほうの倉庫の中にあります
ファシナトゥー ゴサルスの店 LPを消費して幻魔等を買う店。アセルス編でNEW GAME+を使って買うと楽
ボロ 道具屋 T260G編でNEW GAME+を使ってクレジットを持ち込んで買う
マジックキングダム 道具屋
マジックキングダム 魔術屋
マンハッタン 宝石ショップ 策士の指輪が購入しなくても良い模様
ルミナス 陽術屋
ルミナス 陰術


フロンティア/カリスマ

主人公8人を一周ずつしただけでは取得できません。
ヒューズ編を何周も回してレッドやブルーも仲間に加える必要があります。


ボディマニア

ボディ1~7については、中島製作所の社長に話しかけることでいつでも変更できます。
ボディ8(オメガボディ)については、HQ内部にある以下の赤丸のところにボディが落ちていますので、拾うことで変身できるようになります。
f:id:taiyakisun:20210430093249p:plain


バトルマニア

ヒューズ以外の主人公をクリアした後にいける開発2部というマップに出現する仮面の魔人を倒すことで取得できます。

以下の赤丸のところに入って
f:id:taiyakisun:20210430093717p:plain

以下赤丸の人と話すことで戦うことができます。
f:id:taiyakisun:20210430093741p:plain


古の魔物

イクストルを撃破すると取得できます。
シンロウの左上の遺跡に入り、内部に入ったら上へ向かいます。
下記画像のマップでコウモリのシンボルと戦いまくっていると13回以内にイクストルが現れるようです。
f:id:taiyakisun:20210430100003p:plain


ヴァジュイールご満悦

自分は以下の構成でクリアできました。ただ、間にヴァジュイールに攻撃が入ることがあったので素早さ(QUI)の調整は必要かもしれません。
また、いまさら銃育てるのめんどい!と思うかもしれませんが3倍速で1時間程度戦うだけですべてのスキルを揃えることができました

キャラクター スキル
クーン ブレードor尾撃
エミリア 早撃ち
十字砲火
跳弾
メイレン 早撃ち
十字砲火
跳弾
リュート 早撃ち
十字砲火
跳弾
ゲン 早撃ち
十字砲火
跳弾

1ターン目

クーンが「ブレード or 尾撃」を使い、他のキャラクターは全員「十字砲火」を使います。
「十字十字十字十字ブレード」が発動します。

2ターン目

クーンが「ブレード or 尾撃」を使い、他のキャラクターは全員「跳弾」を使います。
「跳弾跳弾跳弾跳弾ブレード」が発動します。


不可知生命体

マリーチに変身することで取得できます。

必要スキル 入手方法
死の凝視 デュラハン(最高ランクのガイコツ)から入手する。生命科学研究所がよい。
魅了凝視 デュラハン(最高ランクのガイコツ)から入手する。生命科学研究所がよい。
石化凝視 最高ランクで生命科学研究所入ってすぐ上にいる植物シンボルで出る化石樹のお供のバジリスクから入手するf:id:taiyakisun:20210430102354p:plain
マヒ凝視 ランク5のアンノウンから取得するf:id:taiyakisun:20210430101802p:plain


雪山のガーディアン

必要スキル 入手方法
そのへんの適当な低ランクのザコから入手できる
尾撃
石化ガス 生命科学研究所入ってすぐ上にいる植物シンボルで出る化石樹から入手できるf:id:taiyakisun:20210430103124p:plain


不死族の長

必要スキル 入手方法
マヒ凝視 ランク5のアンノウンから取得する(画像は「不可知生命体」参照)
ブレードor〇〇スマッシュ ブレードについては生命科学研究所(最高ランク)に出るゼフォンから入手できる
死の属性 デュラハン以外の不死系から入手できるので、生命科学研究所以外がよい。ナイトスケルトンが出る済王の古墳がおすすめ。



画像について

このページでは、株式会社スクウェア・エニックスを代表とする共同著作者が権利を所有する画像を利用しております。

Photoshop/CLIP STUDIO PAINT/SAIなどの、描画モード/合成モード/レイヤーモードについてお勉強する

皆さま描画モードは内部の計算を理解して使っていますか?自分はなんとなくの感覚で使ってしまっています。
ここでは勉強も兼ねてRGB(赤,緑,青)やHSV(色,彩度,明度)が描画モードでどのように影響し合うのかをまとめたいと思います。

なお一度に全部お勉強するのは大変なので、適宜追加していく形にしようかと思います。

筆者の環境

CLIP STUDIO PAINT PRO (Version 1.10.6)

用語的なもの

用語 説明
RGB R(赤),G(緑),B(青)の値のセット。それぞれ0~255で表現され、0が黒、255が白
HSV H(色),S(彩度),V(明度)の値のセット。それぞれ0~100で表現される
基本色 ベースとなる色。下位レイヤーの色
合成色 基本色の上から塗る色。上位レイヤーに塗る色
結果色 基本色に合成色を塗った結果となる色

比較(暗)

HSV(色,彩度,明度)の明度を比較して暗い方(明度が低い方)が描画されます。
明度の値が同じ場合はレイヤーの順番がより上のものが描画されます。
f:id:taiyakisun:20210413091734j:plain

比較(明)

HSV(色,彩度,明度)の明度を比較して明るい方(明度が高い方)が描画されます。
単純に比較(暗)の逆なので、画像例は割愛させていただきます。

乗算

色を暗くするときに使います。
RGB(赤,緑,青)のそれぞれの値を255で割った値、つまり0.0~1.0の値を掛けた値が結果となります。

結果色 = 基本色 * (合成色 / 255)

例えばRGB=(127,127,127)の場合は、RGB(127/255,127/255,127/255)≒(0.5,0.5,0.5)なので、結果のRGB値は約半分の値になります。

以下の例ではRGB=(127,127,127)にそれぞれRGB=(230,230,230), RGB=(127,127,127), RGB=(25,25,25)の色を描画しています。

RGB=(230,230,230)のときを計算してみましょう。

RGB=(127 * (230/255), 127 * (230/255), 127 * (230/255))=(114.5490, 114.5490, 114.5490)

となり結果の(115,115,115)とは一致しませんでしたが、近い値になることはわかりました。

RGB=(127,127,127), RGB=(25,25,25)の場合も同様に計算してみます。
以下RGB値は3つとも同じなので1つだけ計算するものとします。

RGB(127 * (127/255),...)≒(63.2509)
RGB(127 * ( 25/255),...)≒(12.4509)

小数点第一位を四捨五入した結果になると思ったのですが、必ずしもそうはならないようですね…。
このあたりはペイントソフトがどのような処理を行っているかに依存するので詳細にはわからないですが、数値として1の差なので、気にしないことにしましょう。(気になるけど…)
f:id:taiyakisun:20210413094846j:plain

スクリーン

こちらは乗算の逆で色を明るくするときに使います。

結果色 = 基本色 + (基本色 * (1 - 合成色/255))

RGBそれぞれの値に「元のRGBの値 * (1 - (描画する色のRGB/255))」を加算します。
なんだかややこしそうに見えますので、実際に計算してみましょう。
以下RGB値は3つとも同じなので1つだけ計算するものとします。

元のRGB値(127) * (1 - (描画する色のRGB(230)/255) ) = 元のRGB値(127) * (1 - 0.901...) ≒ 12.4
元のRGB値(127) * (1 - (描画する色のRGB(127)/255) ) = 元のRGB値(127) * (1 - 0.498..) ≒ 63.7
元のRGB値(127) * (1 - (描画する色のRGB(25)/255) ) = 元のRGB値(127) * (1 - 0.098...) ≒ 114.5

上記の値を元のRGB=(127,127,127)に加算したものが結果となります。
今回は綺麗に四捨五入して加算した結果とピッタリになっていますね。
f:id:taiyakisun:20210413100442j:plain

覆い焼き(リニア) or 加算

色を明るくするときに使います。計算式はシンプルで単純な加算となります。

結果色 = 基本色 + 合成色

基本色64に対して230,128,25を合成色として描画しています。
1の誤差があるケースがありますが、基本的に加算した値そのままが結果となっていることがわかります。
f:id:taiyakisun:20210413112809j:plain

減算

色を暗くするときに使います。加算の逆でこちらは合成色を減算します。

結果色 = 基本色 - 合成色

単純に加算の逆なので、画像例は割愛させていただきます。

オーバーレイ

明るい箇所はより明るく、暗い箇所はより暗くするときに使います。
色の操作ではなく、コントラストを操作する描画モードとなるそうです。

RGBの閾値は128で、この閾値以上か未満かで計算式が異なります。
乗算とスクリーンの組み合わせと思ったのですが、どうやら正確には違うようですね…。

基本色<128の場合:
   結果色 = 基本色 * (合成色 / 255) * 2

基本色≧128の場合:
   結果色 = 2 * (基本色 + (合成色 - 基本色 * 合成色 / 255)) - 255

画像例では、基本色64に対してそれぞれ230,64,25で描画しています。上述した式に当てはめると

64 * (230 /255) * 2 ≒ 115.4
64 * (64   /255) * 2 ≒ 32.12
64 * (25   /255) * 2 ≒ 12.54

また基本色192に対してもそれぞれ230,192,25で描画しています。

2 * (192 + (230 - 192 * 230 / 255)) - 255 ≒ 242.64
2 * (192 + (192- 192 * 192/ 255)) - 255 ≒ 223.87
2 * (192 + (25 - 192 * 25 / 255)) - 255 ≒ 141.35

数値としては実験結果と一致していますが、これは理解するのが難しそうです…感覚を養うのがいいかもしれません…。
f:id:taiyakisun:20210413111126j:plain

Cheat Engineの使い方 チュートリアルStep9の攻略 共有コード (ゲーム改造/チート)

Cheat EngineのチュートリアルStep9の記事です。チュートリアルのラスボスとなります。

チュートリアルの始め方やプロセスのアタッチの仕方などもこちらに書かれていますので、ご一読いただけると幸いです。
Cheat Engineの使い方 チュートリアル Step2の攻略 - 結果だけでなく過程も見てください

Step9の問題文

要約すると以下の通りです。

  • プレイヤー2人チームと敵2人チームがある
  • 「Restart game and autoplay」ボタンを押すとゲームが開始されるが、そのままだとプレイヤーチーム側が必ず負ける
  • プレイヤーのHealthを固定する方法以外で、「Restart game and autoplay」ボタンを押した状態でプレイヤーチームを勝たせてください (課題)
  • 「Restart game」ボタンを押すと全員のHealthがリセットされます
  • 「Attack」ボタンを押すとHealthが減ります
  • HealthはFloatです

f:id:taiyakisun:20210404224410p:plain

Healthを減らすコードは共通

Healthを減らすコードを探すと、プレイヤーも敵もHealthを減らすコードは共通です。そのため、安易にHealthを減らさないようにコードを変更する方法を取ると、敵のHealthも減らなくなってしまいます。ここではプレイヤー側のチームであるかどうかを確認する必要があります。

Healthを減らすコードを探す

Step2~8の方法と同様に、Player1の「Attack」でHealthを減らしつつ、①Value Typeを「Float」にしてから②First ScanおよびNext Scanで該当コードの箇所を絞り込みます。③コードが絞れたら④の「Find out what writes to this address」を選択します。
f:id:taiyakisun:20210404225512p:plain

問題文ダイアログの「Attack」ボタンを押すと、それを検知して「The following opcodes write to 14CCC1B4」ウィンドウにコードが表示されますので「Show disassembler」ボタンを押して、Memory Viewerを表示させます。
f:id:taiyakisun:20210404230450p:plain

mov [ebx+04],eaxが新たなHealth値を代入している共通コードであることがわかります。ここの処理を変更したいのですが、先にプレイヤーチームであることを認識する方法を探す必要があります。

プレイヤーチームであることを認識するデータを探す

該当コードを右クリックして「Find out what addresses this instruction accesses」を選択します。これはこのコードを実行するたびにそれを検知して記録する「Accessed addresses by 4288D9」というウィンドウを表示するものです。
f:id:taiyakisun:20210404231141p:plain

ウィンドウが開いたら、問題文ウィンドウに戻りAttackボタンを順番に一回ずつ押してください。
f:id:taiyakisun:20210404231522p:plain

「Accessed addresses by 4288D9」ウィンドウに検知したアドレスや回数が記録されているので、4つとも選択した上で右クリック→Open dissect data with selected addressesを選びます。
f:id:taiyakisun:20210404231708p:plain

いくつかダイアログが表示されます。そのままOKやYesを押して進んでください。
f:id:taiyakisun:20210404232139p:plain
f:id:taiyakisun:20210404232150p:plain
f:id:taiyakisun:20210404232202p:plain
f:id:taiyakisun:20210404232211p:plain

「Structure dissect」ウィンドウにそれぞれアクセス元のアドレスを解析し、それぞれの構造を解析した結果が表示されます。
まず目につくのは0x15の名前でしょう。Dave, Eric, HAL, KITTの名前は問題文ダイアログにあるそれぞれのプレイヤーや敵の名前と一致します。そのため最初の2つがプレイヤーチーム、後半2つが敵チームと推測できます。
名前で判断してもいいのですが他により簡単にチームを判断できるデータを探すと0x10にプレイヤーチームは「1」、敵チームは「2」と推測できこちらで判断した方が簡単そうということがわかりました。
f:id:taiyakisun:20210404232656p:plain

Memory Viewerに戻って、該当コードを書き換えます。
該当コードを選択してTools→Auto Assembleを選択しましょう。
f:id:taiyakisun:20210404233336p:plain

Template→AOB Injectionを選びます。この後いくつかダイアログが表示されたらそのままOKボタンを押します。
f:id:taiyakisun:20210404233526p:plain

コードを改造します。変更するのは以下の通りです。

  • code:部分。プレイヤーか敵かを判断して敵ならばkill:にジャンプさせるような処理に変更します。またHealthを減らすコードも削除します。
  • kill:の追加。kill:はプレイヤーのHealthを0にして一撃で殺すコードです。そのためmov[ebx+04],0としてHealthに0を入れます。
  • label(kill)の追加。ラベルを新たに記述するのでこのコードが必要になります。

コードが書けたらExecuteボタンを押下します。
f:id:taiyakisun:20210404234637p:plain

問題文ダイアログに戻り「Restart game and autoplay」ボタンを押下すると、プレイヤー側のHealthは減らず、敵側は即座に0になり、次に進めるようになります。おつかれさまでした!
f:id:taiyakisun:20210404234930p:plain

Cheat Engineの使い方 チュートリアルStep8の攻略 ポインターのポインター (ゲーム改造/チート)

Cheat EngineのチュートリアルStep8の記事です。みんな大好きポインターポインターポインター…です…。

チュートリアルの始め方やプロセスのアタッチの仕方などもこちらに書かれていますので、ご一読いただけると幸いです。
Cheat Engineの使い方 チュートリアル Step2の攻略 - 結果だけでなく過程も見てください

Step8の問題文

要約すると以下の通りです。

f:id:taiyakisun:20210331211840p:plain

レベル1ポインターの検索

初期値221でFirst Scan→問題文ダイアログの「Change value」→Next Scanでアドレスを絞り込みます。

絞り込んだアドレス①をダブルクリックして②に追加します。②を右クリックして③の「Find out what accesses this address」をクリックします。「The following opcodes accessed 0192FED0」というウィンドウが新規に表示されます。
f:id:taiyakisun:20210331214253p:plain

問題文ダイアログの「Change value」を押して値を変更すると、変更を検知した「The following opcodes accessed 0192FED0」ウィンドウにコード行が表示されます。ここでのベースポインタはesiレジスタでアドレスは0192FEB8、オフセットは18であることをメモなどに書き留めて置いてください。
f:id:taiyakisun:20210331215835p:plain

ポインターを辿るため、①ベースポインターが存在するアドレスを探します。
Cheat Engineメインウィンドウで「New Scan」を一度押下した後、以下のようにベースポインターのアドレスで検索をかけます。

これでベースポインターのアドレスを保持しているポインターは0192FE18であることがわかりました。②をダブルクリックして③に行を追加します。続いていま見つけたポインターを使って変数値を表示するため④を押下します。
f:id:taiyakisun:20210331222748p:plain

①でPointerにチェックを入れ、②にアドレス0192FE18、③にオフセットである18を入力します。青枠にある値が、問題文ダイアログに表示されている値と一致している、つまり正しい位置を指していることを確認してください。OKボタンを押してレコードを追加します。
f:id:taiyakisun:20210331223043p:plain

レベル2ポインターの検索

Cheat Engineに戻ったらわかりやすいようにDescriptionを変更しておきましょう。①1行目は体力(Health)、2行目は作業用なのでそのままで、②3行目は辿った1つ目のポインターとして「Pointer level 1」としておきます。さらにポインターを辿るため、②を右クリックして「Find out what access this address」を押下します。
f:id:taiyakisun:20210331223851p:plain

以下のダイアログが表示されたら「Find out what accesses this pointer」を選択します。
新たに「The following opcodes accessed 0192FE18」ウィンドウが表示されます。
f:id:taiyakisun:20210331224030p:plain

問題文ダイアログの「Change value」で値を変更すると、それを検知して「The following opcodes accessed 0192FE18」ウィンドウにコードが表示されます。

ベースポインタはesiレジスタでアドレスは0192FE18、オフセットは0であることをメモなどに書き留めておいてください。
f:id:taiyakisun:20210331224533p:plain

Cheat Engineのメインウィンドウに戻り、①ベースポインタのアドレスで検索します。②結果が2つ出ていますが下を選びます(※)。これでベースポインタのアドレスを保持しているポインターは01914F34であることがわかりましたので、③に追加して④を押下します。
(※)ここ正直どちらを選べばいいか判断ができなかったのですが、両方試してみて正常に動作する方を選んでいます
f:id:taiyakisun:20210331231225p:plain

①のPointerにチェックを入れ、②のAdd Offsetでオフセットを増やします。これは今求めているものがポインターポインター(レベル2ポインター)のため、それぞれのオフセットが存在するためです。③にはアドレス01914F34、④にはオフセット0、⑤はオフセット18を入れます。青枠の値が、問題文に表示されている値を一致していることも確認してください。OKボタンを押してレコードを追加します。
f:id:taiyakisun:20210331231505p:plain

レベル3ポインターの検索

ここからは繰り返しです。
Cheat Engineに戻ったらわかりやすいようにDescriptionを変更しておきましょう。その後レベル2ポインターのレコードを右クリックして「Find out what accesses this address」を選択します。
f:id:taiyakisun:20210331231751p:plain

以下のダイアログが表示されたら「Find out what accesses this pointer」を選択します。
新たに「The following opcodes accessed 01914F34」ウィンドウが表示されます。
f:id:taiyakisun:20210331224030p:plain

問題文ダイアログの「Change value」で値を変更すると、それに反応して「The following opcodes accessed 01914F34」ウィンドウにコードが表示されます。

ベースポインタはesiレジスタでアドレスは01914F20、オフセットは14であることをメモなどに書き留めておいてください。
f:id:taiyakisun:20210331232034p:plain

Cheat Engineのメインウィンドウに戻り、①ベースポインタのアドレスで検索します。結果を選びます(②)。これでベースポインタのアドレスを保持しているポインターは018FA6C4であることがわかりましたので、③に追加して④を押下します。
f:id:taiyakisun:20210331232434p:plain

①のPointerにチェックを入れ、②のAdd Offsetでオフセットを増やします。これは今求めているものがポインターポインターポインター(レベル3ポインター)のため、それぞれのオフセットが存在するためです。③にはアドレス018FA6C4、④オフセットには14, 0, 18を入れます。青枠の値が、問題文に表示されている値を一致していることも確認してください。OKボタンを押してレコードを追加します。
f:id:taiyakisun:20210331232916p:plain

レベル4ポインターの検索

Cheat Engineに戻ったらわかりやすいようにDescriptionを変更しておきましょう。その後レベル3ポインターのレコードを右クリックして「Find out what accesses this address」を選択します。
f:id:taiyakisun:20210331233316p:plain

以下のダイアログが表示されたら「Find out what accesses this pointer」を選択します。
新たに「The following opcodes accessed 018FA6C4」ウィンドウが表示されます。
f:id:taiyakisun:20210331224030p:plain

問題文ダイアログの「Change value」で値を変更すると、それに反応して「The following opcodes accessed 018FA6C4」ウィンドウにコードが表示されます。

ベースポインタはesiレジスタでアドレスは018FA6B8、オフセットはCであることをメモなどに書き留めておいてください。

Cheat Engineのメインウィンドウに戻り、ベースポインタのアドレスで①のように検索します。結果を選びます(②)。これでベースポインタのアドレスを保持しているポインターは"Tutorial-i386.exe"+2426E0であることがわかりましたので、③に追加して④を押下します。
f:id:taiyakisun:20210331233939p:plain

①のPointerにチェックを入れ、②のAdd Offsetでオフセットを増やします。これは今求めているものがポインターポインターポインターポインター(レベル4ポインター)のため、それぞれのオフセットが存在するためです。③にはアドレス"Tutorial-i386.exe"+2426E0、④オフセットにはC, 14, 0, 18を入れます。青枠の値が、問題文に表示されている値を一致していることも確認してください。OKボタンを押してレコードを追加します。
f:id:taiyakisun:20210331234516p:plain

値の変更

緑文字の静的アドレスまで辿れました。静的アドレスはアプリケーションを再起動しても変化しないアドレスのため、ポインタ辿りはここで終了です。

いよいよ課題のため問題文ダイアログの①「Change pointer」を押してから3秒以内にレベル4ポインタの②Value値を5000に変更します。ここかなりタイミングがシビアですが、がんばってください。これなんで5秒や10秒にしなかったんでしょうね…。

うまく値が変更できると③の通りNextが非活性になり次の課題に進めるようになります。お疲れ様でした。
f:id:taiyakisun:20210331235217p:plain

Cheat Engineの使い方 チュートリアルStep7の攻略 コードインジェクション (ゲーム改造/チート)

Cheat EngineのチュートリアルStep7の記事です。

チュートリアルの始め方やプロセスのアタッチの仕方などもこちらに書かれていますので、ご一読いただけると幸いです。
Cheat Engineの使い方 チュートリアル Step2の攻略 - 結果だけでなく過程も見てください

Step7の問題文

要約すると以下の通りです。

  • コードインジェクション機能とはコードの一部を書き換えて処理の流れを変える機能です
  • 初期値の体力(Health)は100
  • Hit meボタンを押すと体力(Health)が1減る
  • Hit meボタンを押したときに体力(Health)が2増えるようにしてください (課題)
  • 体力を減らすコードを見つけたら、自動アセンブラウィンドウとコードインジェクション機能を使ってください

f:id:taiyakisun:20210331183236p:plain

該当箇所の絞り込み

Step2~6でやってきた方法と同様に、初期値100でFirst Scan→問題文ダイアログの「Hit me」→Next Scanでアドレスを絞り込みます。

絞り込んだアドレス①をダブルクリックします。②に行が追加されるので②を右クリックし、③の「Find out what writes to this address」を選択します。
f:id:taiyakisun:20210331185144p:plain

以下のダイアログが出たら「Yes」を押下します。
f:id:taiyakisun:20210331104706p:plain

新しく「The following opcodes write to XXXXXXXX」というウィンドウが開くので、問題文のダイアログに戻り「Hit me」ボタンを押します。

すると、変数の変更を検知して「The following opcodes write to XXXXXXXX」ウィンドウに該当箇所のコードが表示されます。コードを選択して「Show disassembler」ボタンを押下します。
f:id:taiyakisun:20210331185646p:plain

コードの該当箇所がハイライトされたMemory Viewerが開きます。
f:id:taiyakisun:20210331185940p:plain

今回は該当箇所がすで選択された(ハイライトされた)状態になっているので、そのままメニューバーのTools→Auto Assembleを選択します。新たにAuto assembleウィンドウが開きます。
f:id:taiyakisun:20210331190258p:plain

メニューバーからTemplate→Code injectionを選択します。
f:id:taiyakisun:20210331190655p:plain

今回はコードを選択してここまで来ているので該当アドレスが最初から格納されています。
なのでそのままOKボタンを押してください。
f:id:taiyakisun:20210331190810p:plain

以下のように該当箇所のコードが挿入されます。
f:id:taiyakisun:20210331190925p:plain

コードを以下のように変更します。

originalcode:にはもともとの処理が以下のように書かれています(アドレスは各人によって異なります)。

sub dword ptr [ebx+000004A4],01

これはebxのアドレスからオフセット0x4A4ずれた場所から4byte(dword)分の領域から1を減算するという意味になります。
今回新しい処理に正解の処理を記述するため、こちらの処理はコメントアウトしてしまいます。コメントアウトしないと-1の減算も処理されてしまい都合が悪いためです。

newmem:には今回新たに実施するコードを記述します。
今回Hit meボタンを押したときに体力(Health)が+2されてほしいため、newmem:に以下のコードを追加します。意味はebxのアドレスからオフセット0x4A4ずれた場所から4byte(dword)分の領域に2を加算するという意味になります。

add dword ptr [ebx+000004A4],02

コードが書けたらExecuteコマンドを実行してください。
確認するダイアログが表示されたら「Yes」を押下してください。
その後コードインジェクションが成功した旨のダイアログが表示されるので「Yes」を押下してください。
f:id:taiyakisun:20210331201325p:plain

メモリビューワーに戻ると、赤枠のように先ほど追加した処理が追加されています。
f:id:taiyakisun:20210331202314p:plain

最後に問題文のダイアログに戻り、「Hit me」コマンドを押下してください。
体力(Health)が2加算され、Nextが活性化されて次へ進めるようになります。お疲れ様でした。
f:id:taiyakisun:20210331202501p:plain

プライバシーポリシー お問い合わせ