ツール作成

安直なプログラムを書きました。
以下にソースを掲載します。

#include <cstdio>
#include <cstdlib>
#include <cstring>

int main(int argc_, char **argv_)
{
  // 基本ブロックサイズ
  const int BSIZE = 4096 * 64;
  char cmd[256];
  // 文字列比較を簡単にするため、マージンを含める
  char *buffer = new char[BSIZE + 256];
  FILE *fp;
  int max_count = ((1024 * 1024) / BSIZE) * 1024 * 30;
  bool match;
  int readed;

  for (int n = 0; n < max_count; n++) {
    // バッファの初期化
    ::memset(buffer, 0, BSIZE + 256);
    // 外部コマンドの作成と実行
    ::sprintf(cmd, “dd if=/dev/hdb2 of=restore.img bs=%d count=1 skip=%d”, BSIZE, n);
    system(cmd);
    // ダンプされたデータの読み込み
    fp = ::fopen(“restore.img”, “rb”);
    if (! fp) {
      ::fprintf(stderr, “can’t open restore.img\n”);
      break;
    }
    readed = ::fread(buffer, 1, BSIZE, fp);
    ::fclose(fp);

    // 検査
    match = false;
    for (int p = 0; p < BSIZE; p++) {
      if (::memcmp(buffer + p, “
“, ::strlen(”
“))  0 ||
        ::memcmp(buffer + p, "Masayuki", ::strlen("Masayuki"))  0 ||
        ::memcmp(buffer + p, “<?php”, ::strlen(“<?php”))  0 ||
        ::memcmp(buffer + p, "webdb", ::strlen("webdb"))  0)
      {
        match = true;
        break;
      }
    }

    if (match) {
      // ヒット時のコマンドを保存
      fp = ::fopen(“salv.log”, “a”);
      if (fp) {
        ::fprintf(fp, “%s\n”, cmd);
        ::fclose(fp);
      }
    }

    if (readed < BSIZE) {
      break;
    }
  }

  delete [] buffer;
  return 0;
}

とりあえず全データの検査が終わるまでMARIONETTEでもプレイしてようかと思います。

コメント

タイトルとURLをコピーしました