Windowsタスクマネージャーでプロセスを非表示にする

イントロ


多くの場合、匿名性と秘密性は、特にオペレーティングシステムで、現実と仮想の両方で、あらゆるアクションの実行に重要な役割を果たします。 この記事では、OS Windowsで匿名化する方法について説明します。 すべての情報は情報提供のみを目的として提供されています。



そのため、Windowsタスクマネージャーでユーザーの目から隠そうとします。 これを達成する方法は、核の(文書化されていないことが多い)機能をインターセプトし、独自のドライバーを作成することに基づいているものに関して、非常に簡単です。

メソッドの本質:タスクマネージャウィンドウを検索->すべてのプロセスの名前を含む子ウィンドウ(リスト)を検索->リストからプロセスを削除。




ご覧のとおり、私たちのプロセスには操作はありません。そのままで機能し、それ自体で機能します。 通常の標準的なWindowsユーザーは、通常、自分のコンピューターで実行中のプロセスを表示するために他のツールを使用しないため、これは私たちの手に渡るだけです。 ほとんどの場合、プロセスは検出されません。



研究に使用されたもの:



1)MicrosoftのSpy ++ (タスクマネージャーの子ウィンドウの階層を調べるため)

2) OllyDBGは、プロセスのスナップショットを取得するためにディスパッチャーによって使用される機能を表示します。

3)実際には、 taskmng.exe自体(タスクマネージャー)



Delphi環境を使用してコードを記述します。 むしろ、DelphiではC ++よりも便利です。 しかし、これは私の謙虚な意見です。



まず、最初に、プロセスのリストとは何か、どのように機能するかを調べてみましょう。 半分の視点から見ると、これは通常のSysListView32クラスウィンドウ(リスト)であり、1秒あたり2フレーム(0.5秒ごと)の頻度で更新されます。 ウィンドウの階層を確認します。







ご覧のとおり、プロセスのリストは、実際には「SysListView32」クラスの通常のウィンドウであり、「プロセス」ウィンドウ(タブ)の子であり、タスクマネージャーのメインウィンドウの子でもあります。 ネストのレベルは2倍しかありません。 さらに、リストにはSysHeader32クラスの子ウィンドウが1つあります。これは、ご想像のとおり、プロセスのリストのタイトル(フィールドマーカー)です。

定期的なリストがあるため、その内容を管理するためマクロのセットを自由に使用できます。 一見したところ、その多様性は驚くべきものです。 しかし、それらの多くは親プロセスからのみ動作します。つまり、それらを使用するには、親プロセスで実行されることを模倣する必要があります。 ただし、誰もがこのプロパティ、特にListView_DeleteItemマクロを持っているわけではありません。これは、リストウィンドウ(SysListView32クラス)から項目を削除します。

アプリケーションのプロセスで使用します。 この関数は、削除されたアイテムのインデックスを2番目のパラメーターとして受け取ります。

ここで、タスクマネージャーの非表示プロセスのラベルを持つ要素にどのようなインデックスが付けられているかを調べる必要があります。 これを行うには、何らかの方法でタスクマネージャーのプロセスのリストからすべての要素(プロセスの名前のラベル)を削除し、非表示にするプロセスの名前と順番に比較する必要があります。



ListView_GetItemTextのようなマクロを使用する 、アクションは次のようになります。



1)タスクマネージャーのプロセスでのメモリの割り当て( VirtualAllocEx

2)LVM_GETITEMTEXT( SendMessage )メッセージを子タスクマネージャーリストボックスに送信する

3)リストアイテムに関する情報( WriteProcessMemory )をタスクマネージャーの割り当てられたメモリ領域に書き込む

