battlefield2(BF2)でチートをやってみた【Cheat Engine】

最初に、ここに書いてある内容で不利益を被っても私には一切責任がないものとします

窓化

bf2のアイコンを右クリックして、リンク先の fullscreen 1を fullscreen 0に書き換えるだけです。

チート手順

使用CEはMoon Light Engineです。

弾が減らないチート

現在の弾の数検索→弾3発くらい適当に撃つ→最初の値からー3されているのを検索、みたいな感じで絞っていくと3つくらいに絞れる。

1個ずつ値を変更していってやると1つだけ当たりが。

喜んでいるのも束の間、死ぬと弾の数が格納されているアドレスが毎回変わってしまう・・・。

死ぬ度に毎回毎回、値検索して弾数無限にするなんてアホらしいです。というか戦っている時にそんなことしてる暇ないですしね。

このアドレスに弾の残りが格納されているわけですが、撃つという処理をする度にココから、撃った数分引いて行ってやらないと無限のまんまです。

最初から無限回撃てる銃になってしまいます。

つまり、どこかに「撃った数分引いていってやる処理」があるはずです。このアドレスにブレークポイント的な、このアドレスを書き換えようとする命令を探しだすアレをします。

何もしてない状態でこのアドレスにアクセスしている命令

撃った後の状態

撃ったあと更に弾補給したあとの状態

多すぎますね。書き込みしている命令のみに絞ります。撃った直後に、このアドレスに書き込んだ命令。

1個だけヒットしました。

sub [eax],ecx
sub命令は、左のオペランドから右のオペランドの数値を減算するって意味です。

ちなみに
mov eax,[ecx]
は、eaxレジスタにecxレジスタの中に入っているアドレスに入っている値を代入します。

  • eaxは演算に使われやすい、
  • ecxはアドレス代入に使われやすい

とかそれぞれのレジスタは大体どういう用途か決まってます。

大体は[ecx+オフセットの値]とかで参照されてます。そうなっている理由もちゃんと理にかなっている理由です。ぐぐったら出てきます。レジスタって何?って人は早々に戻るボタンを押したほうが賢明です。
cmpは比較です。これで2つの値が同じならEフラグレジスタのZFっていうフラグが1にセットされます。

それによってjz、jnz命令(ジャンプの分枝処理ver、無条件でジャンプはjmp命令)の結果が変わります。
こんな感じでアセンブラは結構紐解いてみれば簡単です。自分で関数作ってインジェクションとかもできます。そのインジェクションするためのツールも自作とかします。

閑話休題。
見てみると、ecxに入っている値が「1」、eaxに入っている値が弾の数が格納されているアドレス( [ ]は、そのアドレスの中に入っている中身を示す って意味

つまり
撃つという行為をする旅にコレが実行されるわけで・・・。これを無効にしてやれば弾は減らない。この命令の変わりに、「nop」命令で埋める。
nop・・・何もしない命令
nopは2バイト分しかないので、2個nopを入れる。

ここで nop入力

撃ち放題になりました。

どうやら、この処理はすべての武器に共通みたいで、どの武器も弾薬が減らなくなりました。(戦車とかも

敵・味方まで撃ち放題に・・・

体力

体力も同じようにやると無限になります。

誰も死ななくなりました。めでたしめでたし

左上に、殺した人とか表示されてるけど実際誰も死んでません。
誰も死ななくなったっていうか、ダメージの概念みたいなのが無くなって乗り物も何もかもダメージ受けなくなりました。
ただし、車で轢くと死にました。

死ぬ条件が、
1、体力バーが0になったとき。
2、動いてる車に接触したとき
3、一定以上の高さから落ちたとき

とか色々あるみたい。

それと、弾のやつはこういう風に追加して、命令を書き換えることもできます。
補給したあと、さらに255発加えるっていう書き換え。アプローチの仕方は星の数ほどあります。

ーーーーーーー

005B9466 sub [eax],ecx  撃った後 -1させるアドレスと命令
005B95C6 mov [ecx],eax 弾補給したときのアドレスと命令
0060a293 mov [edi+10],edx  ダメージ受けたときのアドレスと命令
これは多分不変なので毎回同じアドレス。

実用性全然ないですが、弾無限のチートは結構面白いです。
つかまず、こんな面倒くさいことせずにネットで落ちてるツール使えばおk。

弾のアドレスを自動で探すプロラグムを作れば解決です。オフセット的なのは全部同じなので、似たようなコードを自動で探してアドレスを特定してくれるようなもの。SpoilerALなんていうフリーソフトを使えば実現できそう。蔵の中にある、武器のデータを弄れば弾無限とか武器の威力…とか色々できそう。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク