安直なプログラムを書きました。
以下にソースを掲載します。
#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でもプレイしてようかと思います。


コメント