4)マネージャーの記憶から、プロセスについて関心のある情報を読み取ります( ReadProcessMemory





この方法を使用すると、コードで使用されているさまざまな構造体の先頭からオフセットバイトをカウントすることにより、簡単に「自分自身を撃つ」ことができます。 また、WinAPIに特に詳しくない人にとっては、この方法は非常に難しいため、すぐに削除します。 他の問題では、インターネット上でこのメソッドの実装を見つけることは難しくありません。 代わりに、独自のプロセスのリストを作成し、既にガイドされていることをお勧めします。タスクマネージャーのタスクのリストで大事なプロセスインデックスを探してください。



マイクロソフトは、タスクマネージャーと呼ばれるツールについて心配しないことを決定し、通常のWinAPI関数を使用してシステム内のすべてのプロセスを取得しました。 デバッガーの下のtaskmng.exeを表面的に見てください。







WinAPI関数CreateToolHelp32SnapShotの使用を確認します。

この関数は、プロセスのスナップショットを取得するだけでなく、たとえば、プロセスまたはモジュールのスレッドを取得するためにも使用できることを誰もが知っています。 しかし、この場合、これはほとんどありません。 プロセス列挙子EnumProcesses )の形式で何かを使用することはほとんどありません。

プロセスのリストを作成し、その中のプロセスを探したいという事実に落ち着きました。 これを行うには、デバッガーで見つかった関数を使用します。 [プロセス]タブでタスクマネージャーを開くと、簡単に検索できるようにすべてのプロセスがアルファベット順にソートされていることに注意してください。 したがって、システム内のすべてのプロセスの名前のリストを取得し、 アルファベット順に昇順で並べ替える必要があります 。 Delphiでコードを書き始めましょう。



最初に、2つのタイマーを使用してデモウィンドウアプリケーションを作成します。1つ目は、Windowsタスクマネージャーと同じ頻度(2秒に1回)のプロセスでリストを再処理します。 2番目は1秒間に1000回起動し、ディスパッチャ内のプロセスのリストの更新、したがって、非表示プロセスの外観を追跡するのに役立ちます。 また、フォームにボタンを追加します。



コード:


var ind:integer; h:Thandle; last_c:integer; procedure UpdateList(); var th:THandle; entry:PROCESSENTRY32; b:boolean; i,new_ind:integer; plist:TStringList; begin //   plist:=TStringList.Create; //    th := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS,0); entry.dwSize:=sizeof(PROCESSENTRY32); b:=Process32First(th,entry); while(b) do begin plist.Add(entry.szExeFile); b:=Process32Next(th,entry); end; //  ,    //   ,     plist.Sort; last_c:=plist.Count; //     'explorer.exe' for i:=1 to plist.Count-1 do if(LowerCase(plist[i])='explorer.exe') then new_ind:=i-1; //     if(new_ind<>ind) then ListView_DeleteItem(h,ind); ind:=new_ind; plist.Free; //        if(Form1.Timer2.Enabled=false) then Form1.Timer2.Enabled:=true; end; procedure TForm1.HideProcessButton(Sender: TObject); begin //     'SysListView32' h:=FindWindow(nil,'  Windows'); h:=FindWindowEx(h,0,nil,''); h:=FindWindowEx(h,0,'SysListView32',nil); //      Timer1.Enabled:=true; end; procedure TForm1.Timer1Timer(Sender: TObject); begin UpdateList(); end; procedure TForm1.Timer2Timer(Sender: TObject); begin //     if(ListView_GetItemCount(h)>last_c) then ListView_DeleteItem(h,ind); last_c:=ListView_GetItemCount(h); end;
      
      







実際、ここにコード全体があります。

たとえば、タスクマネージャーで、タスクマネージャー自体のプロセスを非表示にしましょう。



ここにあります:







[プロセスを非表示]ボタンをクリックすると、プロセスがリストから消えます:







システム内の存在の痕跡はすべて消去され、それ自体はプロセッサの深さのどこかで通常モードで静かに実行されます:)



アウトロ


まあ、私はこの方法が存在するに値すると思いますが、小さな修正が必要です。 はい、もちろん、それを使用してシステム自体からプロセスを隠すことはできませんが、すべてのユーザーの大部分が使用する標準のWindowsツールを非表示にすることもできます。

このトピックに少なくとも少し興味を持っていただければ幸いです。



じゃあね! そして、匿名性の力があなたにあるかもしれません...



All Articles