コグノスケ


link 未来から過去へ表示(*)  link 過去から未来へ表示

link もっと前
2008年12月8日 >>> 2008年12月8日
link もっと後

2008年12月8日

ラテールのプロテクト

ラテールのゲームプロセスが見えるようになりました。解き方は書いたらまずそうなので書きません。スマートな方法でもないし…。

以前書き散らした通り、Gamepotプロテクトは比較的単純なrootkitです。具体的には以下のようにしてプロセスを隠蔽しています。

プロセスの一覧

Gamepot rootkit(以降GR)は簡単に言うと、プロセス一覧を取得するサービスコール(システムコール?)をフックし、ゲームプロセスが見えないように書き換えてしまう方法です。

カギとなるのはNtQuerySystemInformationです。NtQuerySystemInformationは様々な機能を持ちますが、その内の一つにプロセスの一覧を取得する機能があります。

プロセス一覧を取得する際、NtQuerySystemInformationは以下の構造体の配列を返します。


SYSTEM_QUERY_INFORMATION構造体

先頭のNextEntryOffsetはプロセス情報のサイズをバイト単位で表します。現在のプロセス情報のポインタにNextEntryOffsetだけ足せば、次のプロセス情報の先頭を指す、という寸法です。
最後のプロセス情報のNextEntryOffsetには0が入っているので、区別できます。


SYSTEM_QUERY_INFORMATION *pinfo;

while (pinfo) {
    //何かしらの処理をする
    ...
    
    if (pinfo->NextEntryOffset) {
        pinfo = (SYSTEM_QUERY_INFORMATION *)((unsigned char *)pinfo + pinfo->NextEntryOffset);
    } else {
        pinfo = NULL;
    }
}

なぜこんな面倒な方法をとるかというと、プロセス情報のサイズが不定だからです。プロセス情報はスレッド情報を含んでおり、スレッド情報の要素数はプロセスが持つスレッド数によって増減するためです。

rootkitによるプロセスの隠蔽

GRはシステムコールテーブル(※)を書き換え、NtQuerySystemInformationをフックします。

NtQuerySystemInformationが呼ばれてプロセス一覧が取得されるときに、ゲームプロセスの前に位置している要素を書き換えることで、ゲームプロセスを隠蔽します。下図を参照ください。


NtSystemQueryInformationのフックと書き換え

オレンジ色のNextEntryOffsetを、プロセス情報2つ分(書き換え対象のプロセス情報と、GRが隠したいプロセス情報)のサイズに改竄します。

改竄された情報を用いて、プロセス情報を先頭から処理しようとすると、白抜きしたプロセス(ゲームプロセス)が飛ばされ、認識できなくなります。

つまりGRによってプロセスが隠蔽されてしまったのです。

(※)WindowsではSystem Service Descriptor Table(SSDT) と呼ばれています。

弱点

しかしカーネル内のプロセス構造体はそのままなので、プロセスIDを直撃ちして、OpenProcessすると成功してしまいます。とはいえ、ユーザ空間から隠されたプロセスIDを知る方法はないので、メモリを書き換えてくるようなプロセスから身を守るにはこのくらいの機能で十分かもしれません。

編集者:すずき(2008/12/09 00:55)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
2008年12月8日 >>> 2008年12月8日
link もっと後

管理用メニュー

link 記事を新規作成

<2008>
<<<12>>>
-123456
78910111213
14151617181920
21222324252627
28293031---

最近のコメント5件

  • link 24年6月17日
    すずきさん (06/23 00:12)
    「ありがとうございます。バルコニーではない...」
  • link 24年6月17日
    hdkさん (06/22 22:08)
    「GPSの最初の同期を取る時は見晴らしのい...」
  • link 24年5月16日
    すずきさん (05/21 11:41)
    「あー、確かにdpkg-reconfigu...」
  • link 24年5月16日
    hdkさん (05/21 08:55)
    「システム全体のlocale設定はDebi...」
  • link 24年5月17日
    すずきさん (05/20 13:16)
    「そうですねえ、普通はStandardなの...」

最近の記事3件

  • link 24年6月27日
    すずき (06/30 15:39)
    「[何もない組み込み環境でDOOMを動かす - その4 - 自作OSの組み込み環境へ移植] 目次: RISC-V目次: 独自OS...」
  • link 22年12月13日
    すずき (06/30 15:38)
    「[独自OS - まとめリンク] 目次: 独自OS一覧が欲しくなったので作りました。自作OSの紹介その1 - 概要自作OSの紹介...」
  • link 21年6月18日
    すずき (06/29 22:28)
    「[RISC-V - まとめリンク] 目次: RISC-VSiFive社ボードの話、CoreMarkの話のまとめ。RISC-V ...」
link もっとみる

こんてんつ

open/close wiki
open/close Linux JM
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 2021年
open/close 2022年
open/close 2023年
open/close 2024年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報

合計:  counter total
本日:  counter today

link About www2.katsuster.net
RDFファイル RSS 1.0

最終更新: 06/30 15:39