チート初心者スレpart2 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
普通に考えて、プロセスを分けてる以上値の受け渡しが必要なのは仕方ない
ユーザ空間ではそれぞれのプログラムが干渉しあうなんてことはあってはならない
って前提のもとにOSは作られてるわけだから、OS自体がそんなことできるような
機能を提供しているわけがないし、もしそんなことができたらそれはOSの欠陥だからw
質問自体がナンセンス オーバーヘッド減らしたいならforで回すの止めれば良いのに OSの管理をぶち壊す上でって予め言ってるよな
説明が悪いとか言われたけど参照ってことも最初から言ってるのに参照と値渡しの違いも理解してない、つまりはチーターにとって基礎事項のポインタすらも理解してないレベルはさすがにご遠慮願いたい
まぁ初心者スレで聞いてる俺の方がスレチか OSの管理をぶち壊す上で(笑)ってそんなことできないのが当たり前でしょ
現代OSがなぜプロセスという形で独立させているか、意図をちゃんと理解していれば
そもそもそんなナンセンスな発想自体浮かばないって話だよ
仮にそういうことができちゃったらMicrosoftに報告すれば金もらえるレベルの話だと思うが?
オペレーティングシステムの基礎くらいはちゃんと勉強しような^^; チートエンジンをNOXのアプリ(モバ7)に使用しているのですが
メモリ書き換えは出来てもspeedhackのチェック欄にチェックを入れると
「Failure cofiguring speedhack part1: 13:offset too big」とエラーポップアップが出てきました。
海外サイトを調べても対処法が書いておらず…どなたか分かりませんか… こんにちは>>31です 久々(2年ぶり!)にこのスレ見た
前回は見事な三日坊主っぷりだったぜ
また三日で挫折するけど久々に取り組んでみる >>466
直接参照したいならdllぶち込めば済む話だろ。
rpmが遅いなんて聞くまでもないし、そもそも外部でやる意味ね。内部でいいじゃん。
ちなみに、値渡しってよりも正確には読み取りだけどね。 アセンブラとかバイナリがわかんねぇー
素早く身につける方法教えてくれ このスレ意味ないだろ
低レベルな上に時々妙にイキった>>466みたいな無知が現れるだけじゃないか ImageDirectoryEntryToData関数使って関数名とアドレスを一覧表示しようとしてるんだけど
メモリエラーなるわ windows10の64bitだからなのかな >>485
関数なんか使わないで、IMAGE_NT_HEADERSからマニュアルで取得すれば良い ブラウザゲーならどのプロセスで動いてるのかさえ特定できれば
プロセスメモリエディタで好き放題できるだろ 495様
そういった知識が0なのでご教授願いたいです 師匠 >>486
iat hookにチャレンジしたいのよ
その前段階
>>485
でけた
Baseの前の(char*)が無いとでかい数値になってメモリアクセス違反が発生して
(char*)つけたら上手く動作した
なんでこれが必要なのか分からん
アドレスの足し算にキャストが必要な理由がわかってないからいっぺん死んでくる
for (; pImageImportDescriptor->Characteristics != 0; pImageImportDescriptor++) {
printf("-%s\n", ((char*)Base) + pImageImportDescriptor->Name);
IMAGE_THUNK_DATA64* pINT = (IMAGE_THUNK_DATA64*)((char*)Base + pImageImportDescriptor->OriginalFirstThunk);
for (; pINT->u1.AddressOfData; pINT++) {
if (IMAGE_SNAP_BY_ORDINAL64(pINT->u1.Ordinal)) {
}
else {
IMAGE_IMPORT_BY_NAME* tName = (IMAGE_IMPORT_BY_NAME*)((char*)Base + pINT->u1.AddressOfData);
printf("%s\n", tName->Name);
}
}
} 今更ながら>>57のアドバイスを参考に何気なく過去スレ見てみたら
(反応できてなくてゴメンよ)
めちゃくちゃレベル高い解析者いて感動した
【xtrap】不正プロテクトの回避や解析方法【npro】
https://schiphol.5ch.net/test/read.cgi/mmosaloon/1208457391/
雲の上のレベルの話だけどモチベアップしたわ(+三日) その頃はどんな書き込みしても教えてくれる人がいたんだな
羨ましい 羨ましいね
iat hookとdll injection(createremotethread)それぞれ独立だけど出来た
dll injectionって同じプロセスに対して一回しか出来ないのね 何でだろ >>503
原因わかった
1回目のinjectionだとfdwReasonがDLL_PROCESS_ATTACHだから
該当の処理が実行されるけど
2回目のinjectionだとそうならないみたい
switchの外に処理を書く もしくは freelibrary使ってアンロードすれば2回目以降も動作するっぽい
switch (fdwReason) {
case DLL_PROCESS_ATTACH:
MessageBox(NULL, “test”, “test”, MB_SYSTEMMODAL);
break;
} http://inaz2.はてなぶろぐ.com/entry/2015/08/10/193103
この記事真似してみたけど失敗した
windows10のメモ帳はshellabout呼んでないみたい setwindowtextあたりで再チャレンジ 明日 GoogleChromeでRPGアツマールのゲーム加速すらできない……
チートエンジンのProcessesタブのchorome.exeを片っ端から開いて加速設定していっても一切変化がない
オンライン要素皆無のゲームだから対策されてるわけでもないと思うんで誰かやり方教えてください ツクール系ならCEよりうさみみハリケーンの方が対応してると思うが ゲームの才能無い割に某TPSでアジアランカーに入れる程度のスキルは身に付いたが
この分野って結局は自力で発明しなきゃいけないこと多すぎてそれに懸けてきた労力も相まってあんまり他人に教える気無くなるんだよな
ハッカー文化とは真逆の思想に行き着いてすまん 少なくとも>>504みたいなクレクレ君には教える気にならない >>505
同一のdllを複数回injectするのならCreateRemoteThread,LoadLibraryを使った通常の方法だと2回目以降は失敗するけど、
PEBのモジュールリンクからinjectしたDLLを外せば何度でも同一DLL inject出来る。
DLLのロード後にリンク外すか、LoadLibrary使わないでマニュアルでinjectするかすれば良い。
そもそも同一のDLLじゃなくても失敗するんだったら、コードが悪いとか言えない。 >>506
x86->x86, x64->x64とか、同一のアーキテクチャ同士ならkernel32.dllとかシステムモジュールのロード位置(アドレス)はプロセス間でも同じだから、
そのまま従来の方法でアドレス渡せるけど、x86->x64とかならロードされるアドレスの相違上、inject対象のプロセスからReadProcessMemory等使ってPEB読み取って、
エクスポートテーブルからCreateRemoteThreadに渡したいAPIのアドレス取得しないと失敗する。
だから、x64でFreeLibrary実行が難しい〜って言うよりもx64->x64にすれば良いだけ。 とりえあず、メモ帳のタイトル変えることはできた
>>513
レスありがとう
>PEBのモジュールリンクからinjectしたDLLを外す
調べてみる
>>514
うん、freelibraryの実行自体は簡単だと思うんだけど
freelibraryに読み込んだDLLのアドレスを渡すのが大変そうだと思った 放置少女とかいう○ゲーでチート(アイテム増殖など)はできないですかね? >>512
教える気にならないんじゃなくてできないから教えられないんだろ? >>518
ここはある程度できる人が躓いてるところを補う場所であって
>>494>>504>>517みたいな乞食に施すスレではないので 初心者から上級者まで基本的に英語出来るかグーグル翻訳をある程度補完できる知能があるやつなら英語圏のサイトですべて事足りる
よってここもそうだが上級者スレは尚更需要無いだろうな
なんとなくワンチャン5ちゃんねらー特有の情報出てくるかなーと思ってロムったり何度かレスしたりしたが未だ価値ある情報は一つも見たことがない >>521
ならどんな書き込みがあっても文句は言えないな https://www.keicode.com/windows/win08.php
これ真似したけど失敗した
どうやらwindows7以降は署名がないと動かない模様
https://docs.microsoft.com/ja-jp/windows/win32/win7appqual/appinit-dlls-in-windows-7-and-windows-server-2008-r2
Microsoft is modifying the AppInit DLLs facility in Windows 7 and Windows Server 2008 R2 to add a new code-signing requirement. Win10の最新でもAppInitのインジェクションはできるよ
Win7以降からはマイクロソフトが証明書つけた方がいいんじゃねって言いだしただけで、RequireSignedAppInit_DLLsの値を変えれば普通に動く ありがとう
確かに記事の下に書いてあったわ
RequireSignedAppInit_DLLs
0 Load any DLLs.
1 Load only code-signed DLLs.
でも試してみたけどだめだった
たぶんどっか間違ってるんだけだろうけどもういいや(このやり方にあまり興味がない)
https://stackoverflow.com/questions/9027642/simple-dll-injection-not-working-using-appinit-dlls-dllmain-not-getting-callev 未だにinjection、しかも64bitと32bitの違いすらも分かっていない
まるで成長していない… おい・・・
見てるか>>31・・・
お前を超える逸材がここにいるのだ・・・!!
それも・・・
2人(>>494,>>504)も同時にだ・・・
>>31・・・ その動画の意味が分かるやつが入門者なのか
先が長すぎて嫌になるぜ… お 俺以外の初心者おったんかいな
先が長すぎてすぐ挫折する人(何年かしてまた取り組んでみる)の末路が俺だよ ゲームのプロテクト解除しようと思ったら
https://schiphol.5ch.net/test/read.cgi/mmosaloon/1208457391/
262,263,264,267,274,282,334,340,343,347,350,351,371,961,967
この人たち並みの知識と解析技術(バイナリファイルを読むテクニックと経験)が要求されるのだと思う
これ2009年の話だから今はもっと難しくなってるんですかね
どうなんですか 安西先生! >>537も良かったら一緒に勉強しよう
俺は今何やってるかというと昔調べた項目を実際に手を動かして確認する作業
(2年前は調べてみただけでゴールの遠さに目眩がして挫折しちゃった)
・dll injection(createremotethredを使ったやり方)
成功
・dll injection(AppInit_DLLs)
失敗
・iat hooking
成功
・メッセージフック(setwindowshookex)
めちゃくちゃしょぼい実験は成功
・inline hooking
これから試す
・デバイスドライバ作成
まだ
・SSDT hooking
まだ
・IDT hooking
まだ
・IRP hooking
まだ
crackme, unpackmeとか
windbgとか
項目はたくさんあるぞい! >>538
初心者どころか入門未満だ
CとC#の基本を勉強したけど解析に繋がるものもなかったし
>>498とか>>505みたいの全く意味分からなくて萎え掛けてる >>541
俺は何度も挫折してるし、その内挫折しちゃう(1、2週間後?)予感もあるから励ましの言葉もないよ
ゲームプロテクトはずせるのは頭がいい人 or 要領がいい人 or 地道に努力できる人
or バイナリ眺めて性的興奮覚えるような変態ぐらいだと思う
>>541が変態であることを祈るよ
>>498は何の知識もなしに見ても不明だよ
ざっくり言うと
IAT(Import Address Table)にDLLの関数のアドレスが格納されていて
windowsアプリケーションはIATをみて関数のアドレスを取得して実行しているから
そのIATを書き換えて自作の関数に処理を飛ばしちゃおうというやり方
iat フック とかでググれば説明してるサイトは複数ヒットするよ
ももいろテクノロジー IAT書き換えによるAPIフックをやってみる
http://inaz2.はてなぶろぐ.com/entry/2015/08/10/193103
APIフック
http://jackseven.s22.xrea.com/programming/apihook.html
などなど
何故かはてなぶろぐのurlがNGワードなんだよね >>541
C/C++は勿論、C#のような静的型付け言語ならかなり解析に繋がるはずだけどな
これらの高級言語を習得してからアセンブラを見れば大体どういう処理なのかを察せるようになる
その逆に解析中のアセンブラから高級言語の機能への理解が深まったりもして相乗効果 RequireSignedAppInit_DLLsっていま存在するかね
当方Microsoft Windows [Version 10.0.17763.775]だけど
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows
HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Windows NT \ CurrentVersion \ Windows \ AppInit_DLLs
の両方に存在しないんだよなぁ 最終的に何がしたいのかさっぱり伝わって来ない
ただ勉強してることを日記に書いてるだけ? >>548
> 最終的に何がしたいのかさっぱり伝わって来ない
最終目標で言うと最新ゲームのプロテクトを無効or回避出来るようになりたい
> ただ勉強してることを日記に書いてるだけ?
うん >>547
存在しなかったから作って実験してた
今振り返ると0じゃなく1に設定してやってたかも >>547
https://attack.mitre.org/techniques/T1103/
これを試してみたかったんだ。
この手法には3つのレジストリキー値の設定が必要らしく、それは
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows
HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Windows NT \ CurrentVersion \ Windows \ AppInit_DLLs
のいずれかにある
AppInit_DLLs
LoadAppInit_DLLs
RequireSignedAppInit_DLLs
なんだけど、最後のRequireSignedAppInit_DLLsが、上2つの両方のキーに無いんだよね。
自分で新規作成してもDLLは読み込まれなかったし、非署名のDLLはAppinit_DLLsには使用できなくされてるのかなと考えたり… Nikolay Igottiって人が考えたやり方試す
最初に下位アドレスをpushして、その後に上位アドレスを上書き
retでそのアドレスに飛ぶ
[cpp]
push 0xAAAAAAAAA 68 AA AA AA AA
mov DWORD PTR [rsp+0x4],0xBBBBBBBB c7 44 24 04 BB BB BB BB
ret MessageBoxAの呼び出しを自作関数にすり替えるところまで出来た。
アラインメントを全く気にしてないけど取り敢えず動いた。
BYTE jump[14] = {
0x68,0x90,0x90,0x90,0x90, // push <自作関数のアドレス下位4バイト>
0xc7,0x44, 0x24, 0x04, 0x90, 0x90, 0x90, 0x90, //mov DWORD PTR [rsp+0x4],<自作関数のアドレス上位4バイト>
0xc3}; //ret
FARPROC pTargetFunctionAddr = GetProcAddress(hModule, "MessageBoxA");
FARPROC pMyFunctionAddr = (FARPROC)&MyMessageBoxA;
memcpy(&jump[1], ((char*)&pMyFunctionAddr), 4);
memcpy(&jump[9], ((char*)&pMyFunctionAddr)+4, 4);
//MessageBoxAの先頭コードをjumpコードに書き換え
DWORD OriginalProtection;
VirtualProtect(pTargetFunctionAddr, 14, PAGE_EXECUTE_READWRITE, &OriginalProtection);
memcpy(pTargetFunctionAddr, jump, 14)
MessageBoxA(0, 0, 0, 0);
} そんな10年前のフックのやり方せずとも今はMinHookとかいろいろ便利なライブラリがあるぞ これか
https://github.com/TsudaKageyu/minhook
この人すごいな
Detoursに1万ドルも払えないから作った言うとる ■ このスレッドは過去ログ倉庫に格納されています