HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0814
corner0530タスクマネージャの検出について11解決


corner0530

リンク

2018/8/14(Tue) 23:57:54|NO.85075

あるプログラムを実行しているときにそのプログラムをタスクマネージャーから検出できな異様にプログラムすることは可能でしょうか?
もし可能でしたらどうプログラムを書けばいいかも教えていただけるとありがたいです。



この記事に返信する


Velgail

リンク

2018/8/15(Wed) 00:08:43|NO.85076

マルウェア相当となり、配布したexeがアンチウィルスソフトに消されるようになる可能性大ですが、本当にやるつもりですか?

検索キーワードは「プロセス隠蔽 タスクマネージャー」あたりで出てくる情報が参考(相当に高難易度かつ危険)になるかと。
リンクとしては貼りません。

ちなみに、もっと過激に実装しているのはnProtect GameGuardとかですけど、「相当に評判悪い」です。理由はお察しください。



corner0530

リンク

2018/8/15(Wed) 17:14:31|NO.85082

Velgailさん回答ありがとうございます。
私と同じ部活の後輩で活動中に部のパソコンでゲームする人がおり、
しかも部活がパソコンの方面なのでその人はパソコンに少し詳しく、
タスクマネージャーからアプリを強制終了するぐらいは(多分)できてしまいます。
なので、タスクマネージャーからアプリを検出できないようにし、
ゲームを開いた瞬間タイトル名を検出してそのゲームを強制終了させる
というプログラムを作ろうとしています。
なのでできるならほかのツールに頼らずプログラム自身で検出できないようにできないでしょうか?
よろしくお願いします。



あらや

リンク

2018/8/15(Wed) 17:28:31|NO.85084

そのような事情でしたらゲームを起動できないようにするのではなく
そのゲームを毎度アンインストールするとか
ゲームを起動した場合、履歴を記録するような手段を取って
部活の顧問なりに相談するという形にした方が良いのではないでしょうか。

少なくともマルウェア的な危険な手段を取るよりは穏便な方法だと思います。



Velgail

リンク

2018/8/16(Thu) 00:53:56|NO.85090

