ToLoveるシューティング
:
ラナルータ
:2014/11/16(日) 17:08:21関連スレ
基本的なCheatEngineの設定
初歩的なCheatEngineの使い方
基本的なCheatEngineの使い方
アセンブラの処理
うわっ...
俺っちAob使ってアドレス更新くらいしかできないのに...
Aobが使えなくなっちまった!!!!!!!!→だいたいAobが残念だっただけできちんとやればアドレスは見つかります
スクリプトが動かなくなっちまった!!!!!→処理が変わったのでしょう...修正が必要です
って時
貴方はそこで諦めるんですかね...
はい自力で解決していきましょう
まずどこがおかしいのかわからないと思うんで
例を挙げてやっていきたいと思います...
Aobは基本的にレジスタに依存しないように書かれていることが多いので
使われているレジスタが変わったことにより
スクリプトが動かなくなっていることが9割です
鼻炎:うわぁん Skill Key Hackが動かなくなったンゴ
では例を挙げてみていく前にやり方を準備をしましょう
1.クライアントのランチャー画面を2つ開く(旧verと現行ver)
なんかしらんけどJMSはMutex使わなくなったので多重起動制限がなくなっている...ので
ランチャー画面を2つ開くことは容易である。
古いクライアントをメイプルのフォルダに放り込んで起動しましょう
ijl15.dllbypassいれていると思わぬ動作を引き起こす可能性があるので
別フォルダに古いクライアントのexeと実行に必要なdll達を用意するとGOOD
まぁCEとクライアントを2つ開いたと思うので解説していきますわ
Aobが生きていてスクリプトが動かなくなった場合(アドレスは正しいと仮定)
まず生きていた時のv331のスクリプト

そして俺が修正したv333のスクリプト

ここではAobの作成方法については触れないがまぁフィーリングでどうぞ
はい
Aobがあっても鼻炎君はびぇええんスクリプトうごかねえとかいってました
はい
アドレス自体は合っていたのですが
レジスタというものを知らなかったため罠に嵌りました
アドレスだけ更新したんじゃスクリプトは動かなかったのです...
KeySetHookの最初のcmp ediってとこがキーコードによって処理分岐させる(Xキー)
の処理をまぁフックするようなスクリプトだったのですが...
鼻炎君はそこをそのままでスクリプトを更新したため動かなかったのです
ediに入っている値といえば
直前のcallにpush ediで値が使われていることは明らか...つまりその値はまぁ関数呼んでも
eax以外のレジスタは値が変わらないということを知ってさえいれば
そのediの値を使っているんだなぁとわかります
v333のほうを見てみると...
push edxになっているため
v331でediに保存されていたキーコードはedxに保存されるようになったと考えるのが妥当
なのでスクリプトのcmp ediとcmp edxにしてやりましょう
これだけで解決でした
まぁAobで更新するだけじゃなくて
スクリプトで使われているレジスタとかは
直前の処理でどのように使われているか見極めて
スクリプトに使うレジスタも更新できるようにがんばってくださいな!
Aobが死んだ場合
Aobが息してないの!!!! Patched!!!
まぁそういうときもあるんです。
なぜか?
eaxレジスタを使う場合とそれ以外のレジスタを使う場合とで
コードのバイト数が変わることが問題...
eaxとそれ以外とで割りと処理が違うのです
もしくわ...
関数の処理が大幅に変わったという時....
Aobで処理のアドレスをやっている場合がほとんどなのですが
その関数をcallしているところのAobを作成してやると
関数の処理が変わろうが1発でその関数が見つけられます
そういうことです...
Aobの作り方?
んなもん...
MemoryViewerに16進数があるだろ???
まぁこの辺の処理をAobを作りたい時ィ
まぁ特徴的な処理を見つけるのが第一
Skill IDとかいう固定値を検索かけるだけで1発だったりするときもある...
call dword ptr [API]のようなAPIを呼んでいるところも割と特徴的です
それらがない場合...のAobの作成方法...!
まず2byteコードのshor jmp処理は基本的に変わらないと思う...!まぁ変わったらドンマイ
なのでこれらはAobに含めてOK!
mov レジスタ,[esp+XX]などの相対的なメモリを読む奴!は残念ながら毎回変わるので
Aobに含められません!
ですがその相対的な値の部分とレジスタの部分以外の最初のbyteは基本固定なので
そこはAobに含めてそれ以外を??で埋める! OK ????
まぁそういうこと...
メモリとアセンブラコード比較すればどこが相対的な部分か分かると思うの...
call jmp(5bytesコード)も特徴的なんですがこれは相対ジャンプなので先頭のE8 E9以外は??で埋める必要有
それでもAobが作れなかったらその関数を呼んでいる部分のAobをとってから
その関数を見て...その辺の処理を手動で探す...!

