チート初心者スレpart2 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
>>633
うん、ありがとう
でその(ベースアドレス、オフセット、ポインタ)効率的な見つけ方を教えてほしいのだが…
もしくはそのやり方が乗ったウェブサイトとか(英語可) >>631の2つめの動画とやってることは同じ
3つのポインターマップを使ってスキャンする場合は下記の手順
1.弾丸のアドレスを見つける
2.このアドレスのポインターマップを作る(マップ1)
3.「Find out what writes to this address」で弾丸のアドレスに書き込んでいる命令を見つける
ポインターを絞り込むために何回かゲームを再起動する必要がある
再起動するたびに弾丸のアドレスを見つけるのは面倒なので、
書き込んでいる命令にAOB Injectionでスクリプトを組んで自動で弾丸のアドレスを検出できるようにする
4.ゲームを再起動する
5.再度、弾丸のアドレスのポインターマップを作る(マップ2)
6.ゲームを再起動する
7.弾丸のアドレスのポインターマップを作る(マップ3)
8.3つめの弾丸のアドレスに対してマップ1とマップ2とマップ3を使ってポインタースキャンをする(ここのやり方が少しややこしい)
9.8のポインタースキャンの結果をオフセットが少ない順にソートして上から順に再起動しても使えるかテストする
手順3は省いても出来るけど、手順5と7の前に弾丸のアドレスを手動で見つけなければならない
参考になる動画
https://www.youtube.com/watch?v=nQ2F2iW80Fk 1つ間違いがあった
手順3は書き込んでいる命令にスクリプトを組むのではなく、
弾丸のアドレスに常時アクセスしている命令に組む
そうすればスクリプトをオンにした瞬間に弾丸のアドレスを検出できる
書き込んでいる命令に組んだ場合は、銃を撃たないと検出できないのでひと手間増えることになる Find out what accesses this addressでoffset調べて、
Generate PointermapでpointerMap1とpointerMap2作ってセーブして、
Compare results with other saved pointermap(s)2つのポインターマップを比較しつつPointers must end with specific offsetsで調べたオフセットを入力したが
まだ3000超~4000くらいの結果までしか絞れない
ここからゲーム内で死んだでリスタートしたり、ゲーム自体をrestartしても不変のbase addressとpointerを見つけるにはどうしたら良いんだろう
何か足りないのかな オフセットの少ない順にソートすればいい
最大オフセット値を7でスキャンした場合、1番右がOffset 6になってるのでそこをクリックする
https://dotup.org/uploda/dotup.org2104559.png
複数のポインターマップを使ってポインタースキャンをすれば、ある程度安定的なポインターに絞り込まれてるはずので、あとはソートして上から順にテストするだけ。 >>645
なるほど、助かる
結局あとはフィールドテストしかないという事か… GetProcAddressのlpProcName引数を1にすることって可能なの?
push 1
push handle
call GetProcAddress
的なアセンブリコードがあるんだけど Valorant独自のパックシステムでパックされてるな。 あとやっぱりVMPでコードが保護されてる。俺は確認してないけど、タイマーによるデバッグのチェックもはいってるらしい。
そしてPUBGと同じようにポインタが暗号化されてる。他も誰かやってたら情報提供求む ポインタの暗号化って見たことないんだけどxorで暗号化復号化されてるって感じか? 考えてみればxor暗号までせずともset時にポインタを1減らしてget時に1加算するというコードにしておくだけでも自動ポインタスキャンは防げるな ポインタ暗号化されたところで簡単に復号できるから意味ないんだよなぁ... >>669
手動ならそうだけどポインタスキャンを防げるだけでも一応意味はあるな
ただポインタを暗号化するって普通のコンパイラじゃそんな事出来ないだろうから相当手間かかってるな 普通にコンパイルした後に専門のチート防止会社のパッケージとかで暗号化するんじゃね
かなり参考になる↓
チートを防ぐには何が必要なのか?セキュリティソリューション開発会社DNPハイパーテックにチートの実態と性質を訊く(前編) | AUTOMATON
https://automaton-media.com/articles/interviewsjp/20180406-65457/ >>672
暗号化するだけならまだしも復号化コードを挟まなきゃいけない訳だからコンパイル後にいじるのって限りなく不可能に近くないか? VALORANTはいけそうなのか?
Riotのセキュリティチームって元チーターだから厳しそうだな
ハッカーフォーラムやDiscordなんかにもチーター装って潜入してくるみたいだし ハッカーフォーラム潜ったところで、もうチート対策の限界にきてると思うから個別の対策はできても根本的な対策はできなさそう。
まあでもValorantはサーバー側でVisibleチェックして見えてなかったら座標データ送らないようにするらしいからこれでどこまで防げるのか興味ある 誰か一緒に64/32bit対応のマニュアルマップインジェクター作ろ 『Fortnite Battle Royale』起訴されたチーターがEpic Gamesと和解、14歳チーターの母親にも言及 | Game*Spark - 国内・海外ゲーム情報サイト
https://www.gamespark.jp/article/2017/12/06/77200.html
今後同社の著作物を作成、執筆、開発、広告、宣伝、配布するなどの著作権侵害や再度のチート行為を禁ずる恒久的な差止命令を出し、違反した場合には罰金として5,000ドル(50万円)の支払いを要求しています。 販売や配信となんでもやってて草
そりゃ起訴されるだろ NoxやブルースタックスとCEの環境だと「アクセスしている命令」や「書き込んでる命令」を検知出来ないのは仕様だと分かったのですが、エミュレータの問題でしょうか?
他に使えるエミュレータを探していますがありませんか…? オフラインゲーム(RPGやアクションゲーム)などで数値の書き換えを行っても、すぐに元の数値に戻されるものはどのように書き換えを行えばいいのでしょうか。
静的アドレスを探してポインタを作るといいのでしょうか すぐ戻される値は、そこにメモリライトブレークポイントを設置して
戻される値の元をたどる、そのうちに計算で使用する実際のパラメータが見つかるはず 実体じゃないってケースなら>>719が言うように更に探す必要があるけど、そこが実体であるならアセンブラを改変するしかない
mov [その数値へのアドレス], eaxみたいなループが走ってるからすぐに元の数値に戻されちゃう訳なのでnopで埋めるなり条件付きジャンプを挟むなりすればいい >>719
メモリライトブレークポイントというのはcheatengineでも設置することができますか?
検索してもメモリライトブレークポイントというのがヒットしなかったのでもう少し調べてみます
>>720
実体かどうかわからないのですが、今見ているアドレスでは静的アドレスが検出されません
mov [その数値へのアドレス], eaxを探してみます
cheatengineで数値の書き換えと簡単なポインタの作成しかできないので
お二方の言っている作業が難しいのであれば知識的に無理かもしれません 指定したメモリが書き換えられたらブレークするというもの
どこで書き換えているのか調べたい時に使う メモリライトブレークポイントはCheatEngineでは
Break on Write
Find out what writes this address >>722>>723
ありがとうございます。
どうも実体じゃなく、その画面にいる時のみCTに反映されているのでメモリブレークで探してみます Cheat Engineについて回答お願いします。
Bulletstorm: Full Clip Editionで日本語のまま残虐表現を有効にしたいのですが、まずは残虐表現のオン・オフの設定が可能な英語設定でアドレス抽出
0が残虐オフ、1が残虐オンという事がわかって、オフセットを設定するのにアドレスを監視させてポインタを検出できたはいいものの
そのポインタ(2D6A48E0)でアドレス検索をしても一つもヒットしません
これが出来たとして残虐表現有効のまま日本語設定でプレイできるかわかりませんが、通常の方法ではオフセットを割り出すのは不可能なのでしょうか?
以下監視結果
RAX=00000000
RBX=2D6A48E0
RCX=823B4800
RDX=00000069
RSI=00000008
RDI=00000008
RBP=823B4800
RSP=006DEE20
RIP=1405A0EB3
Probable base pointer =2D6A48E0
Label1
1405A0EAC - mov byte ptr [rbx+08],01
1405A0EB0 - mov [rbx+0C],eax
1405A0EB3 - mov eax,00000001
1405A0EB8 - jmp 1405A0E67 >>725
1405A0EAC - mov byte ptr [rbx+08],01
のrbxがどこから持ってきたかアセンブラを更に遡ってみては?
手っ取り早い方法なら2D6A48E0-300 ~ 2D6A48E0って感じの範囲検索をして出てきたもののアクセス監視するとか >>726
Cheat Engineというよりアセンブリ作業自体今回初めてやるのでRBXの出所を探るのに参考になるサイトを探しているのですが
日本語サイトは初歩の部分までしか載ってない所しか見つからないし、英語サイトは目的となる事を書いてあるのか判断するのに時間がかかる
https://fearlessrevolution.com/threads/11173/にあるBulletstormのチートテーブルの中を見てもスクリプトで組まれてて理解不能な状態です Bulletstormはunreal engineだからUIとかスクリプトで書かれていると思う
ブレークで止まるのは、例えば値をセットするルーチンとかなので
1405A0EB0は、他の値をセットする時にもブレークするはず
こういうのは大本たどるのが大変 Bulletstorm安かったから、仕事放置で解析してみた。
ゴアフラグを突き止めるまでは725の方法でおこなう。
該当フラグを弄ってみたが結果が反映されないので
対象アドレスに、Break on accessをセットする。
設定画面を抜けたりすると
StormGame-Win64-Shipping.exe+A78CF7 - mov ecx,[rax+0C] ここ
StormGame-Win64-Shipping.exe+A78CFA - mov eax,00000001 { 1 }
StormGame-Win64-Shipping.exe+A78CFF - mov [r13+00],ecx
がブレークする。
アセンブラを読むと、フラグをr13のアドレスに格納しているので
r13が示すアドレスにフラグを格納するので、ここにBreak on accessをセットする。
Runで処理をすすめる。
StormGame-Win64-Shipping.exe+DA4E4E - cmp [rsp+68],edi ここ
StormGame-Win64-Shipping.exe+DA4E52 - setne dil
StormGame-Win64-Shipping.exe+DA4E56 - mov [StormGame-Win64-Shipping.exe+17B7790],edi { [00000001] }
がブレークする
StormGame-Win64-Shipping.exe+DA4E56の命令は、固定アドレスを示しているので
ゴアフラグの実体の可能性が高い。 このままトレースを続けると
StormGame-Win64-Shipping.exe+DA4E9A - ret
の時点でRAXは1、StormGame-Win64-Shipping.exe+17B7790の値は1のようだ。
とりあえず、ここがゴア条件だと予想しておく。
アセンブラ画面を上に戻していくと、この関数は以下から始まっている。
StormGame-Win64-Shipping.exe+DA4D70 - push rdi
言語を日本語にしてゲーム再起動。
StormGame-Win64-Shipping.exe+DA4D70にブレークポイント設置。
キャンペーンを開始するとレベル開始直前でブレークする。
ステップ実行しながら
StormGame-Win64-Shipping.exe+17B7790に1、関数を抜けるときにEAXが1に
なるように実験してみると、日本語モードでもゴア表現が有効になった。
実験結果をコードに反映するとこんな感じか?
StormGame-Win64-Shipping.exe+DA4D90 - xor ebx,ebx
StormGame-Win64-Shipping.exe+DA4D92 - inc ebx
StormGame-Win64-Shipping.exe+DA4D94 - mov [StormGame-Win64-Shipping.exe+17B7790],ebx { [00000000] }
StormGame-Win64-Shipping.exe+DA4D9A - xor eax,eax
StormGame-Win64-Shipping.exe+DA4D9C - jmp StormGame-Win64-Shipping.exe+DA4E86 ココも変えたので注意 >>730
横から失礼します
どうやって解析能力を身に着けたのでしょうか?
右も左も分からない状態なので参考にしたいです 人の真似から初めて解析に慣れるのが良いかと思います。。
Bulletstormの例でも、スレみて真似するだけでも得る物があるハズ
たぶん、???な部分も出るのでソコを自分で調べるなりしてみるのが
勉強になったりします。
今は、この様な話題が出来る場はほぼ無いです。
ここでもマシな部類なので、私が解る範囲でコメント出来るときはしています。 解析能力はなんだかんだでプログラミング能力に比例して伸びていく
なぜならプログラミングが出来るとアセンブラを見れば大体「ここはあの関数かな」と推察出来るようになる
とは言えPythonとかRubyとかJsみたいな動的型付け言語だとこの話は当てはまりづらくて、
最低でもJavaやC#のような静的言語、C/C++なら完璧に解析力とプログラミング力はリンクする ■ このスレッドは過去ログ倉庫に格納されています