例えば、
そういうときは、exe名をsvchostにして、スープアイコンをなくして付けっぱなしにするといいカモフラージュになります。
(svchost.exeが実行されていないWindowsは存在しない。

http://office-qa.com/win/win109.htm
は少し弱いか……?

2つ以上の異なるexeを起動し、相互で監視し続け、片方を落とされたらもう片方がシャットダウンコマンドを発行し、強制的にシステムを落とすとか、相互で立ち上げ直すとか。

などなど、対策はまだまだありますよ。アイデア勝負です!



KA

リンク

2018/8/16(Thu) 05:50:24|NO.85091

タスクスケジューラを使う



corner0530

リンク

2018/8/16(Thu) 19:20:09|NO.85096

皆さんご回答ありがとうございます。
あらやさん
ゲームはインストールしなくてもUSBに保存してあればできてしまうのでアンインストールはできないです。
顧問に相談の件ですがこれで制限をかけてもだめなら相談に行く予定です。

Velgailさん
カモフラージュさせる・のはいいアイデアですね。参考になります。
これまでは、タイトル名を検出して引っかかったらシャットダウンコマンドを実行というふうにしていたのですが、
それだと「以下のアプリがシャットダウンを妨げています」みたいな画面が出て
そこでキャンセルできてしまうのであまりうまくいきませんでした。
なので、個別にアプリを強制終了させるにはどうプログラムすればいいでしょうか?

KAさん
タスクスケジューラでどう使ってやればいいでしょうか?



Velgail

リンク

2018/8/16(Thu) 20:45:23|NO.85098

こうやると強制的に殺せます。notepad.exeを潰す場合はこんな感じ。

exec "taskkill /f /im notepad.exe",0



corner0530

リンク

2018/8/17(Fri) 20:59:00|NO.85105

Velgailさん
度々すみません。
メモ帳みたいに場所が固定されていてわかる場所にあればいいんですけど、
ゲームのアプリがその人の個人のUSBに入っているので、場所がわからないでいます。
私が思っているのは、裏でタイトル名を検出するプログラムを動かしておき、
それに引っかかったアプリをを強制終了させるようにしたいと思っています。
しかしタイトル名でひっかけることはできても、
そのアプリを強制終了するやり方がわからないので、そのあたりを教えていただけないでしょうか?



Velgail

リンク

2018/8/18(Sat) 01:42:56|NO.85111

あ、プロセス名がわかればタスクキルできるので、exe名でKillできます。パスは関係ないです。

他の手段の一覧
http://hsp.tv/play/pforum.php?mode=pastwch&num=50595

ゲームということでタイトルバーの値は一定とすると、こんな感じ

#include "user32.as" FindWindow 0,"HSP assistant ver1.21" if stat!=0{ tgt_hwnd=stat pid=0 GetWindowThreadProcessId stat,varptr(pid) exec "taskkill /f /pid "+pid }

さて、EnumWindowsを使いたいがHSPからでは面倒なので、今回は
http://hsp.tv/play/pforum.php?mode=pastwch&num=71794
を参考に、一覧から一致するものを見つけたらKillするのを作るとする。


#uselib "user32.dll" #cfunc GetDesktopWindow "GetDesktopWindow" #cfunc GetTopWindow "GetTopWindow" int #cfunc GetWindow "GetWindow" int, int #define GW_HWNDNEXT 2 #cfunc IsWindowVisible "IsWindowVisible" int #func GetWindowText "GetWindowTextA" int, int, int #func global GetWindowThreadProcessId "GetWindowThreadProcessId" sptr,sptr #define NULL 0 #define MAX_DETECT 256 //検出する最大個数 dim hwndList, MAX_DETECT //検出したウィンドウハンドルのリスト sdim wTitleList, 256, MAX_DETECT //検出したウィンドウのタイトルのリスト num_detected = 0 //検出カウンタ sdim buf,256 //汎用変数 hwnd_desktop = GetDesktopWindow() //デスクトップのハンドル。(Windowsではデスクトップが他のトップレベルウィンドウの親になっているらしい。) hwnd_ = GetTopWindow(hwnd_desktop) //デスクトップ傘下のトップレベルウィンドウで、Zオーダーが最大(ざっくり言えば「一番上に浮かんでいる」)のもの。 notesel titles if hwnd_ { //そいつが空でない(→居る)なら GetWindowText hwnd_,varptr(buf),256 //タイトルバー文字列 if strlen(buf) { //名無しでないなら登録する hwndList(num_detected) = hwnd_ noteadd buf num_detected ++ } repeat //最下のウィンドウまで繰り返す hwnd_ = GetWindow(hwnd_,GW_HWNDNEXT) if hwnd_ { if IsWindowVisible(hwnd_) { GetWindowText hwnd_,varptr(buf),256 if strlen(buf) { hwndList(num_detected) = hwnd_ noteadd buf num_detected++ } } } else : break if num_detected == MAX_DETECT : break //お腹一杯 loop } screen 0,800,800 detect=notefind("Document",notefind_instr)//検索に引っかけたいのを指定する。 mes titles mes detect mes hwndlist(detect) pid=0 GetWindowThreadProcessId hwndlist(detect),varptr(pid) mes pid exec "taskkill /f /pid "+pid

疑問点があればまだまだ聞きますから遠慮なくどうぞ。相当に難しくなってきたので。



corner0530

リンク

2018/8/24(Fri) 20:41:30|NO.85174

Velgailさん
何とかいい感じにプログラムできました。
何度も返信いただきありがとうございました!



inovia

リンク

2018/8/24(Fri) 23:41:50|NO.85183

すでに解決してますが、
taskkillだけでもウィンドウタイトル指定でkillできるので短くなりますね。
完全一致だけでなくワイルドカード(*)も使えますが、末尾だけという残念仕様ですけど。


exec "notepad" gsel ,2 : dialog "killします" exec "taskkill /f /fi \"windowtitle eq 無題 - メモ帳\""



ONION software Copyright 1997-2021(c) All rights reserved.