PETROOM大改造
【萌え萌えキャラクターズと遊ぼー。】

コマンドを暗号化しよう

今まで気付いていなかった方が気付いてしまう危険も含む、この内容(爆)
なので、説明は一応なしです(^^;
改造方法のみですが、ご了承下さいませ。

改造のベースは、ver2.3です。
改造具合により、特にペットフォーム近辺が変わっている方がいらっしゃると思います。
一番多いと思われる改造に付きましては、その部分だけ、一番最後に掲載してありますので、
ご確認下さいませ。
それ以外で、よく分からない方は、サポートBBSまでどうぞ。

スクリプトの最初の方で…。
# データファイル名
$userdata = './user.dat';               # 来客者情報が入ってるデータ
$petdata  = './pet.dat';                # ペットの情報が入ってるデータ
$lockkey  = 1;                          # ファイルのロック(0=no 1=mkdir 2=symlink) Amend Ver 2.2
$lockfile = './petlock';                # ロックファイル名
$method   = 'POST';                     # POSTかGETを選択
$salt=12345678;                         # 換字暗号化・解読 任意の数値(8桁程度)


ペットフォームの下の方で…。
        print "<tr>\n";
        print "<td colspan=\"2\">\n"; 
        print "<div align=\"right\">\n";
        &input('hidden','name',$FORM{'name'},'','');
        &input('hidden','pass',$FORM{'pass'},'','');
#        &input('hidden','good',"$scheduledsr[$timeafter]$plusfeed",'','');
#        &input('hidden','bad',"$schedulednt[$timeafter]$minusfeed",'','');
        $water=time;
        &init_cipher;
        $plustxt = &cipher("$scheduledsr[$timeafter]$plusfeed");
        $minustxt = &cipher("$schedulednt[$timeafter]$minusfeed");
        &input('hidden','key',"$water",'','');
        &input('hidden','good',"$plustxt",'','');
        &input('hidden','bad',"$minustxt",'','');
        &input('submit','','OK!','','<br>');
        print "</div>\n";
        &tablebottom;
    } else { $actionflag = 1 }
    &bodybottom;
    &openoutpetdata;
    &footer;
}


アクションにて…。
    &header;
    &title;
    &bodytop("ペットデータ($num代目)");
    &petdata;
    srand(time);
    $rnd = int(rand(100) + 1); # Amend Ver 2.2
    $fa = $FORM{'mode'};
    $water = $FORM{'key'};
    &init_cipher;
    $plustxt = &cipher($FORM{'good'});
    $minustxt = &cipher($FORM{'bad'});

    if ($fa eq 'play') { $lastplay = time }
    if ($fa eq 'out')  { $out = 1; $outdate = time }

    if ($rnd <= $rnd_border) {
        &petnow($rnd_img,$rnd_msg);
        $love--;
    }
#    elsif ($FORM{'good'} =~ /$fa/) {
    elsif ($plustxt =~ /$fa/) {
        &petnow($good_img{$fa},$good_msg{$fa});
        $love++;$good++;
        if ($fa eq "feed") { $lastfeed = time }
    }
#    elsif ($FORM{'bad'} =~ /$fa/) {
    elsif ($minustxt =~ /$fa/) {
        &petnow($bad_img{$fa},$bad_msg{$fa});
        $love--;$bad++;
    }
    else {
        &petnow($else_img{$fa},$else_msg{$fa});
    }

    &openoutpetdata;


そして、プログラムの一番最後に…。
# ------------------------- #
# Sub Get Time
# 時間の取得
# ------------------------- #
sub gettime {
    ($sec,$min,$hour,$dy,$mon,$year,$wday,$yday,$isdst) = localtime($_[0]);
    $year += 1900 ;
    $mon = $mon + 1;
    @week = ('日','月','火','水','木','金','土');

    $date = "$year年$mon月$dy日\($week[$wday]\)";
}

# ------------------------- #
# 暗号表作成サブ
# 使い方:init_cipher;
# 暗号化・解読サブの為に一度だけ実行
# ------------------------- #
sub init_cipher{
	# 乱数初期化(種が一致すれば同じ乱数列が得られる)
	srand($salt + $water);
	# 暗号表作成
	@cipher_list = sort {rand(1) <=> rand(1)} ('A'..'Z','_','a'..'z');
}

# ------------------------- #
# 暗号化・解読サブ
# 使い方: $x = &cipher(文字列);
# 引数の文字列を暗号化/解読
# init_cipherで一度暗号表を作っておく必要有
# ------------------------- #
sub cipher{
	# 引数読み込み
	$work = shift;
	
	# 暗号の対応テーブルを作成
	# @cipher_listがABCDEFとした場合,
	# list1 : ABCDEF
	# list2 : FEDBCA
	# となって,
	# A→F , F→Aとペアになって対応するので
	# 暗号化・解読のどちらにでも使える。
	
	$list1 = join "",@cipher_list;
	$list2 = join "",reverse @cipher_list;
	eval '$work =~ '."tr/$list1/$list2/;";
	return $work;
};

スクリプトサンプル提供は、ゆ〜り師匠でございました。
本当にありがとございますっっっ!!!



一番多いと思われる、ペットフォームの下の方…。
        print "<tr>\n";
        print "<td colspan=\"2\">\n"; 
        print "<div align=\"right\">\n";
        &input('hidden','name',$FORM{'name'},'','');
        &input('hidden','pass',$FORM{'pass'},'','');
#       &input('hidden','good',"$scheduledsr[$timeafter]$plusfeed",'','');
#       &input('hidden','bad',"$schedulednt[$timeafter]$minusfeed",'','');
        $water=time;
        &init_cipher;
        if ($feedflg == 0) {
#            &input('hidden','good',"$scheduledsr[$timeafter]",'','');
#            &input('hidden','bad',"$schedulednt[$timeafter]",'','');
            $plustxt = &cipher("$scheduledsr[$timeafter]");
            $minustxt = &cipher("$schedulednt[$timeafter]");
        }
        else {
#            &input('hidden','good',"$plusfeed",'','');
#            &input('hidden','bad',"$minusfeed",'','');
            $plustxt = &cipher("$plusfeed");
            $minustxt = &cipher("$minusfeed");
        }
        &input('hidden','key',"$water",'','');
        &input('hidden','good',"$plustxt",'','');
        &input('hidden','bad',"$minustxt",'','');
        &input('submit','','OK!','','<br>');
        print "</div>\n";
        &tablebottom;
    } else { $actionflag = 1; }