基本的なCheatEngineの設定
初歩的なCheatEngineの使い方
基本的なCheatEngineの使い方
アセンブラの処理
うわっ...
俺っちAob使ってアドレス更新くらいしかできないのに...
Aobが使えなくなっちまった!!!!!!!!→だいたいAobが残念だっただけできちんとやればアドレスは見つかります
スクリプトが動かなくなっちまった!!!!!→処理が変わったのでしょう...修正が必要です
って時
貴方はそこで諦めるんですかね...
はい自力で解決していきましょう
まずどこがおかしいのかわからないと思うんで
例を挙げてやっていきたいと思います...
Aobは基本的にレジスタに依存しないように書かれていることが多いので
使われているレジスタが変わったことにより
スクリプトが動かなくなっていることが9割です
鼻炎:うわぁん Skill Key Hackが動かなくなったンゴ
では例を挙げてみていく前にやり方を準備をしましょう
1.クライアントのランチャー画面を2つ開く(旧verと現行ver)
なんかしらんけどJMSはMutex使わなくなったので多重起動制限がなくなっている...ので
ランチャー画面を2つ開くことは容易である。
古いクライアントをメイプルのフォルダに放り込んで起動しましょう
ijl15.dllbypassいれていると思わぬ動作を引き起こす可能性があるので
別フォルダに古いクライアントのexeと実行に必要なdll達を用意するとGOOD
まぁCEとクライアントを2つ開いたと思うので解説していきますわ
Aobが生きていてスクリプトが動かなくなった場合(アドレスは正しいと仮定)
まず生きていた時のv331のスクリプト
そして俺が修正したv333のスクリプト
ここではAobの作成方法については触れないがまぁフィーリングでどうぞ
はい
Aobがあっても鼻炎君はびぇええんスクリプトうごかねえとかいってました
はい
アドレス自体は合っていたのですが
レジスタというものを知らなかったため罠に嵌りました
アドレスだけ更新したんじゃスクリプトは動かなかったのです...
KeySetHookの最初のcmp ediってとこがキーコードによって処理分岐させる(Xキー)
の処理をまぁフックするようなスクリプトだったのですが...
鼻炎君はそこをそのままでスクリプトを更新したため動かなかったのです
ediに入っている値といえば
直前のcallにpush ediで値が使われていることは明らか...つまりその値はまぁ関数呼んでも
eax以外のレジスタは値が変わらないということを知ってさえいれば
そのediの値を使っているんだなぁとわかります
v333のほうを見てみると...
push edxになっているため
v331でediに保存されていたキーコードはedxに保存されるようになったと考えるのが妥当
なのでスクリプトのcmp ediとcmp edxにしてやりましょう
これだけで解決でした
まぁAobで更新するだけじゃなくて
スクリプトで使われているレジスタとかは
直前の処理でどのように使われているか見極めて
スクリプトに使うレジスタも更新できるようにがんばってくださいな!
Aobが死んだ場合
Aobが息してないの!!!! Patched!!!
まぁそういうときもあるんです。
なぜか?
eaxレジスタを使う場合とそれ以外のレジスタを使う場合とで
コードのバイト数が変わることが問題...
eaxとそれ以外とで割りと処理が違うのです
もしくわ...
関数の処理が大幅に変わったという時....
Aobで処理のアドレスをやっている場合がほとんどなのですが
その関数をcallしているところのAobを作成してやると
関数の処理が変わろうが1発でその関数が見つけられます
そういうことです...
Aobの作り方?
んなもん...
MemoryViewerに16進数があるだろ???
まぁこの辺の処理をAobを作りたい時ィ
まぁ特徴的な処理を見つけるのが第一
Skill IDとかいう固定値を検索かけるだけで1発だったりするときもある...
call dword ptr [API]のようなAPIを呼んでいるところも割と特徴的です
それらがない場合...のAobの作成方法...!
まず2byteコードのshor jmp処理は基本的に変わらないと思う...!まぁ変わったらドンマイ
なのでこれらはAobに含めてOK!
mov レジスタ,[esp+XX]などの相対的なメモリを読む奴!は残念ながら毎回変わるので
Aobに含められません!
ですがその相対的な値の部分とレジスタの部分以外の最初のbyteは基本固定なので
そこはAobに含めてそれ以外を??で埋める! OK ????
まぁそういうこと...
メモリとアセンブラコード比較すればどこが相対的な部分か分かると思うの...
call jmp(5bytesコード)も特徴的なんですがこれは相対ジャンプなので先頭のE8 E9以外は??で埋める必要有
それでもAobが作れなかったらその関数を呼んでいる部分のAobをとってから
その関数を見て...その辺の処理を手動で探す...!
:
B I E N
:2014/11/16(日) 17:44:20:
mahorori
:2014/11/17(月) 13:43:08:
ラナルータ
:2014/11/17(月) 18:29:49
javascript無効化してるとコメントが適用されない場合があります。
特殊タグ一覧。
画像貼り付け:[IMG]画像のURL[/IMG]
動画貼り付け:[VIDEO]YoutubeのURL[/VIDEO] Pastebin貼り付け:[CODE]PastebinのURL[/CODE]
特殊タグ一覧。
画像貼り付け:[IMG]画像のURL[/IMG]
動画貼り付け:[VIDEO]YoutubeのURL[/VIDEO] Pastebin貼り付け:[CODE]PastebinのURL[/CODE]