チート初心者スレpart3
>>1 自称不細工(子ガチャ外れ枠)「親ガチャ外れた。美男美女の子供として生まれ、容姿が良ければ人生イージーモードだった。」 >>1 小室圭さんの緊急帰国で警備費は2千万円 仮住まい候補は「赤坂」「青山」の高級マンションに https:/ /news.yahoo.co.jp/articles/8b1625f22d3636fc6e19c5df8c2384303af1a6ad 脳ミソ腐った鬼畜の住みか 豚社長と指なくしバカマヌケ は職員のことも考えて気持ち悪い笑みが耐えられない判子なんか押すわけないやろ! こういう結論ありきの押し付け命令するクソバカ変態ストーカーの言いなり豚社長 >>1 実家暮らしニートが親ガチャ失敗言うてるのうける 親ガチャ大当たりやん IDコロコロ どう見てもB型以下の変態ストーカーのふざけぶりとぼけぶりは変わりませんと110番通報するとどうなるか? でも重労働作業場のエアコンは直さず どう見てもB型以下の変態ストーカーのふざけぶりとぼけぶりは変わりませんと110番通報するとどうなるか? >>1 眞子「そこっ…!イイッ」 圭「」ピタッ 眞子「…え?…」 圭「眞子…俺今月金ねンだわ」 眞子「で、でも…これは国のお金で…」 圭「フーン」ヌポポ 眞子「ッ!…いやッ!辞めないで!」 圭「…じゃあ分かるよな?」 眞子「…」フルフルつ50000円 圭「…」グワシャ 圭「愛してるよ…眞子」チュッ 圭「っしゃ!スパート掛けるぞオラッ!」パンパンパンパンパンパン 眞子「アッアッアッアッ….いやああああ!!!!!」 これが現実 ★「金ねンだわ」とは 小室圭さんと眞子様の結婚発表した際に、 小室家には400万円ほどの借金があることが判明、メディアに取り上げられることで結婚に待ったがかかった。 この発表を受けたネット民は、借金のある小室圭を「金無しの屑人間」と仮定し ネタコピペを次々創作していく流れに。 「金ねンだわ」は、そのコピペ内で「金無しの屑人間」と化した小室圭が発言した架空のセリフが元ネタとなっている。 >>1 眞子「そこっ…!イイッ」 圭「」ピタッ 眞子「…え?…」 圭「眞子…俺今月金ねンだわ」 眞子「で、でも…これは国のお金で…」 圭「フーン」ヌポポ 眞子「ッ!…いやッ!辞めないで!」 圭「…じゃあ分かるよな?」 眞子「…」フルフルつ50000円 圭「…」グワシャ 圭「愛してるよ…眞子」チュッ 圭「っしゃ!スパート掛けるぞオラッ!」パンパンパンパンパンパン 眞子「アッアッアッアッ….いやああああ!!!!!」 これが現実 ■「金ねンだわ」とは 小室圭さんと眞子様の結婚発表した際に、 小室家には400万円ほどの借金があることが判明、メディアに取り上げられることで結婚に待ったがかかった。 この発表を受けたネット民は、借金のある小室圭を「金無しの屑人間」と仮定し ネタコピペを次々創作していく流れに。 「金ねンだわ」は、そのコピペ内で「金無しの屑人間」と化した小室圭が発言した架空のセリフが元ネタとなっている。 >>1 眞子「そこっ…!イイッ」 圭「」ピタッ 眞子「…え?…」 圭「眞子…俺今月金ねンだわ」 眞子「で、でも…これは国のお金で…」 圭「フーン」ヌポポ 眞子「ッ!…いやッ!辞めないで!」 圭「…じゃあ分かるよな?」 眞子「…」フルフルつ50000円 圭「…」グワシャ 圭「愛してるよ…眞子」チュッ 圭「っしゃ!スパート掛けるぞオラッ!」パンパンパンパンパンパン 眞子「アッアッアッアッ….いやああああ!!!!!」 これが現実 ■「金ねンだわ」とは 小室圭さんと眞子様の結婚発表した際に、 小室家には400万円ほどの借金があることが判明、メディアに取り上げられることで結婚に待ったがかかった。 この発表を受けたネット民は、借金のある小室圭を「金無しの屑人間」と仮定し ネタコピペを次々創作していく流れに。 「金ねンだわ」は、そのコピペ内で「金無しの屑人間」と化した小室圭が発言した架空のセリフが元ネタとなっている。 >>1 ガキ「無職で皇族にプロポーズした一般人に多額の税金が無駄使いされている?どうでもいいです」 共産党による皇室崩壊計画がこんなところにまで投下されるとはな x86アセンブラが凄い敷居高く感じるんだが皆どうやって覚えた? 言語仕様的にはアセンブラはあらゆるプログラミング言語の中で最も簡単だろ まじか。構文の見た目が直感的じゃなくて全然分からない。頭良いんだな このままチートエンジンのチュートリアル続けても身につきそうにない お勧めの入門書ある? 入門書もなにもインテルの命令セット リファレンス見るだけじゃん >>230 https://imgur.com/a/hrc3yTE 弾を撃ったときにこういう処理が出てきたら赤い所だけ着目してればいいのですか? イメージとして*(string+1)こういうことしてるのかな?アドレスの計算をして何をしてるのかわからない。 全体を通して通してアセンブラ見ると全く意味がわからない。。 >>231 見た所、弾の数の処理っぽいからstringではないだろうよ pushしてるってことはその後に何か関数呼んでるだろうしfunc(弾の数)って感じだろうな dec [esi]は--*ptrだから撃った後に弾減らしてるんだろう >>229 直感的ではないがどれも単純な命令だし命令数だって高級言語と比べたら限られてるからな ちゃんとまともにプログラミング経験があればすぐ分かるよ 逆にプログラミング経験もないのにいきなりアセンブラから入ったら何のためにこの命令を行ってるのか理解出来なくて勉強捗らないだろうな >>233 一年近くCのコンソールの文法並行してやってるけど全然検討もつかなかったw 厳しいかな?詳しく教えてくれてアリガトウ ハンゲームのななパチのバイオ5で子役のアドレス探してるんですがたどり着けません。 押し順ベルと三択回避が知りたいのですが、どのように探せばいいですか? >>236 売ってる >>237 見つからないでしょ 買うか自分で作るしかない アドレスどうやって探すの?に対して「見つからないから自分で作れ」は草 サドンアタックEVOの弾のアドレスが引っかからないのですが どうすれば見つかりますか? 撃って-1検索し続けても出ないし16進数8進数に変えてやっても駄目みたいです。 バイト数変えるならまだしも進数変えてもなんの意味もねえぞ >>244 知らなかった。ありがとう でもバイトのタイプ全て変更してやったけど出なかった 他に方法ないかな 何のツール使ってるか知らんが変動サーチする Cheat Engineなら 1.Scan TypeをUnknown initial value で First Scan 2.ゲーム内で一発撃つなど弾数変動させて Changed value で Next Scan 3.ゲーム内で弾数変動させず動きまわって Unchanged value で Next Scan 2.3.を繰返し件数が絞れたら適当に書き換えて対象アドレスを特定する 上手くいかない場合はValue Typeのサイズを見直す アドレス自体が絞り込み中に変動する場合は諦める 念のため先にfloatやdoubleで値直指定での検索も試しておく 弾数アドレスが特定でき、そのままコード化してもおそらく再利用性できない コード化したいなら例えば、弾数アドレスに書込みブレークポイントを設定し、 ゲーム内で1発撃って弾数の書込み箇所でブレークさせ、直前の処理を確認し 最大値チェックを行っていればそれを利用し最大値に、行っていなければ減算 処理を行わない命令に書き換えるなどしたものをコード化する チートエンジンでメモリサーチする際、一時ファイルとして結果をキャッシュするんじゃなくてメモリで済ませるように設定余地残してもらいたいわ とっくに64bit化してるんだし今時のPCなら数GBくらい軽くメモリ余ってるんだから まぁ自分で改変すりゃいいんだけど開発言語がPascalとかいう糞言語なのがな >>246 おかげで見つかった。センキュー 書き込んでる命令っぽいのも でもどれが比較命令でどう変えればいいのか全く分からない…… https://imgur.com/a/HjRYaZn 比較命令は、比較(compare)を意味するCで始まる命令である事が多い 比較の後はたいてい条件付きジャンプ命令である事が多い 比較結果がイエスかノーかでジャンプするかしないかが決まるから ジャンプ命令も、JumpのJで始まる命令である事が多い じゃcmp命令ないからこれは見当違いの所見てるのか。 >>比較結果がイエスかノーかでジャンプするかしないかが決まるから こうやって検討付けていくのか。助かる もうちっと頑張ってみる。ありがとう >>252 247と248が俺なのは認めるけど250は全く知らん奴なんだが 書込みブレークさせたら停止しているアドレスは書込み命令の1つ後になる なので1つ前の書込み命令をnop命令などで潰すだけでも効果があるかもしれない ただし、これが有効なのは弾を撃つという1処理に対して個別に書込み命令が用意されている場合 もし、弾の初期値設定や弾が増えた場合など共通して同じ箇所で書込みを行っている場合は不具合が生じる 頻繁にバージョンアップする場合はAOBインジェクションを使用しバイトパターンを用いてアドレスの差分を自動修正すると良い UnityでJitコンパイラを利用している場合は、Mono Featuresを有効にしてクラス、メソッド名を用いたアドレスを特定する コード化する場合はクラス、メソッドを事前にコンパイルする命令を組み込み、メモリに展開させておくこと 上の詳しい内容を字数制限有りの文字だけの5chで書くのは難しい ネット上にはそういった情報がいくらでも有るので自分が解りやすいサイトを探せば良い スパロボXでCheat Engineを用い機体やパイロットを全く別のものにしようとしているのですが上手くいきません PS4版でSWを使った時のようにしてもウンともスンとも言わず サーチして出た数値を弄っても戦闘アニメ以外での顔アイコンだけは変わるだけだったり パっと見はシーブック・アノーからシーブック・アノーへ乗せ換えられたようにはなりますが実際の乗せ換え結果は正常なままでした https://i.imgur.com/hSYnRwj.jpg 古いPS2のゲームなんだけど敵モンスターの外観のアドレス見つけるにはどうすればいい? 未実装のモンスターのデータが入ってるみたいでそれを見てみたい それなら簡単 アドレスをずらしてモンスターを変えていく 未使用モンスターに変更したら見れる WindowsゲームプログラミングっていうAPIの参考書買ってきたんだが 早くもダルい…………。チート中上級者ってこういうの全部覚えてるの? https://ideone.com/ZOZVxe WriteProcessMemoryの練習してるんだけどやり方間違えてるのかゲームに反映されない チートエンジンで見つけたポインタ、アドレス自体は合ってるみたいなのだけど どこが駄目か教えて欲しいです 何もわからん初心者だがベースアドレスとか設定してないせいじゃないの if (ProcessID == NULL)じゃなくてif (handle == NULL)でOpenProcessが成功したかを判定すべき そしてWriteProcessMemoryが成功したか否か自体も確認してみ cout << WriteProcessMemory(handle, (LPVOID)helth, &write_Helth, sizeof(write_Helth), NULL) ? "WPM成功!" : "WPM失敗..." << endl; あとSleep(3000); exit(0); なんてせずにmain関数の一番したでgetchar();しとけばコンソールに何か打たない限り終了されなくなる てかfor(;;)の中でWPMしてるのはどういう理由? WriteProcessMemoryを待機無しで無限ループしてるってことになってるけど >>265 for入れとけばHP減った後自動で回復してくれると思ったのですが意味なしですか? 教えてもらった通りにWPMの成功を確認する文を入れてみたのですが一応成功はしてるようです、、 WPMの第二引数にHPのポインターを入れてるのですがそれが間違えなのでしょうか? >>266 自作アプリの実行前からCEでアドレスの値を調べて想定した書き換えができてるか確認すればいいんじゃね? ゲームでアイテムを無限とかにするチート(MOD?)はBANになったりしますか? デッドバイデイライトというゲームで遊びたいのですが、PS4はクロスセーブに対応してないのでまた一から始めるのが怠くて・・・ 課金スキンや微速チートなどを使って通報されまくらない限り平気なんですかね? そんなのググればすぐわかる 平気と思うならやればいい 教えてください。 チートエンジンを使ってThe Ruins Of The Lost Kingdom CHRONICLEというMOゲームでMPやHPを減らないようにしたいのですが、HPMPアドレスを絞っても複数のアドレスが出てきてそのままアドレスを固定して進行すると、アドレスがまた変わってしまいます。 最初にヒットしたアドレスを固定したままにするとゲームがクラッシュします。 この場合はどうすればよろしいのでしょうか。よろしくお願いします ポインタかScriptで対応すればいい Scriptって聞くと難しく感じるかもしれないが、HPアドレス取得するだけならアセンブラロクに知らんでもどうにかなる むしろ多重ポインタのベースアドレス探す方が面倒まである >>272 そうなんですね スクリプトのやり方を調べながら、試行錯誤してみます。ありがとうございます 固定するだけならわざわざアドレス取得しなくても処理潰すか固定値代入したほうが楽そう チートエンジンでインジェクション時のenable,disableについて質問で、ちょっと割愛して仮に [ENABLE] newmem: mov [rbx],rdi mov [rbx+FF],rdi jmp return INJECT: jmp newmem returtn: [DISABLE] INJECT: mov [rbx],rdi というスクリプトを書いたとき、disableのときに[rbx+FF]の値を元に戻したいのですが 単純に命令を追加すると元アドレスがずれてしまうので、変化させずに行うにはどうすればいいのでしょうか? >>275 たぶんこれでいける [ENABLE] label(x) newmem: mov [rbx],rdi push rax lea rax,[rbx+FF] mov [x],rax pop rax mov [rbx+FF],rdi jmp return x: dq 0 INJECT: jmp newmem returtn: registersymbol(x) [DISABLE] INJECT: mov [rbx],rdi {$lua} writeInteger('[x]',100) {$asm} unregistersymbol(x) >>276 ありがとうございます期待通りの動作になりました >>259 アドレスをずらすってどうやるの?具体的に教えて下さい 敵のHP減らして敵のアドレスをヒットさせて んで・・・その後どうすりゃいいのかわからないす グラフィックを指定しているアドレスの値をズラしての間違いでしょ 外観のアドレスの探し方を知りたいって質問ではなく、未実装のモンスターを見たいという願望に対する返答 つまりお前にはなんの助けにもならないレス >>279 なるほど。質問の仕方が悪かったってことですか 改めて外観のアドレスの探し方を教えてほしいです 敵の攻撃力から構造体辿ったんだけどそれっぽいのが見つからない ステータス付近にないのであればどっか別の場所で一括管理してるんじゃないの ゲームによって構造違うし一概にこうしたら見つかるよなんてのは難しい気がする 自由にキャラクターをスポーンするのって逆アセンブルで出来る? やっぱGTAみたいなスクリプトとかアンリアルエンジンのコンソールコマンド無いと無理かな? できるけどネトゲの場合はクライアントにスポーン座標が埋め込まれてる訳ではなくサバからのメッセージに従うって形式が多い Cheat Engineとエミュを起動し直したらコードの座標変わるんだけど 何とかする方法ありませんか? Easy anti cheatってespのみでも検知されるの?大抵のfpsってespだけならbanされないイメージあるけど espの描画に必要な敵座標、自分の座標、向きなど EACを回避しないと取得できない。 外部プロセスからのアクセスはEACが防ぐし、DLL差し込みもEACが検知する。 >>285 ありがとう サーチ機能ないエミュなのでこれ使うしかないのですが 仕様と思ってその都度検索かけます >>287 マジか、じゃあチート業者の技術ってかなり高いんだな 不定期にデスクトップスクショ取ってくるものも多いからespも安全ではない 安全に最重点を置くならゲーム上のマシンから別デバイスへ情報を送ってそっちでビューさせるって方式しかない その場合は2Dマップやレーダーくらいしか出来ないがこれだけでも十二分なアドバンテージは得られる あちこちで情報拾ってきて 弄り回したけど駄目だったから 元にあったct使おうと思ったんだけど ???で何かの数値が取得できない場合自分で治すにはどこを弄れば良いんだろうか 静的アドレスを拾ってこようと思ったけど無理そうだ ポインタリストの中のどこかでNULL(0)等の不正値があるってこと 一番考えられるのはベースアドレスが狂ってるパターン 構造体の変更によって途中のオフセットが狂ったパターンもあり得るが 日本でHAXXやsoreや川越みたいな解析者はもう居ないのか? 大抵の出来る奴は既に良い給料貰って普通にエンジニアとして働いてるからな >>296 化学系の開発職で勤続3年目の20代だが、年880万台の収入ある こんなところにまで来て妄想語って恥ずかしくないの? プログラミングが出来る奴の話してるのになんで化学系開発職が年収自慢してんの?馬鹿なの? チートエンジンで目的のアドレス見つけた後その周辺の数値をまとめて変えたいのだけどどうすれば出来ますか? アイテムの数を変える為にアドレスを見つけた後に他のアイテムも順番に変更して行きたいのですが、アドレス手動追加で入力して変更しています ただこれだと労力がかかりすぎてしまって例えばアドレス自体を逆引きみたいな感じで特定の法則で検索してまとめて変更する事って出来ますか? アイテムのアドレスが100あるとして、全てのアイテムの数を一気に同じ数に変えたいのか それとも範囲指定で50番目から70番目までを20にしたいのか それとも5番目は10にして、21番目は30にしてあとはそのままにしておくとか こんな感じ? どれも出来る様にはなりたいですが1番やりたいのは最初の全てのアイテムの数を一気に同じ数に変えたいです 全部変えたいならCtrl + AからEnterで変えれる 1番目から10番目までを変えたいなら、まず1番目を左クリック、 Shiftキーを押しながら10番目をクリックしてEnterで変えれる 5番目と10番目と21番目を変えたいなら、まず5番目を左クリック、 Ctrlキーを押しながら10番目と21番目をクリックしてEnter 選択するアドレス自体をまとめて表示したいのです 例えばアイテム3のアドレスは見つけられるのですがそのアドレスからアイテム1,2,4,5を変える場合(アドレスは2ずつ増減する) アドレス手動追加でアイテム3のアドレスを-2又は+2して追加という事を繰り返しています なのでアイテム3のアドレスで検索してアイテム1.2.4.5を編集画面にまとめて追加する方法は有りませんか? ポインタースキャンでアイテム3の静的アドレスとオフセットを見つける アイテム3が[Tutorial.exe+87ab1c]+12なら アイテム2が[Tutorial.exe+87ab1c]+10 アイテム4が[Tutorial.exe+87ab1c]+14 2と4はAdd Address Manuallyで追加する これを保存しておけば次回から手動で追加する必要ないよ 静的アドレスとオフセットは見つけましたが結局これはアイテム100個分いじる場合は1度100回入力しないといけませんか? ポインタ使うので1度のみだとアドレスをそのまま打つより労力増えてませんか? 上の方に有ったのですね確認不足でした 今>>124 のでやってみたのですがやりたい事は出来ました ただ追加で質問なのでが ベースタイプを2バイトや8バイトにする方法と基本文字列サイズ?(最初の個数)を現状維持にするやり方を教えて欲しいです 質問が多くてすみません 連投すみません 自己解決しました、回答してくれた皆さんありがとうございました チートエンジンのAOBでraxレジスタだけは[シンボル]に値を入れたり、その逆を行うなどの干渉が出来るのですが rbxや他のレジスタに干渉する事が出来ません(スクリプトが起動しない)。これらは触ることは出来ないのでしょうか? コードくらい貼ればいいのに どうせ記述ミスってるだけでしょ >>320 例えば問題なく起動する「mov [シンボル], rax 」を 「mov [シンボル], rbx」にするだけでスクリプトにチェックが入らなくなる感じです 皆さんの反応を見る限りシンボルとの干渉自体は基本的にどのレジスタでも可能と捉えても大丈夫ですか? 現状(自分の理解の範囲内での)苦肉の策で mov [記憶用シンボル],rax //raxの値を一時退避 mov [rax],rbx mov [実用シンボル],rax mov rax,[記憶用シンボル]//raxに退避していた値を復帰 の様な不格好な形で擬似的にrbxとの干渉を実現していたのですが、 流石におかしいと思ったので質問させて頂きました なんでやろな どのゲームでも一緒なんか? スクリプト内にエラーが有る場合はスクリプト右クリック→コンテキストメニューの一番上にエラーが表示されるから見てみるといいかもしれん ついでにraxを退避させるだけならpushでええんちゃう? push ,rax mov [rax],rbx mov [シンボル],rax pop rax >>323 pushとpopの命令を把握してませんでした(無知) 値の退避はそちらの方法で簡潔に記述出来そうです。有り難うございます rax以外のレジスタに触れない状況はゲームの方が原因だった様です 色々試した所Unity製のゲームが比較的遭遇率が高めだった感じがしました rax退避させる必要ある? 退避させるべきは[rax]じゃなくて? >>322 だけ見るとraxへの代入は一切ないようだけど ゲーム内の数値はメモリー閲覧であるのですが… チートエンジン内での走査結果で出てこないんですが理由分かりますか? >>327 数値検索は手動で指定しない限り4byte単位、8byte単位などの区切りの良いアラインメントで検索される 例えば「5」を検索したい場合にアドレス0x10000001に5がある場合はこれは引っかからない あとは文字列検索でよくあるのはデフォルトだと書き込み可能なメモリからのみ検索がされるので、exeに埋め込まれている文字列などはWritableのチェックを外さないと検索されない GTA3の主人公の見た目を変えたいんだけど、この場合どうやって主人公の見た目のアドレスを見つければ良いかな? cheat engineでRPGツクールXP製のゲーム(腐界に眠る王女のアバドーン)のポインタスキャンを検索したいんだがMax Levelを 10に、Max Offsetを4095にしても見つからなくて困ってます これ以上Levelを増やすと一日かかっても終わらなくなるんだけどこういった場合どうやって探したらいいですか? 諦めてゲーム進行で変わらない数値をAOBスキャンしてそっからオフセット足すスクリプトを書く 多くある検索結果を一個づつクリックしながら追加するよりも 全部選択する方法はありますか? 適当なアドレスクリックしてCtrl+Aで全選択、サーチ結果右下にある赤矢印押して追加 一部の範囲やアドレスだけ追加であればShift+クリックによる範囲選択だったり、Ctrl+クリックでの個別選択すればいい ありがとうございました。 データー解析はちょこちょこやってればすぐに見つかりますが プログラム解析には教えていただいたやり方が威力を発揮しますね。 金は増やせるけどアイテム数はサーチに掛からなかったり ステータスの回避は見つかるのに命中はみつからないと言うことが起きてるんだけどなんで? 項目として大きく違うように見えないのに検索にかからないのが不思議でしょうがない 例えばアイテム数は種類ごとに個数が分かれていてステータス欄にはそれらの合計値を表示してるとか 稀だけど同じアイテムでも1つ1つインスタンスが分かれててUIには種類ごとのインスタンス合計値を表示するだけって作りのものも確かにある その方式だとしたら合計値の数字データはスタックや一時ヒープで即捨てられて文字データしか残らない ただこういうパターンよりかは暗号化されてない前提ならbitで保持されてるケースの方が俺の経験則だと多いな 上のは"種類ごとに"って言ってるから突っ込まれてるんじゃないの? アイテムはかなりの数あるからわかるとして 項目の少ないステータスの回避は見つかるけど命中は見つからないはどういうこと? >>341 それステータス上限が15だったりしない? それなら4bit単位で保持して1byteに二つの値を敷き詰めてるってパターンかもしれない この場合バイトサーチに引っかかるのは下位4bitで且つ次のステータスが0の場合のみってことになる チートエンジンを使ってKH2.5(キングダムハーツ2ファイナルミックス PC版)のハックを試みてるものです。 メモリハック自体初めてで、お金やステータスなどある程度画面上の数値から読み取れるものは自力で見つけられる。コードインジェクションも少しやりました。 アセンブリに関してはレジスタや構文を少し齧った程度で完全に把握はしてません。 それくらいの知識量です。 PS2時代にあったPAR2の改造コードの再現をPC版でも出来ないかなと思ってます。 具体的には以下のコードを移植、再現したいです。 スケルトン変更コードと呼ばれるものです。 200F9000 10400005 200F9004 944F004C 200F9008 24010000 200F900C 142F0000 200F9010 240F0000 200F9014 A44F004E 200F9018 03E00008 201D348C 0803E400 こちら複合化状態のものです。 こういったPS2時代のコードの移植となるとやっぱりオリジナルのディスクが必要でしょうか? もしくは何かポイントやコツがあれば教えて欲しいてます。 まだ試してませんが、このコードのデータ値を検索かけて該当の数値がないか見てみようかと思います。 ただ、このコードの製作者全てコードで書き換えてた場合は見つけられないのかなと思ってます。 お知恵をお借りできたら幸いです。 いいですけど足付かないようにビットコインで支払えますか? ついでに当方本業の開発業で結構良いお給料貰っているので時給換算1万以上でお願いします >>343 WindowsのIA32とPS2のMIPS IIIは別物 コードを変換するより解析しなおした方が早いかもね なんで日本だけこんなに情報少ないんだろうな 英語や中国語だと最新の情報は出てこなくても割と使える情報出てくるのに >>343 それはデータではなくプログラムを書き換えているので移植などというレベルではない 日本のチートコミュニティは割と昔からあったけど排他的だったり出来合いのツール使って満足する新規ばかりで限界集落化した 今でも細々と続いてるところはあるけど情報共有しようってところは見かけないな みんな海外フォーラムで済ましてるんじゃない そもそもプログラミング自体が敢えて日本のコミュニティに拘る必要性が皆無だし 世界で1億人ほどしか使ってない言語の情報量と少なくとも10億人以上が使ってる言語の情報量を 比較したら少ないのは当たり前ということに気づかない程度のやつには厳しいだろうなw そんなに興奮しないで下さい 何か一本取ったように感じるのは充実した審議とはほど遠い審議と言わざるを得ない 人口比較でここまで論破した気になれるのすごいw 人口以前の話だろ さすがに ごく当たり前のことを言っただけなのに一本取られたように思いこんでるのか... 逆になぜ日本に対して英語圏や中国と同等の情報量を期待してるの? それこそ傲慢もいいところだと思うけどな デスストランディングの座標系を操作したり、ジャンプ力を上げようと思って高さ変えつつそれらしい数値を絞り込んでみたのだけど全然見つからない・・・ アドレスの数値を変更しても反応のない動的アドレスばっかりが100個ほど最終的に残るのだけど、最近のゲームってそこら辺の数値巧妙に隠してること多いのかな。探し方が悪い? ネットの記事だとアドレスにXYZの数値がベタ置きされて管理されてる系のゲームばかり出てくるのであまり参考にならない。 コジマ繋がりでMGS5ならやったことあるけど確かに検索に引っかからなかった なんかチート対策でもしてるんだろなオンライン要素あるし チート対策で最近のゲームは常に数値を暗号化してベタ起きしないのが普通なんだな。しかも常に複合のためのシード値をランダム生成してるからメモリに確保される数値もランダムになると・・・・そうなってた場合無理じゃね? クライアントに置かれてる限り無理ってことはない 逆に鯖に置かれてたらどんなハッカーでも基本無理になる 暗号化までされてるのなんてソシャゲとか無料オンラインゲームぐらいじゃない 海外のハッカーなら鯖と通信する部分にチート仕掛ける DQ10オフラインのステータス、HPと攻撃力の値を現在の値から999に変更したいのですが アドレスを割り出せずに難儀してます。 どなたかわかる方いませんか? >>365 やっぱみんなここ利用してるんだな 日本人でリクエストしてる人いる? Englishすら入ってないDenuvoゲームをFearlessでリクエストしたところで無駄な気がするけど 英語版がない 海賊版がアップされない CTがアップされない この流れだと思う ピクリマff2のキャラステータスってそのままの数値で格納されてないんですかね? ギルはサーチで見つかったんですがステータスの数値はヒットしません 質問失礼します アドレスの数値がプレー中に常に変動していて数値を変更しても元の数値が変更されないアドレスの数値を変更する方法はありますか? なんの数値を変えたいのか知らんが単純な個数やら数値を変えようとしているのであればそもそもアドレスが間違ってると思う CheatEngineのcmpで同じ値かどうかを判別出来ますが、以上以下を判別する方法はありますか? floatの値 1 以上が入った場合を判別させたくて… >>376 https://i.imgur.com/9tXTigv.png 左側がVisual Studioでfx[5]が1.0以上ならgeを表示、そうでなければlを表示。 右側がそれに対応するCheat Engineの逆アセンブル結果。 cvtss2sd命令はメモリにあるfloatをxmm0レジスタへコピーする。 comisd命令はxmm0レジスタと1.00を比較する。 jb命令はxmm0レジスタが1.00未満だとジャンプする。 >>377 有り難うございます! 無事目的達成に至れました グラクロのチート(gg コードってどこみればのってますか? 今日マックのグラコロ開始だからグラコロにしか見えなかった かなり古いMMOでアイテム増殖したりレベル弄ったりしてみたいんだが 通信解析してプロキシサーバ立てて改ざんしないといけないのか? 下手したらWindows98で作ってるかもしれん 便利なツールあったら教えて モンスター倒した時のドロップ判定なんだが クライアントから送信されるIPでサーバが抽選してるなら 改ざんして意図的にレアドロップに変えられないかなと思ってるんだが Wireshark導入してみたものの更新が多すぎてどれがモンスター倒した時の送信記録なのかわからん 教えてエロい人 普通のオンラインゲームだと全てサーバ側でステータスやアイテム等の情報管理してクライアント側は描画と入力イベント処理くらいじゃないの? いくら古いとは言え流石に重要な部分にはチェックサム仕込んでるだろ cheat engineってMMOだと使えない? うさみみハリケーンと同じで所持金増やせたとしても実際使えないのかね? ネトゲとは何なのかをまず理解しよう まともなネトゲは所持金やらキャラのステータスやらの実体はサーバー側にあり、君が操作しているクライアントソフトなどただの表示用ビューアに過ぎない 表示用ビューアの表示値を変えたところで実体は何一つ変わらないのでクライアントの画面更新のタイミングで元に戻される事となる 昔は極稀にサバで管理せずにクライアント側に管理を委ねてるアホなネトゲも存在したがそういうネトゲは即終了することとなる GTAでチートエンジン使って売却直前に数値変更するとお金が増えるって裏技参考に使ってみたけどやはりできなかったわ 逆にクライアント側でできるチートってどんなのがある? 結局ゲームに依るけどモーションの高速化やら無敵も出来たりする >>393 裸にするみたいな感じか? それも自分だけにしか見えてないとかじゃないの? >>394 スキル詠唱時間短くしたりできるんかね スピードハックで見た目だけ早くなったけどやはり意味が無かった >>392 キャラ座標関係はクライアントに任せてるゲームが多い 全ユーザーの位置を厳格にチェックしようとするとCPU使用率相当跳ねあがるだろうからね だから加速やワープみたいなチートが結構存在する そういったチート対策のためにキャラ座標まで厳格にチェックしだしたネトゲあったけど、海外鯖でやってるのかってくらいに移動がもっさりになってたな チャット欄にSQLのコマンドぶち込んだら何か返って来ないかなと思ったけど工夫すればできるもんなのか? 接続人数とか見てみたい 過去に他ゲーでそういう裏技あったりする? SQLインジェクションとか裏技じゃなくてセキュリティホールだから普通は対策してる チートじゃなくてサーバをクラックしたいの? >>399 GMアカウント発見できたら面白そう SQLインジェクションの例説明してるサイト参考に試してみたができなかったな サイトによっては1=1とかA=Aで書かれてたりするけどここは自分で変えないといけないのか? sqlmap導入したんだがhtml覗いてみるとPOSTメソッドでapplication/x-www-form-urlencoded使ってるんだよね application/x-www-form-urlencoded使ってる場合と使ってない場合でやり方変わってくる? 全てのパラメータが注入できないし、もっと多くのテスト実行したい場合はコマンド入れろ言われてそれもやったけどダメだった tampar使ったらインジェクションポイント見つけられたけど テーブル表示するコマンド使っても no tables foundになる ちなみにtechniqueで攻撃パターンは全て試した アドバイスくれ 明らかに攻撃のリクエスト送信しまくってると裏で警察動いてるかもよ AI認識エイムアシストみたいなやつBANされません!っていたるところでみるから調べてみたけど 物体検知のyolov5をonnxに変換?して検知した物体の真ん中に仮想マウスのカーソルを移動させるらしいんだが仮想マウスの座標動かしてるならオンラインFPSならAIMの座標管理してるはずだしBANされるとおもうんだがどんなトリックがあるんだ ガチャ回す時のパケット特定して 再び送るみたいなことやると無限にガチャ回せるの? packet editerとかで調べると同じパケット送り直すことでキャラがそのモーションを行うみたいなのがあったけどどうなんすかね? ネトゲの話 ネトゲはサーバ側で情報管理してるからクライアント側で再送しても所持金の範囲内でしかガチャ回せんだろ >>407 これ見てるとできそうなんだが ttps://github.com/Erarnitox/TeraProxy あるコードの命令が書き込む複数のアドレスのfloatに相対的に1や2を足すと言った命令はどうすれば実現出来るでしょうか? 絶対値には置き換えられるのですが… >>406 キャラがモーションを行うって言うのは君のクライアント内の話だから自由自在 そのモーションを行うパケットを自前で生成してクライアントに送るなりすれば課金モーションとかでも君のPC内限定だが再現は可能 ガチャはサーバー側で行う事だからめちゃくちゃザルな鯖でもない限りは不可能 >>409 mov [ポインタ], eaxみたいな書き込み命令の直前にinc eaxみたいなコードを差し込めば良い floatのinc命令相当のコードは忘れたけど >>411 そちらをヒントに探しましたらfld,fadd,fstpの利用で実現出来る事が判りました 有り難う御座います パケット改ざんについて詳しい人いますか? wiresharkやチートエンジンでできるみたいな記事みかけたけどイマイチやり方がわからん プログラミングできないと無理? パケット解析して対象のデータ突き止めたとして 次はどう編集すればいいんだ? 電文が平文だったらプロキシサーバ経由して修正、暗号だったら暗号化する直前でチートエンジン等で修正じゃね 電文仕様はゲーム毎に違うので分析が必要だね 昔のツールだけどWPE PROってやつDLしてみた ピグやメイプルで使われてたものみたい いわゆるプロキシサーバ兼エディタみたいなやつだね パケット記録できたけどこれを解読しないといけなくて詰んでるわ 今解読しようとしているゲームが個人製作のMMOでクッソ過疎だからどこにも参考記事無いんだわ 有識者求む 暗号化されてないパケットであればビックリするほど簡単 暗号化されてるパケットをプロセスへのアタッチ無しで改竄しようと思ったらビックリするほど難しい プロセスへのアタッチ有りなら暗号化前、復号化後のデータをフックすればいいだけだが >>419 暗号化されてる場合 暗号化前の生データを編集しないとダメ? チートエンジン使って内部send見つける方法の記事見てたが途中でゲーム落ちるから詰んでる Undetected Cheat Engine使えば突破できるらしい 自己解決しました 暗号/復号ロジックがわかっていれば楽かもしれないけど電文いじるのは面倒よ 電文は一発で全文送信できるとは限らないので状況によっては分割されたのを集める必要あり あとはいじった後に電文長が1バイトでも増えたらどうすんの? 暗号解読は諦めてWPE PROで遊ぶことにするわ 同じパケットしか送れないけど意図しないタイミングで送ればお金増やせたりするのかな? 大抵の場合ゲームごと落ちるが >>423 同じ平文生データでもシーケンス番号(何回目の通信か)によって暗号化後のバイナリが変わるケースが多い なので暗号化されてる場合はその手法も大抵は無理 それにお金とかは鯖側で管理されてるはずだから解読できたとしても大抵は無理だよ >>424 一度ログアウトするとまるっきり変わってたな とある記事にマイナスの値を入れるとオーバーフロー起こすみたいな書いてたけどその辺どうよ? >>425 そんなのアプリ次第だろ まあ、そういった想定していない値やチェック漏れがある処理を探してアタックするのが定番のやり方だけどな そもそも暗号わかんないからマイナス値の送りようがないんだけどね 同じパケットを送ってシステムの穴付いたりできるのかな? チートエンジンのデバッガでブレークポイント設定するじゃん? 移動とかアイテム購入とかのアクションする前に固まるんだけどこれ正常動作なの? 設定した箇所が他でも使われてるだけでしょ エンジンによってはどんな処理でも同じルーチン使ってることもあるから、その場合はトレースなりで追いかけないとどうにもならんよ >>429 send関数でやってるんだ これを参考にしてる tps://github.com/Erarnitox/TeraProxy プログラミングとか全く無知なんですけどjavascriptで作られたゲームでチートやろうと思ってて「CookieClickerチートで学ぶJavaScript」ていうサイトを参考にソースコードを見ようとしたら画像みたいにhiddenとかなっててちゃんと見えない こういうサイトのソースコードを見る方法ってないんですか? https://i.imgur.com/AP6aHWt.jpg 逆にvisibleってなってる所は見えるの? つか本体のスクリプトはhtmlの最初のほうで読み込んでるんじゃね? >>432 >>431 の画像の情報しか見えなかったので違いますかね htmlの最初の方っていうのは一個目の画像のことですか? 自分の中のイメージとしては下のコンソールに何かのコマンドを入れて一瞬で経験値999とかにしたいと思ってるんですけど何を入れればいいか分からないんですよね https://i.imgur.com/RcdURhh.png https://i.imgur.com/LWdN4d5.png hiddenの部分はvisibilityに"hidden"という文字列を代入するって意味で何かが暗号化されてたりするわけじゃない だけどそもそもソースコードをすべて読み込むのは最終手段 たとえばクッキーの枚数を増やしたいならこれでじゅうぶん ・クッキーを右クリックして検証 ・右側のイベントリスナータブを選択 ・clickツリーを展開してbutton#bigCookieのmain.js?=v…をクリック ・表示されたコードで怪しい場所を見つける↓ Game.Earn(amount); Game.handmadeCookies+=amount; ・amountの部分を好きな数値に書き換えてコンソールで実行 ガンバレ〜 チートエンジンのスクリプトで スクリプトをONにすると特定のアドレスの値を1 offにすると0 ってスクリプトを考えてるんですけど こういうのでもハックするゲームに存在する命令を改ざんする形じゃないと 設定できないのでしょうか [enable] アドレスorシンボル: db 1 [disable] アドレスorシンボル: db 0 >>436 いやコーディングができないとかの問題じゃなくて ハックするゲームの命令と関係なしのスクリプトは作れないかって問題です >>437 ??? on,off時に特定のアドレスの値を書き換えるだけなら>>436 の書式でいけるでしょ 書き換えたいアドレスが1256da2bでauto assembleで [ENABLE] [1256da2b]: db 1 [DISABLE] [1256da2b]: db 0 と描き込んでexcecuteを押すとnot all instructions could be injected.と出てしまいます。 何が問題でしょうかアセンブリ言語の文法間違ってるとかでしょうか >>442 ありがとうございます これでコード自体はうまくいきました activeのところをクリックして値が変わるのも確認しました ただゲーム内に値変化の影響が反映されません。 値のバイト数とかの問題でしょうか? ごめんなさいメモリの番号間違ってました 直したらうまくいきました。 すごい初歩的な問題だと思いますが質問に応答していただきありがとうございました。 重ねて恐縮ですが質問あります。 動的アドレスの関係で固定アドレスではなくポインタの場合の書式はどうなるか 教えてもらってもよいでしょうか というかアセンブリ言語でポインタ指定って可能なんでしょうか なんか無理そうやな >>440 のアドレスがポインターの場合ってことでいいんよね アドレスが0x00100000でオフセットが0x10、0x08、0x14だったとすると [[[00100000]+10]+08]+14 って感じでいけるハズやで >>448 質問しておきながら直近多忙によりCTに触れていません。ごめんなさい。 https://i.imgur.com/IRNLZnS.jpg 画像のようなポインタなら [[[1257dda0]+b4]+2c]+de でOKということでしょうか? あってる Add Address Manuallyから画像1番上のAddress:の部分に [[[game.exe+00FD2420]+b4]+2c]+de と入力すると同じ結果が得られるはず >>450 遅レスですがうまくいきました これでスクリプトのコードにいちいち動的コード全通り書かなくてもよくなりました ありがとうございます https://i.imgur.com/xx2T9uc.png メモリを見ていると右側の欄にrightfootとかrightuplegとか明らかに意味のある単語がでてきたんですが そもそも右側の欄は何なのでしょうかなんのために必要なのでしょうか どなたかお教えください >>452 左側の16進数をASCIIコードとして表示できる場合は対応した文字を表示しているだけ プログラム内部で使用するパラメータや表示する文字列とかが見える この文字列を参照してるコード調べれば何かわかるかも程度 >>453 わかりました。ありがとうございます。 さらに質問ですがボーンオフセットマトリックスという文字列が表示されるメモリ領域でで8つのアドレスを発見したんですが ボーンオフセットマトリックスの変数って12個だと思うのですが8個の場合もあるんでしょうか 文字列とそれに対応したデータが近いメモリ領域に存在する保証はない >>455 気を付けます。 また>>454 で挙げた8つのアドレスですが浮動小数点表現(どうやらIEEE754とのこと)で2つの変数なのがわかりました。 それで、その変数を弄りたいのですが 浮動小数点表現の変数を変換する際スクリプトはどのように書けばいいか分かる方いらっしゃいませんか? なお対象となる変数は 0は00 00 00 00 1は00 00 80 3f と数字の順序が逆に書かれています。 >>457 アドレスの指定は一番左側に表示されてる数字でいいんでしょうか 1なら 00 00 80 3f ↑ この”00”をアドレスで指定する感じでOKですか? 自分で試してみればいいんじゃね 失敗した時に教えた人のせいにできないとダメなん? >>420 俺の記事でも読んでくれたのかな? 暗号化する関数に生データ渡される時に別のデータとすり替えると楽に任意のパケット送信できる >>459 できました。 ありがとうございました。 ボーンを(正確にはボーンオフセット行列を)いじるスクリプトを考えているのですが 人間による入力は角度(°)で、メモリの修正はサインorコサインの値で、などといった形はできますか? できるのであればどうすればよいでしょうか まずは表示する値と実際に入れる値の組でプルダウンメニュー作って選択された項目を設定するとかやってみれば? 角度決めうちならLua書かなくてもいけるかも 慣れてきたら機能追加すればいいと思う >>465 チートエンジンのフォームの話ですよね? とりあえずフォーム作成でかなり挫けてます。 というのもフォーム作成について解説してくれてるサイトがあんまりなくて。 ここ参考にすればいいとか何かあれば教えてください。 とりあえずチートエンジンwikiにあったチュートリアルをしたことで おぼつかないもののフォームを作成することができ、残りはコーディング部分になりました。 ただ ハックしたいゲームのメモリのアドレスの値を読み取る方法と、指定したアドレスに値を書きこむ方法 がそもそもわからずコーディングできません。 どうすればそれらができるようになるでしょうか ハックしたいゲームのメモリのアドレスの値を読み取る方法と、指定したアドレスに値を書き込む方法については、チートエンジンwikiに詳しい説明があります。 メモリのアドレスの値を読み取る方法は、チートエンジンのメインページにある「Cheat Engine: Value Types」や「Pointers」などのセクションを参照してください。 指定したアドレスに値を書き込む方法は、チートエンジンのメインページにある「Auto Assembler」や「Code injection」などのセクションを参照してください。 また、チートエンジンを使用する方法については、wikiHowにも分かりやすい記事がありますので、参考にしてみてください。 >>468 txtファイルに書かれている関数を使って writeFloat([game.exe+01016E44]+600,0) を最後の行に付け加えて構文チェックをすると ..."]:1052: unexpected symbol near '[' とでます。 ぐぐってみると「lua言語で変数名に使用してはいけない記号を使用した際に発生します。」 とあるのですがこれはどういうことなんでしょうか[]を使えないってのはおかしいとは思うのですが 予めgame.exeが何なのかとかコードを書く必要があるんでしょうか lua言語では、writeFloatという関数は標準ではありません。 おそらく、あなたが使っているゲームやライブラリが提供しているものだと思います。その場合、その関数の正しい使い方を確認する必要があります。 一般的には、[]を使ってインデックスを指定する場合、その前にはテーブル名が必要です。例えば、t[1]という書き方はテーブルtの1番目の要素を表します。しかし、[game.exe+01016E44]+600という書き方はテーブル名がありません。もしかしたら、これはメモリアドレスを指定しているのかもしれませんが、luaでは直接メモリアドレスにアクセスすることはできません。 もし、writeFloat関数がメモリアドレスに対応しているとしても、[]ではなく()を使って引数を渡す必要があります。例えば、writeFloat((game.exe+01016E44)+600,0)というようにです。 ダブルクォートかシングルクォートでアドレスの部分をくくってみては? writeFloat("[game.exe+01016E44]+600",0) >>471 []を()に変更した所構文エラーはなくなりました(txtファイルの説明からもおそらくメモリアドレスに対応していると思われます) それでスクリプトを実行した所 Error:[string " ..."]:4: attempt to index a nil value (global 'game') とでました。ぐぐった所スコープ?が悪いとでました。 おそらくgame.exeがグローバル変数と解釈された?と思われます。 writefload関数の使い方がおかしいのかと思い確認しましたが writeFloat(v: single): float をパイプに書き込みます。 送信されたバイト数を返し、失敗した場合は nil を返します writeFloat(address,value) : 指定されたアドレスに単精度浮動小数点を書き込みます。 成功時に true を返します writeFloatLocal(address,value) : CE のメモリ内の指定されたアドレスに単精度浮動小数点を書き込みます。 成功時に true を返します >>468 さん が言ってたcaluaに載ってる内容なのでチートエンジン的にはすでに実装されている関数であり 説明から見るにwritefloat(,)関数なのは間違いなく、使い方が 途中で切れてしましました 説明から見るにwritefloat(,)関数なのは間違いなく、使い方が問題だったのではと思っています。 どう修正すればいいでしょうか function UDF1_1_CEToggleBox1Click(sender) print(tostring(writefloat)) writeFloat("[game.exe+01016E44]+600",-0.5) end で >>473 さんの言う通りにしてみた所 うまくいきました!(なんで上手くいったかは全然わかりませんが) ありがとうございます 失礼しました >>472 さんの間違いです function UDF1_1_CEToggleBox1Click(sender) print(tostring(writefloat)) writeFloat("[game.exe+01016E44]+600",-0.5) end で >>473 さんの言う通りにしてみた所 うまくいきました!(なんで上手くいったかは全然わかりませんが) ありがとうございます luaのパーサーは標準のやつでブラケット使うアドレス表現は解釈できないってこと? 一旦、文字列引数として受け取って、CEのアドレス表現として評価してるのかな? luaはC#の方言って感じだからC#の文法にないことは出来ない そういうこと フォームでeditに書かれてる値を読み込むコードを書きたいんですけど どんな関数使えばいいですか? 正直lua使っていくならいちいちここで質問せずにサイトやら書籍使って勉強したほうがいいよ lua自体はそんな難しいプログラミング言語じゃないし luaと言うかCEでの作法を覚えるしかないと思うぞ GUI部品とか親フォームからたどっていったり、ID指定で取ってくるとか複数のやりかたがあったはず フォーラムのコードとか見れば大体解決する >>479 function UDF1_1_CEToggleBox4Click(sender) print(tostring(writefloat)) print(tostring(readfloat)) writeFloat("[game.exe+01016E44]+5d0",math.cos(math.rad(UDF1_1.CEEdit1.text))) writeFloat("[game.exe+01016E44]+5f8",math.cos(math.rad(UDF1_1.CEEdit1.text))) writeFloat("[game.exe+01016E44]+5d8",math.sin(math.rad(UDF1_1.CEEdit1.text))) writeFloat("[game.exe+01016E44]+5f0",-math.sin(math.rad(UDF1_1.CEEdit1.text))) writeFloat("[game.exe+01016E44]+5d8",readFloat("[game.exe+01016E44]+5d8")*UDF1_1.CEEdit2.text) writeFloat("[game.exe+01016E44]+5f8",readFloat("[game.exe+01016E44]+5f8")*UDF1_1.CEEdit2.text) end 大体こんな感じで ・editに書かれてる値をアドレスに書きこむ ・editに書かれている値の数をかける はできるようになりました。 ご協力ありがとうございます。 行列演算したいんですけど 場合によっては作成したCTファイルを配布する前提(なお作っているCTファイルはオンラインで迷惑行為をするようなものではありません)なので torchみたいな外部ライブラリをDLせずに演算できるようにしたいです。 どうすれば良いでしょうか。 こども電話相談室みたいになってきたなw 外部ライブラリはライセンスに従って自分のEXEと一緒に再配布しちゃえばいいんじゃね? EXEにしても中ではluaのインタプリタで動くので演算速度のメリットはなく、高速な外部ライブラリキックしたほうが断然速い >>485 torchというライブラリの導入方法がわからいのもあり とりあえず自分で行列計算のメソッドを書いてみたんですが これであってますか? matrix = {} for i = 1, 3 do matrix[i] = {} for j = 1, 3 do matrix[i][j] = 0 end end function matrix_mul(A,B) local C ={} for i =1,3 for j = 1,3 C[i][j]=A[i][1]*B[1][j]+A[i][2]*B[2][j]+A[i][3]*B[3][j] end end 結局 function matrix_mul(A,B) local C ={{0, 0, 0},{0, 0, 0},{0, 0, 0}} for i =1,3 do for j = 1,3 do C[i][j]=A[i][1]*B[1][j]+A[i][2]*B[2][j]+A[i][3]*B[3][j] end end return C end で行列の計算ができるようになりました いちいち型指定するのにゼロをいれないといけないのが不便 大体コード部分はできたんですけど 作っているフォームのパネルやエディット、ボタンなどを コピーアンドペーストして複数設置するようにするにはどうしたらよいでしょうか https://i.imgur.com/VyG7mjl.jpg こんな感じですね >>489 右クリックでこんな感じになります https://i.imgur.com/VzomFLl.jpg ctrl+c→ctrl+pでいけると私も思ったんですけど うまくいかなかったです object inspector見ればコピペした後に部品増えてんだろ? 同じ位置に出て気付かないだけで >>491 ツリー上の所を見ても増えてないです。 チュートリアルにもctrl+c ctrl+pで複製しろみたいな事書かれているので できるはずなんですけど… ショートカット使えないならあきらめ フォームをファイルに書き出して編集、必要な部品コピペして部品IDユニークになるように書き換え、再読み込みとか泥臭いやつでもやってみれば >>490 気になるから何のゲームか教えてくれませんか チートエンジンでスクリプトをオンにするとフォームが起動して オフにするとフォームが消えるようにするにはどうすればいいですか? m_default_right_breast_tip={{0, 0, 0},{0, 0, 0},{0, 0, 0}} v_default_right_breast_tip={0, 0, 0} set_this_matrix_as_default(offset_right_breast_tip,m_default_right_breast_tip,v_default_right_breast_tip,…略 function return_to_the_default(offset, m_default, v_default, text1,text2,text3,text4,text5, text6,text7,text8,text9,text10, text11,text12,text13,text14,text15) print(tostring(writefloat)) writeFloat("[game.exe+01016E44]+offset+0",m_default[1][1]) writeFloat("[game.exe+01016E44]+offset+4",m_default[1][2]) writeFloat("[game.exe+01016E44]+offset+8",m_default[1][3]) writeFloat("[game.exe+01016E44]+offset+10",m_default[2][1]) writeFloat("[game.exe+01016E44]+offset+14",m_default[2][2]) writeFloat("[game.exe+01016E44]+offset+18",m_default[2][3]) writeFloat("[game.exe+01016E44]+offset+20",m_default[3][1]) writeFloat("[game.exe+01016E44]+offset+24",m_default[3][2]) writeFloat("[game.exe+01016E44]+offset+28",m_default[3][3]) writeFloat("[game.exe+01016E44]+offset+30",v_default[1]) writeFloat("[game.exe+01016E44]+offset+34",v_default[2]) writeFloat("[game.exe+01016E44]+offset+38",v_default[3]) ・・・・(省略) end みたいな形でコードを書くと attempt to index a nil value (local 'm_default') と出るんですがfunctionの変数に行列を入れた場合行列の成分を使うのできないってことですか? まとめ方が下手だな・・・ matrix_a={{0, 0, 0},{0, 0, 0},{0, 0, 0}} で function X(matrix) print(matrix_a[1][1]) end の時 X(matrix_a) を実行できますか? ということです 1. チートエンジンのメインウインドウから、「Table->Show Cheat Engine Lua Script」をクリックしてください 2. スクリプトウインドウで、フォームを作成するコードを記述します ``` -- フォームの変数を作成 local form = createForm(false) -- falseはフォームが自動的に表示されないことを意味する -- フォームのタイトルやサイズなどを設定 form.Caption = "My Form" form.Width = 300 form.Height = 200 -- フォームにボタンやラベルなどのコントロールを追加 local button = createButton(form) button.Caption = "Click Me" button.Left = 100 button.Top = 50 local label = createLabel(form) label.Caption = "Hello World" label.Left = 100 label.Top = 100 ``` 3. スクリプトウインドウで、スクリプトを有効化したときにフォームを表示し、無効化したときにフォームを非表示にするコードを記述します コード書いたらNGワードになるから頑張って書いて 4. スクリプトウインドウで、「Execute Script」ボタンを押してスクリプトを実行します 5. チートテーブルのスクリプトエントリーのチェックボックスをオンにすると、フォームが起動し、オフにするとフォームが消えるはずです >>499 スクリプトに [enabe] (フォーム名).show() [disable] (フォーム名).hide() じゃだめってことですか? >>501 それでもできると思います ただし、フォームのインスタンスを作成する必要があります例えば、以下のようなコードです local form -- フォームの変数 [ENABLE] form = createForm(false) -- フォームのインスタンスを作成 form.loadFromTable(cheatForm) -- チートテーブルに保存したフォームを読み込む form.show() -- フォームを表示する [DISABLE] form.hide() -- フォームを隠す local form = createForm(false) で変数の型を指定してみて local form = createForm(false) がコンパイルできないって出ました… というかluaって変数の型指定って具体的な代入以外でできましたっけ? luaは変数の型指定は必要ありませんが、変数のスコープを指定するためにlocalを使います Luaでは変数の型は動的に割り当てられるため、必要に応じて異なる型の値を割り当てることができ もしかしたら、createForm関数が定義されていない可能性があります >>506 私が使用しているcheatengineはヴァージョン7.5で 以前ここでcelua.txtに使える関数が載ってると言われたので 確認しましたが createForm(visible OPT): creates a CEForm class object(window) and returns the pointer for it. Visible is default true but can be changed とあったの定義されてるはず…なんですけどどういうことなんでしょうか… pythonとかだと〇〇のライブラリ呼び出しますみたいな一文書きますけど luaにも必要なんでしょうか こんなんで動くんじゃね? {$lua} local form = nil {$asm} [ENABLE] {$lua} if form == nil then form = createForm(True) end form.show() [DISABLE] {$lua} if form ~= nil then form.hide() end フォームを✕ボタンで閉じちゃったりすると動かなくなるので、formがnilじゃなくても表示されてるか閉じられたformなのか判定する必要がありそう フォーム閉じるタイミングのコールバックがあれば何かするとか >>509 form.loadFromTable(cheatForm) 挟んでないのに行けるの?…と思いながらも 実行したらいけました。 というか [enable] {$lua} (ォーム名)a.show() [DISABLE] {$lua} (フォーム名).hide() でいけました。 >>508 さんの言う通りでした。 {$lua}つけなくてもフォームのコーディングとか他人配布のCTファイルのスクリプトははいけたのになんで?ってなりました。 とりあえずよくわかんない時は{$lua}つけた方がいいんでしょうか >>511 そりゃ<LuaScript>の中に書いてりゃLuaってわかるけど、<AssemblerScrip>の中だと{$asm}が前提になってるから{$lua}って明示する必要があっるてだけじゃね? >>512 あぁなるほど すごく初歩的な質問ですいませんでした。 チートエンジンウィキのチュートリアルにはまったく書かれてない内容なんだけど チートエンジンのチュートリアルが不親切すぎるのか、ここが相当親切なのか… function f1 (text1,text2) text1=0 text2=1 end function ……Click(sender) f1(form.CEEdit1.text1,form.CEEdit1.text2) end みたいなコードを書いて該当のフォームをでクリックしてもform.CEEdit1.text、form.CEEdit2.textの値が変わらないんですけど(しかもエラーはでない) 問題はプログラミング部分でしょうかコーディング部分でしょうか 言語仕様よく知らんが、文字列や数値だと値がコピーされて値渡しになってんじゃね? Editのようなオブジェクト渡せば参照渡ししてくれんじゃね? >>515 それだ!と思ったのですが調べた見たところオブジェクトは参照渡ししかできないようなので 違うと思います。 オブジェクト 以下の型は オブジェクト である テーブル Luaのテーブルは動的に確保された オブジェクト 関数 スレッド ユーザーデータ オブジェクトは変数の格納されず、参照されるのみである 代入、引数渡し、関数の返り値は、コピーではなく参照が渡される テーブルついて Cheat Engine Forumで聞いてみ Google翻訳でなんとかなるで form.CEEdit16.text=10000 →フォームの数字が1万になる function f1(text1) text1=10000 end f1(form.CEEdit16.text) →フォームの数字が変わらない 実験して上記の通りになったんで 本来オブジェクトは参照渡しのはずなのに参照渡しされないっぽいです。 >>517 そっちにも聞いてみます。 すごい初歩的で致命的なバグが放置されていたんだね ヒーローになれるかもしれませんね >>519 どうも書き換えるだけでなく読み込む方でも関数の引数にeditオブジェクト使えないっぽいんで やっぱeditオブジェクトのバグなのかなぁと思ったりもします。 はーチュートリアルに実装されてない機能使えとかあったり フォームはコピペすらできないし コードに{$lua}って書いてなかったり(チュートリアルに書かれてあるコードだとコンパイルすらできない) editオブジェクトは引数に使えなかったり ゴミすぎんだろCE…… forumで効いたら unction f1(text1) text1.text=10000 end f1(form.CEEdit16) とのことでした。 型指定とかゆるゆるなのにこういうところは厳しいのか… writeFloat("[game.exe+01016E44]+660",v_default[1]+text1.text/1000) でうまくいくのですが、後の改変に備えてモジュール化したいので offset=0x630 writeFloat("[game.exe+01016E44]+offset+30",v_default[1]+text1.text/1000) としたらうまくいきません。 どうすればよいでしょうか? >>524 630+30で660では? readFloat("[game.exe+01016E44]+5d0")では狙い通りのアドレスの値を読み込んでいるため writeFloat("[game.exe+01016E44]+660",v_default[1]+text1.text/1000) の+660の部分は+0x660であり+630+30に変えても問題ないため >>523 と判断しました。 んで結局うまく行ってないです。 10進数と16進数で違うが合ってると判断してるのなら原因わからんわ すまんな >>526 いえ、相談にのって頂きありがとうございました。 改めて検証した所こうなりました。 writeFloat("[game.exe+01016E44]+660",v_default[1]+text1.text/1000) →うまくいく writeFloat("[game.exe+01016E44]+0x630+0x30",v_default[1]+text1.text/1000) →うまくいく offset_1=0x630 writeFloat("[game.exe+01016E44]+offset_1+0x30",v_default[1]+text1.text/1000) →うまくいく function f2(offset) writeFloat("[game.exe+01016E44]+offset+0x30",v_default[1]+text1.text/1000) end offset_1=0x630 f2(offset_1) →うまくいかない(errorはでない) うまくいかない理由が分かる方いらっしゃいませんか? 開発者に向かってstupidは草 文句だけじゃなくて改善案くらい一緒に書いとけよw 自分で暗に文字列はオブジェクトじゃないとか言っておきながら参照渡しにならないって文句いってるのも草だよな ipアドレスばれてるだろうから、日本人アホだと思われてるぞ >>527 さらに検証して function f2(offset) local o1=offset writeFloat("[game.exe+01016E44]+o1+0x30",v_default[1]+text1.text/1000) end offset_1=0x630 f2(offset_1) →うまくいく でうまくいきました。マジでなんで。 本当に意味不明ですがとりあえず目的は達成しました。 function f1(offset,vector) local o1 =offset vector[1]=readFloat("[game.exe+01016E44]+o1+30") end vector1={0, 0, 0} offset1=0x630 f1(offset1,vctor1) →うまくいかない ためしに下記をしてみると function f2(offset,vector) local o1 =offset vector[1]=readFloat("[game.exe+01016E44]+o1+30") print(vector[1]) print(vector1[1]) end vector1={0, 0, 0} offset1=0x630 f1(offset1,vector1) → 0.086963586509228 0 で(本来参照渡しであるはずなのに)値渡し状態になってることがわかったんですけど これどうすればいいでしょうか。 コンパイル必要な言語だとf2の中に出てくるvector1って未定義なんでエラーになるんじゃね? luaが未定義だからよろしくやってくれて0にしてるとかじゃね? その書き方だったらf2の前にvector1宣言しとくべきじゃね? 値渡しになってっるってのであれば、f2でreturnして、その値を受け取りゃいいだけじゃね? readFloatとwriteFloatは内部で文字列を解釈してる そもそもluaの変数名を入れて動いてる事自体が奇跡 たぶんローカル変数しか解釈できないんじゃないの local address = string.format("[game.exe+0x01016E44]+0x%X+0x30", offset) local result = readFloat(address) こうすれば絶対動く 覚えたてのcall by referenceって言いたいだけとか? call by valueだったとすると型がわからないから何をどこまでコピーすればいいかのコストが高そうな気がする >>534 cheatengineformで >>534 さんの言う通りだと教えてもらいました。 >>534 さんのコードの方が私のより可読性が高いものの行数が増えるなぁどうしようと思っていた所、 function f2(offset) writeFloat(readPointer"game.exe+01016E44"+offset+0x30,v_default[1]+text1.text/1000) end というコードを教えてもらいました。一番シンプルでわかりやすいのでこれでいこうと思います。 こんな適当なことしか言わない所で聞かずに本家に行ったほうがいいんじゃね? >>532 この件ですが function f1(offset,vector) vector={0, 0, 0} vector[1]=readFloat(readPointer("game.exe+01016E44")+offset+0x30) end vector1={0, 0, 0} offset1=0x630 f1(offset1,vctor1) →うまくいかない ってのが正しくて試しに function f3(offset,vector) vector[1]=readFloat(readPointer("game.exe+01016E44")+offset+0x30) end vector1={0, 0, 0} offset1=0x630 f1(offset1,vctor1) →うまくいく となりました。 関数内で引数の型指定のためにゼロベクトルを代入していたのを辞めた結果うまくいくようになったのですが、 これはどういうことなんでしょうか。ゼロベクトルを代入した結果、vectorとvector1の関係が切れたと見て いいんでしょうか 別オブジェクトの参照で上書きしちゃったんで元オブジェクトが書き変わらないのは当然じゃね? >>539 ということは function f1(offset,vector) vector[1]=0 vector[2]=0 vector[3]=0 vector[1]=readFloat(readPointer("game.exe+01016E44")+offset+0x30) end vector1={0, 0, 0} offset1=0x630 f1(offset1,vctor1) だとうまくいくということでしょうか。 さらに言えばvector={0, 0, 0}は単純に値を書き換えるという意味ではない何かで vector[1]=0は単純に値を書き換えるという意味でしょうか python辺りだと一括代入できて楽なんだけどめんどくさい感ある Python知らんけどLuaでも{0, 0, 0}で初期化された新しいオブジェクト(インスタンス)作ってんじゃねーの? 一括代入っつーなら長さ10くらいの配列に{0, 0, 0}代入して配列の長さ確認してみりゃいいだけじゃね? CEだとオブジェクトのアドレス表示できない? アドレス比較はできるのでどんな結果になるか確認してみれば? a={0, 0, 0} b=a if a == b then print("1") end b[1]=1 if a == b then print("2") end b={0, 0, 0} if a == b then print("3") end >>542 さんのを実行すると 1 2 とでました。また a=0 b=a if a == b then print("1") end b=1 if a == b then print("2") end b=c if a == b then print("3") end を実行すると 1 とでました。ということは基本的に代入すると参照関係が切れるけど 配列の成分に値を入れる場合は特別に参照関係が切れないということで いいんでしょうか。 ただ単に参照って言いたかっただけで実際は何もわかっていなかった人で草 オブジェクトの変数は簡単に言うとデータが入ってるメモリの先頭アドレス 配列の各要素は先頭アドレスからのオフセットでアクセスする(正確には違うけど) その変数に別データの先頭アドレス入れちゃったらどうなるよ?ってことだよ あとは、自分で試したのがオブジェクトじゃなくて数値使ってるのも理解できてない証拠 そこはb=cじゃなくてb=0だろ >>544 >オブジェクトの変数は簡単に言うとデータが入ってるメモリの先頭アドレス >配列の各要素は先頭アドレスからのオフセットでアクセスする(正確には違うけど) それとb=1をするとbとaの参照関係切れる切れない関係なくないですか? 配列の構造についての解説自体はありがたいですが… 論点ずらすなよ オブジェクトの話してんのにb=1とか値の話を持ち込んで混乱させてるのはそっちだろ a={0,0,0}って内部では下のような処理してる a={} ←どこかのメモリを新規に確保、aにアドレス返す、仮にaddr1とする a[1]=0 ←writeFloat(addr1+offset+0, 0) a[2]=0 ←writeFloat(addr1+offset+4, 0) a[3]=0 ←writeFloat(addr1+offset+8, 0) b=a ←bにもaの参照であるアドレスaddr1が入る b[1]=1 ←writeFloat(addr1+offset+0, 1) ここでは参照先のアドレスaddr1の指す先のデータ書き換えてるだけで、bのアドレス変える操作しとらんだろ? b={0,0,0} ←aと同じように新規にメモリ確保、別メモリなのでaddr1とは違うaddr2がbに入る ここでbはaの参照ではなく別データの参照に置き換わったってだけ 参照切れたとか言ってるけど参照切ってるのは君が書いたコード 参照って君が思ってるような選ばれた人しか使えないような高度な考えじゃなくて単なるデータが格納されているメモリのアドレスを指してるだけのものだよ? >>546 じゃあ結局基本基本的に代入すると参照関係が切れるけど 配列の成分に値を入れる場合は特別に参照関係が切れないということですね あと配列のパターンじゃなくて b=1などの数値のパターンだとどうなるんですか? 基本的とか特別って何だよ? 配列の要素に値を設定する処理はbが指してるアドレスにあるデータを更新してるだけで、b自身のアドレスは変更してないだろ? もう数値とか参照関係ないだろ? 値がコピーされるだけで変数の間には何の関係もない 参照になるのはオブジェクトだけって自分で言ってただろ >>549 じゃあ結局代入すると参照関係が切れるけど 配列の成分に値を入れる場合は参照関係が切れないということですね b=1の場合でもメモリ確保して1の値がそこで保持されてb自体にはアドレスを返す であってますか? lua言語の実装としてはデータの入ったアドレスとして管理してるんだろうよ 処理の中で変数bに数値入れたの知ってるから、変数bが指定されたら数値で返してるってだけ 使う側としては0入れたのにアドレスの数値が入ってたらおかしいだろ? もう悔しくて屁理屈こねて突っ掛かってるだけにしか見えんよ ソース読めば仕様もバグも全て書かれてるよ >>550 実装によるとしか言えない いちいち4バイトのメモリを確保してアドレスを保持しているかもしれないし 4バイトではなく8バイトかもしれないし スタックに保持しているかもしれないし 起動時に予め確保しておいたメモリ領域を使っているかもしれないし 高速化のためにメモリを使わずにレジスタだけを使っているかもしれない わからんけど動けばよくね lua実装側の変数のメモリ管理とlua利用側の変数の見え方が混乱しているっぽい あとは参照というキーワードにこだわりを持ってる >>552 実装によるというのは実行するアプリ(この場合ではcheatengine)という意味ですか? 君は実装とか言い出す前にluaの言語仕様理解しなさい 実装知りたかったらソース読みなさい >>555 質問を読み直してみたけど変数はすべてアドレスの別名だと思って構わない aという変数を宣言するとLuaが勝手に0x1000000を割り当ててくれるみたいな その前提があったうえで、さらにaがテーブルの場合は0x1000000に実データが存在する別のアドレス0x2000000を書き込むということ 0x1000000にすべてのデータを書き込めばいいと思うかもしれない けど0x1000004にはbという変数が割り当てられてるかもしれないから、そのばあい上書きすることになる そして上書きを避けるために代入のたびに再割当てをすると処理が重くなってしまう だから妥協の結果としてテーブルの代入で奇妙な挙動が生まれる 直感どおりの代入がしたいならDeepcopyで調べるといい たしかPythonも同じ問題を抱えてたはず 質問に答え忘れてたからもうひとつ >>555 そう けどテーブル代入の奇妙な振る舞いを理解するためにはそこまで考える必要はない c++でメモリにアクセスして、 敵の情報を取得し、 そのあとメモリを書き換えて視点を移動させる。 コードは教えれないけどそんな感じでチート作れまっせ >>557 deepとかshallowとかの話じゃない テーブルを関数に渡して、引数の変数を関数内で{0,0,0}で初期化したら呼び出し元に反映されなくなったってのが始まり その引数をbとすると、b={0,0,0}の代入では参照無くなるのに同じ代入のb[1]=1をすると呼び出し元にも反映されるが違いが理解できないって話 そこで変数はアドレスだという話をしたら、参照は関係ない数値の話を持ち出して数値の変数もアドレスなら~みたいなluaとしての振る舞いと実装が入り雑じった話になってる なるほどね こだわりがないならreturnに返り値を乗せて呼び出し元で代入すればいい どうしても参照渡しがしたいならこうするとか? function f(offset, pVector) pVector[1] = {0,0,0} pVector[1][1]=readFloat(readPointer("game.exe+01016E44")+offset+0x30) end offset1 = 0x630 vector1 = {0, 0, 0} f(offset1, {vector1}) 今テストできる環境にいないから動くか知らんけど >>560 質問した側がこういうのも失礼なのは承知してますが あなたはもう質問に応えないでください。 自然言語でのコミュニケーションに難があるのか、質問が終わって次の質問に移行したことを理解してないし 藁人形論法で私のレスを歪曲した上で罵倒してくるのは不愉快です(参照参照一番わめいてるのはあなた自身であることに気付きましょう) 色々ためになった部分がありますが意思疎通が困難でとてもしんどいのでもうこれ以上反応して頂かなくても結構です。 こんにちは。androidエミュレータでCheatEngineのデバッグに成功した方いますか? windows10環境でCheatEngine7.5のデバッガをbluestacks5(nougat 32bit)で起動している fgoというアプリにアタッチしても、設定したブレークポイントで止まりません。 そこで、 https://www.cheatengine.org/forum/viewtopic.php?t=587796&sid=f96bbe572780137c660fc96f23d51099 このサイトの通りにroot化したbluestacks側でceserverX86を起動し、windows側の チートエンジンからネットワーク越しにfgoのプロセスを開きました。メモリスキャン&書き換えは ceserver非使用時同様問題なくできます。しかしデバッガをアタッチするとfgoがクラッシュします。 ceserverのログはptrace errorなどがでます。 ceserverArm32などすべてのバージョンを試しましたが、デバッグアタッチ時に 今度は全部のレジスタが使われているなどのエラーがでます。有識者いますでしょうか? >>566 続きです。 チートエンジンのデバッガの種類を変更したりはしました。 色々調べているとバージョンによってうまくいくいかないがあるそうです。 また、自分でCEサーバーをコンパイルして成功した人もいるようです。 レジスタall usedエラーはANDROID実機では起きず、仮想CPUだから起きるとの見解もありました。 しかし上記サイトの人は間違いなくエミュレータで成功してます。 これからceserverを自分でビルドしたものに変更したり、 過去のチートエンジン、サーバーのバージョンに変えたり、 androidバージョンを9や11に変えたりしようとは思っています。 最悪安い実機の購入も考えてます。 最近チートエンジンに手を出したので色々手探りでやってますが、わかる方いましたら是非教えてほしいです。 どうやって成功しました? 自分も過去にやってうまくいかなかったのでよければ教えてください >>569 >>569 結局実機買いました。pixel 3a中古整備品です。amazonだと13000円で買えます。やはりレジスタused errorは仮想CPUが原因でした。あとpixel3-aはarm64なのでサーバもarm64を起動します。アドレス参照、書き込み、ブレークポイントでちゃんと止まってレジスタも見れます。あとandroid10ではroot取ってもsystemに書き込めなかったので9にダウングレードしました。 https pwnyourphone.com/ このサイトのツールはandroid10以降のデバイスでsystemの書き込み権限を取るツールなのですが、結構色々頑張っても無理でした。開発者に聞いても無理でした。成功デバイスリストがあるんですけど大体XiaomiかGaraxyです。開発者の回答「HUAWEI などを使用していない限り、Android 9 には悪名高いshared_blocks 読み取り専用機能も EROFS (拡張読み取り専用ファイル システム) も、私の知る限りではありません。」とのことです。なので実機を買う場合はandroid9対応、もしくは10なら上記のセキュリティを突破できるデバイスでないとceserver起動できないかもです。 ポインターを指定する際にマイナスのオフセットってありえますか? ありえるのであればどういうデータ構造だとありえるんですか? https://yu-nix.com/archives/c-struct-array/ 構造体の配列自体はここでわかったんだけど 構造体の葉いt列がメモリーにどのように格納されるかとかは どこら辺のサイトで勉強したらいいですか? データサイズ的に奇数になるような構造体だと分かりやすいね 自分でサンプル書いてアドレスや内容ダンプするのが理解が早いな sizeof使ってみれば一発でわかるし 構造体の配列自体はなんとなく メモリアライメント自体はある程度きちんと 理解しました。ただこれらがどうマイナスのオフセットに繋がるかよくわかりませんでした。ごめんなさい。 あと別件ですが12*7*4byte=336byteのメモリの状態をネット掲示板でたやすく交換できるような シリアルコード的な短い暗号にする方法って何かありませんか? Linked listとか? Base64とかBase85とかBase65536とか すいません間違えました 14*12個のfloatなんで672byteです >>579 >base85 アスキーコード これでやってみます >>571 返信遅れましたが詳しくありがとうございます 参考にさせてもらいます チートエンジンのCEMファイルってどういうものなんですか? 初心者はツールに頼る前にCとアセンブラ勉強すれば? 仮想マシンでイチから入れればセットアップも躓かないでしょ。 C: VisualStudioとMSVC++ アセンブラ: Netwide Assembler (godbolt.orgでC->ASMがどうなるか見れる。) Practical Malwareナンチャラとか、ゴミみたいな日本語の教材(ツールの貧相な紹介)みたいな低レベルの本読むからいかん。 実践て書いてある本は矛盾してることに気づけ。言語の教本(ネットでも良いやつは探せる)読んで自分で始めるのが一番。 Cの構文、ポインタの概念、アセンブラは3、4文字でできた単語と代入の方向、副作用を覚えるだけ。 小学校でYes, It is a pen.だとか、ヨウ素がでんぷんと...ってのを順番に覚えるのと何も変わらん。 "The importance of small steps"って調べてみ。 1から10知るなんて誰も出来ないよ。興味があるから1から10まで全部覚えるだけ。 以上が理解できないなら向いてない。分かってるならそのうちできるようになるから頑張れ。 ところで >>0572 そのポインタより手前に有効なデータがあるならいつでもそうできるんじゃない? だから、継承とかリンクトリスト、構造体の配列なんかはそうなるかもしれないね。 アセンブラ読んでてそれがでてきたなら、コンパイラがそうしたかったとしか。 例えば、int * hoge = &fuga->b;だと、fugaのbはhoge[-1]で触るとかね。 >>585 の安価より下が >>572 への返信ね。 バカすぎて安価の書き方間違えた。 > 例えば、int * hoge = &fuga->b;だと、fugaのbはhoge[-1]で触るとかね。 あとfugaのbじゃなくてfugaのa。頭回ってないなぁ... 連投ごめんね まぁボチボチ調べながらやってます。 話は変わりますが 浮動小数点の演算で、任意の小数を引数にした演算、を考えているのですが 誤差が出にくい演算のコーディングのコツってありますか? なるべく整数演算にするってのは常道だとは思いますが今回考えているのは 任意の小数を引数にした演算なのでそれ以外の方法でコツ があれば教えてください >>588 スレチだしそのくらいググレカス。 精度は型に依るので、単、倍、四倍と扱える桁数は変わってくる。 そもそも小数精度の意味間違えてる。最初から0.9100..00じゃなくて0.91000035..82みたいなのを扱えばズレるわけで。コーディングとかの問題じゃあない。 高精度な浮動小数点を自前で実装するしかないね。 リサーチ癖付けな〜 Javaが使えるならプロセス間通信で引数を受け取ってBigDecimalで計算して返すツールを作って常駐させればよさそう 結果を浮動小数点に落とし込むまでは誤差ゼロ 処理速度はだいぶ犠牲になるだろうけど >>590 別に任意精度小数はJavaの専売じゃないからどの言語にも実装はあるよ… あとどっちも浮動小数点ね。2進数に落とし込むまでは、が正解。 自分が重箱したいだけだけど、"演算のコーディングのコツ"と聞かれたら計算そのものの話。 >>588 はそもそも自分が何をしてるのか理解してないから日本語もガタガタ。 チート板で聞くような用途でそんな精度いらないと思うけどね。 よく知らないけどその手の演算ライブラリのDLLをCEのプロセスにロードしてAPI叩くのでは? https://i.imgur.com/rucp8CW.jpg コンポーネントの並びの順序を変更するにはどうすればいいですか? 有効数字は変わらんって言えばいいことをそこまでぐだぐだいう奴が”日本語がガタガタ”笑 ツリーはグループとか階層確認だけっぽいけどな 一番裏側の部品から順番に最前面へ持ってけば希望通りに並ぶと思うぞ あとはフォーム情報のファイル直接いじればZオーダー書いてあるんじゃねーか? コーディングや計算の段階で誤差が出ると思う奴に"二進数の浮動小数点を使うなら有効桁は変わらないよ"とだけ言って正しく伝わるならそうする。 >>588 にそこまで理解力あるならとっくに脱初心者してるんだよなぁ…>>594 は人に教えるのうまいでちゅね〜ありがとう〜 >>595 一応できたっぽいんですけど bring to frontで後ろに来て send to backで前に来る上、 即時反映はされず一旦エディットモードを終わらせないと反映されませんでした。 これって仕様なんですかね? 自分より出来ない奴を見下してマウント取るのに必死で草 リアルでも後輩社員にこんな感じで接してるんやろなぁ 言葉の定義にこだわってる感じ社会人というより情報学科の一年生とかだろ そいつに限らず細かいこと気にしすぎなやつ多すぎ チーターはチーターらしく結果をでっち上げることだけに専念すればいいのに >>596 すいませんがそういうのはスレチです ここはチート初心者スレなんで そういうレスはコミュニケーション初心者スレとかでお願いします 三國無双に似たオフラインゲームで チートコードを作りたいんだけど知見がある方いれば教えて。。 やりたいことは外伝限定で操作出来るキャラを本編で操作したい。 この場合「誰を操作するか」という情報と 外伝キャラクターのidを特定する必要があると思うんだけど、どうやって特定すれば良いのか、そもそもこの考え方が合ってるのか分からなくて。 因みにドラッグオンドラグーン3っていうPS3のゲーム 専ブラ停止で人がいるかわからんけども 公式の衣装のバイナリ見るのに適したバイナリエディタとかあったら教えてほしい Cのような高級言語知ってるだけじゃわからんよ 機械語レベルの知識がないと unityroomでセーブデータをいじりたいのですがよくわからないので教えてください Chromeのコンソールを開いて実行コンテキストセレクタをwebgl-frameに設定 IndexedDBからセーブデータを取得するところまではいけました しかし改ざんしたセーブデータをputしてもゲーム内に反映されません これといったエラーも表示されないので手詰まりです ネット越しに取得するデータだからデータ破損や改ざん防止でチェックサム的なデータを持ってるかハッシュ値みたいの別途取得して比較してるとか? 自己解決しました セーブデータのサイズが変わったのにPlayerPrefsに記録されるデータ長を変更し忘れてたのが原因でした 自己解決じゃないですね アドバイスありがとうございました サイズの異なるファイルのバイナリを比較したいんだけど ファイルAのX行からY行、ファイルBのZ行からW行を比較する みたいなのができるバイナリエディタ知りませんか 比較したい範囲を2つのテキストファイルにコピペしてWinMergeで比較すれば楽かもね あぁそうか 冷静に考えれば誰でも思いつく方策を思いついてなかった ありがとうございますやってみます 質問失礼致します。0〜9と.しか入力できない欄にプラスマイナスその他文字などを入力する方法ってありますかね? 適当な数字入れて文字列でメモリ検索してアドレス見つけたらメモリ側から書き換えるとか OK押した時に文字種チェック入って弾かれることもあるのでチェックロジックNOPにする必要あるかも 回答頂きありがとうございます。 こちらの方法を試してみます cheatengineの値<スクリプト>の変えた数値を直接上書きできませんか? それと上書きすると何か問題ありますか? >>620 アドレス直接書き換えだと元の値に書き戻されたりするからスクリプトで書き戻す処理を無効にするとか良くあるよ 聞く前に試すのが早いと思う CheatEngineのCode Filterに相当することをIDAでどうやりますか? 本当の本当に素人なのですが、質問をさせてください。 キャラクターの表情、関節の角度など、画面上で数値が表示されない値を変更したいと考えています。 アドレスの特定がかなり難しい話のような気がするのですが、もし参考になりそうな情報が載っているところをご存知であれば教えていただけないでしょうか。 float型を「Unknown initial value」からサーチ始めて少し移動したのち「Changed value」を繰り返す、時折ストップさせた状態で「Unchanged value」を何度か繰り返す これをやればすぐ見つかるけど大抵は複数のシャドウコピーがあるので一旦すべてテーブルに追加して一つづつ値を変更してキャラが移動するかを試しどれが実体化を割り出す必要がある dead by daylightのチート作りたいのですが、メモリ読み取りするためにカーネルドライバを使う必要があります。EACに検出されない方法知っている方いますか?現在kdmapperというツールを使用しようとしていますがインテルドライバが既にあるとかいうエラーで立ち往生しています。ちなみに自分で脆弱なドライバを見繕う場合、kdmapperがやってくれてる痕跡削除等も自力で実装する必要があるので面倒くさいです。 EACはBattleEyeなんかと並んで一応は世界最先端のアンチチート技術だからその辺は自力で出来ないと無理だよ 誰かの作ったもん利用して一時的に動いたとしても彼らはどんどんアプデ繰り返してくるからすぐ使えなくなる >>629 それは承知の上で、現在のEACバージョンで未検出のメモリ読み取り方法を知っている方を探しています。例えばvalorantに関しては、現在僕が使っているAIエイムボットは1年間未検出です。EACでもそのような対策されていない脆弱性があるのではないかと思います。BE用でも構いかません。DMAやドライバ公式署名などお金がかかるものでもいいです。もちろん無料でとは言いません。動作の保証があればお金を払います。 >>630 AIエイムボットって要するに画像認識系? であればそれは技術的にはチートとは言い難いものだからまあ検出されなくても不自然ではないが メモリにはアクセスしません。画像認識です。エイムボットは目的であり、その手段としてメモリ読み取り、他の方法がある場合リスクが最小のものを選びます。今回の目的はACに保護されたメモリ領域へのアクセスであり、その手段としてカーネルドライバ、DMA、ハイパーバイザー、それ以外の方法がありますが、検出可能性が最小のものを選びたいです。有識者いましたら是非お願いします オンラインゲームでそこまでして欲しい情報とか書き換えたい情報ってあるの? 敵味方の位置情報とかそんなの? >>633 まさしくそれです。敵の座標(x,y,z)、自分のカメラ座標(x,y,z)、カメラ回転(x,y,z)、カメラ視野角、これらの情報がbox型のウォールハックに必要です。それらの情報はメモリにアクセスする必要があり、ACに保護されている場合それを突破する必要があります。その他にもクライアント側で管理している面白い情報が見つかります。 クライアントのプロセス側からメモリへのアクセスはほとんどの場合blockされないから そっちにコードっ突っ込んでメモリを読み取ればいい アンチチート類は外部プロセスからのメモリ読み取りくらいしか制限しないです >>635 情報あざます。全然詳しくないですが、obsやdiscordのdllからフックみたいなやつですかね。ただ、ブロックされないに関してはカーネルかハイパーバイザーで読み取るでクリアしていますが、問題は検出されないかどうかです。discord等のdllを変更すると署名が失効して検出されるそうです。とりあえず今オープンソースのapex linuxチート見てたらハイパーバイザーで読み取ってるぽいので、それを流用してみます。 独自の署名付きドライバー(ev or ov)は何人ぐらいに配布したらブラックリストに登録される可能性がありますか?主にヴァンガードで使用します。 pythonで質問なんだけど def 関数名 for : try except break else: if : return true return false みたいな構造のコードについて これってtrueを返した後にfalseを返さないの? 一回でもreturnを返すと関数の処理はストップするの? はい、Pythonの関数内で`return`文が実行されると、その関数の実行はそこで終了します。例えば、ある条件が満たされて`return True`が実行される場合、その時点で関数は終了し、それ以降のコードは実行されません。同様に、`return False`も同様に関数を終了させます。 以下は簡単な例です: ```python def my_function(value): for item in value: try: # 何かしらの処理 if item == 3: return True # ここでTrueを返すと関数が終了する except: break else: if item == 5: return False # ここでFalseを返すと関数が終了する # 例の使用 result = my_function([1, 2, 3, 4, 5]) print(result) # 出力はTrue ``` この例では、リストの中に3がある場合に`True`を返し、5がある場合に`False`を返しています。どちらかが返された時点で関数が終了し、それ以降の処理は実行されません。 >>638 スコープをちゃんと見よう return trueは一つ上のifが真のときにしか呼ばれない また質問なんだけど pythonで配列(行列みたいなデータ)の集合を考えているんだけど 重複を許さないような集合ってsetでできる? 適当にコード書いたらTypeError: unhashable type: 'list'て出た CheatEngineのCTファイルで値を変更したメッシュの情報やファイルは抽出できません? チートエンジンで所持アイテムの個数を一括変更するスクリプトはどうすれば良いのでしょうか 外のサイト見て、HP減らないとか、減算を加算に変更するとかは見たけど、複数の同時変更みたいな記事も見つからずで 現状では、静的アドレスが見つかっている状態で、32バイト先に次のアイテム個数が有るのは分かっています >>645 作るための知識が不足しているので、苦闘してます 手持ちの別ゲームのCTファイルもあたってみたのですが、似たようなスクリプトが見つからず、 参考にするためのCTファイルがないと厳しいですね どなたかゲーム問わずで、手持ちのアイテム所持数変更とかのCTファイル無いですかね バイオ2のリメイク インストールして最初の起動だと操作キャラの位置がサーチできるのに ゲームを再起動したら再インストールするまで検索に引っかからなくなる怪現象が発生しません? ちなみに弾数とかは素直に検索できるんですよね なんか対策してるんですかね >>647 最初の起動のうちに座標アドレスのオフセットを特定しとくとかかね >>648 ジャンプ命令に気を付けつつコードを一行ずつ遡ってレジスタの代入を目視で確認してるんですけどこれであってます? 正直、最後までできる気がしないんですけど ベースアドレスがスタックやヒープメモリの領域を抜けたらそこで確定する感じなんですかね 普段はゲームを再起動しつつポインタスキャンの力技でなんとかしてるんでオーソドックスなやり方がイマイチよく分からんです >>650 それっぽいところに仕掛けてレジスタのそれっぽい値を引っ掛けてくる感じですかね なんとなく分かりました ありがとうございます https://github.com/praydog/REFramework これのオブジェクトエクスプローラ使ってなんとかできんかな。構造体がわかれば手間が大幅に省ける >>652 これすごいですね https://cursey.github.io/reframework-book/object_explorer/object_explorer.html ここの動画の通りにたどったらプレイヤー座標の数値が知れたんでメモリ検索かけたら見つかりました なぜかObject Explorerに表示されてるAddressとはちょっと違いましたけど ちなみにどうやら再インストールすれば見つかるのはただの偶然で プレイヤーが静止してても微妙に数値が変わる場合があったのが原因だったっぽいです アークナイツでチートやりたいんですけどやり方を教えてもらえませんか cheatengineで値を変更する。静的な変更を加えたい場合は、unityゲームのチート方法を調べる。 最近cheat engineを使い始めて、値のわかってるものは変更できるようになって、静的アドレスはまだ探せてない、この状態で敵を倒すと100%ドロップとか探せるんだろうか?教えて欲しいです。 ゲームのsdkを生成する(UEしか触れたことないがUnityもオープンソースなのでフリーのツールがあるはず)。目的のフィールドまでのオフセットを確認し、ポインタチェーンを辿り値を変更。sdkの生成ツールはUnreal EngineでいうとDumper-7のようなもの。 一度やって出来なくて挫折したんだけれど静的アドレス見つけるのって簡単に出来る? アドレス検索→見つけたらアドレステーブルに追加してポインタマップ生成&保存→ゲーム再起動 これを何回か繰り返す アドレス検索→アドレステーブルに追加してポインタスキャン 保存していたポインタマップを追加してアドレスをその当時のやつに設定 他の設定はどうすればいいのか忘れた しばらくすると検索が終わるからそれっぽいのを全てアドレステーブルに追加 PCとゲームを再起動してもポインタが機能しているか確かめる これでたぶん大丈夫 ここまで書いといてなんだけど 目的のアドレスを処理しているゲーム側のコードをAOBスキャンしてアドレスを盗み見する独自コードを注入するのがフォーラムのCTでよく見る手口 そっちのほうが確実 >>659 下の方は良くわからんが上の方で何とか出来た、ありがとう 検索結果が2万とか出たりしたからそれで確実じゃないってこと? この結果自体を減らすのに有効な手段って有ったりする?総当たりしかないのかな >>660 俺も初心者だから1行目の繰り返す回数を増やすしか思いつかない でも2万とか見たこと無いな まあベースアドレスが一番若くてポインタの連鎖が浅いやつを選んで失敗したことがないから あんま心配しないで大丈夫だと思う >>661 なるほどね ただ普通のステータスを弄る時はアドレス二桁とかだったから最初のが特別だったみたい 質問ばかりで申し訳無いがメモリから構造体分析で周辺アドレスを探してるけれどオフセット多い物だとポインタ追加するだけでも結構大変 アドレス追加から静的アドレスやらオフセットやらを入力するのではなく静的アドレス自体を複製してオフセットをずらしたり出来るのかな? >>662 よくわからんけどアドレスをコピペしたときにダイアログが出て そこで最終オフセットを修正できるがそれじゃダメなんか? 複数コピペすれば倍々でアドレスを増やせたはず >>663 ああこれで良かったのね ダイアログが良くわからなくてキャンセルしてたわ ごめん、ありがとう パワプロ2022でサクセスのターン数のサーチする方法が分かる方いませんか? その他のことは大体できるんですがこれは数値を入力をしてもヒットしません 開始がターン数68で、経験点や調子と同じ2byteだと思うですがなぜヒットしない read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる