2010.11.01 Monday | 10:28

  Flash(Flex)の、ExternalInterface.objectID が、Google Chrome で取得できなかったのですが トラブル

昨日、2010年10月31日に対応してました。ほんと、びっくりしてしまいました。
もともと、Flash の問題として発生していたみたいなんですが、えらい迷惑です。

[FP-383] ExternalInterface.objectID がセットされていません。

昨日のテストでは、IE や Firefox では発生せずに、Google Chrome で起こります。
( Flash は、10,1,85,3 )

仕方無いので FlashVars を併用する事にしていますが、ここ最近の問題は
それだけでは無く、Firefox のみ、Flash(Flex) で呼び出した JavaScript
の関数内で、alert を実行するとフリーズするという現象です。

昨日、古いPC の Opera でも発生したので全ての処理で、

setTimeout("alert('文字列')", 10 );

に書き換える必要がありそうです。
// *********************************************************
// 汎用型 クリップボードコピー用 Flash ボタン
// *********************************************************

package {

import flash.display.*;
import flash.events.*;
import flash.external.*;
import flash.system.*;
import flash.net.*;

// 表示用クラス 【Sprite】を継承
public class flashButton extends Sprite {

	[Bindable]
	[Embed("button.gif")]
	private var imgButton:Class;
	private var strid:String;

	// *********************************************************
	// コンストラクタ
	// *********************************************************
	public function flashButton():void {

		// IE:Object の id,それ以外 Embed の name
		strid = ExternalInterface.objectID;
		if ( strid == null ) {
			strid = stage.loaderInfo.parameters.objid;
		}
		// Firebug 用
		// ExternalInterface.call("console.log", strid );

		// stage の設定
		stage.scaleMode = StageScaleMode.NO_SCALE;
		stage.align = StageAlign.TOP_LEFT;

		// マウスイベント取得用
		var eventArea:Sprite = new Sprite();
		eventArea.x = 0;
		eventArea.y = 0;
		eventArea.buttonMode = true;	// ハンドカーソル
		addChild(eventArea);

		var imgPath:String = ExternalInterface.call( "orgCodeInit", strid );

		if ( imgPath == null || imgPath == "" ) {
			// デフォルトのボタン画像
			var myImg:Bitmap = new imgButton();
			myImg.x = 0;
			myImg.y = 0;
			eventArea.addChild(myImg);
		}
		else {
			var loader:Loader = new Loader();
			loader.load(new URLRequest(imgPath));
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, 
				function ():void {
					eventArea.addChild( loader );
				}
			);
		}

		eventArea.addEventListener(MouseEvent.CLICK,
			function(ev:flash.events.MouseEvent):void {

				// Firebug 用
				// ExternalInterface.call("console.log", strid );

				var shift_flg:String;
				var ctrl_flg:String;

				if ( ev.shiftKey ) {
					shift_flg = "1";
				}
				else {
					shift_flg = "0";
				}
				if ( ev.ctrlKey ) {
					ctrl_flg = "1";
				}
				else {
					ctrl_flg = "0";
				}

				var str:String = 
					ExternalInterface.call(
						"orgCodeGetForClipcopy",
						strid,
						shift_flg,
						ctrl_flg
					);

				// 戻された文字列に何か入っていたら
				// クリップボードにコピーして再び呼び出す
				if ( str != null && str != "" ) {
					System.setClipboard(str);
					ExternalInterface.call("orgCodeClipcopyEnd" );
				}


			}
		);

	}

}}






2010.10.23 Saturday | 12:48

  Twitter の IE 用プロテクト? トラブル

英文コメントから、そうかもしれないと思われるのですが・・・

「アプリの他のどのスクリプトもIE7のためにロードされる前に、これは絶対にセットされなければなりません」

Firefox には効果無く、Google Chrome ではそもそもこの記述が無いです。

結論から言うと、これを実行している事によってある種のブックマークレットが
動かなくなります。セキュリティ設定を変更すれば解除されるかも知れませんが、
IE のセキュリティ設定は複雑なので、メリットもありません。

IE のセキュリティホールを利用されないようにする為の対処だと
思うのですが、まあ、この後のスクリプト処理も面白そうなので読んで
みたくはなってきました。
<script type="text/javascript" charset="utf-8">
  // this must be set absolutely before any other script on the app is loaded for IE7
  document.domain = 'twitter.com';
</script>






2010.10.23 Saturday | 12:19

  Flex4 SDK のダウンロード トラブル

Flex3 の SDK のダウンロードページが見れなくなっていましたが、
復活して、同様の Flex4 SDK のダウンロードページです。

Flex4sdk

Flex4 SDK ダウンロード(www.adobe.com) からダウンロードしたバージョンと一致している事を
確認しています。

その他の Flex 関連のリンクは、flex3 チュートリアル からどうぞ。




2010.10.21 Thursday | 17:24

  Flex( swf ) から呼び出した JavaScript で alert するとフリーズする Firefox トラブル

以前は問題無かったのですが、ここ最近だとは思います。
ソースコードをクリップボードをコピーする為に、swf を使っていますが、
swf 側でクリックしないと動作しないので、JavaScript を呼び出しています。

しかし、一度呼び出してクリップボードへのコピーは完了するのですが、再び
呼び出して「コピーされました」と alert させるようにしていたところ、そこで
固まります。仕方ないので、Firefox の場合のみ。setTimeout で alert を実行
するようにしました。

完全に固まるのでたぶん setTimeout で改善されると思ったらやはりそのようでした。
<script type="text/javascript">
var clip_str = "\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9"+
		"\u306b\u30b3\u30d4\u30fc\u3055\u308c\u307e"+
		"\u3057\u305f\u3000\u3000\u3000";


function orgCodeInit(id) {
	return "";
}
function orgCodeGetForClipcopy(id,shiftFlg,ctrlFlg) {
	var str = id.replace(/_object/g,'')
		.replace(/_name/g,'');
	var codeWorkString = "";

	objPre = document.getElementById(str);

	if (window.navigator.appName.toLowerCase().indexOf("microsoft") > -1) {
		codeWorkString = objPre.innerText;
	}
	else {
		range = document.createRange();
		range.selectNode( objPre );
		codeWorkString = range.toString();
	}
	return( codeWorkString );
}
function orgCodeClipcopyEnd() {
	var userAgent = window.navigator.userAgent.toLowerCase();

	if (userAgent.indexOf("firefox") > -1) {
		setTimeout("alert(clip_str)", 10);
	}
	else {
		alert(clip_str);
	}
}

なんか、3.6.12 でなおったようなんですけど、ひょっとしたら Windows7 特有
かもしれないしなぁ・・・。どうせ処理的には setTimeout で問題無いので全部
変更しよっか考え中。





2010.07.21 Wednesday | 03:40

  Windows2000からWindowsXPへ「net send」する為に DCOM設定していていろいろ遭遇 トラブル

毎度立ちふさがる Microsoft の壁

Net_send

そもそも、これがしたかっただけなのですが、XP の MSG コマンドは、Windows2000 には無いし、
どうも使い勝手が良く解りませんでした。

ただ、自分のPC では通常 Net Send する必要も無いので Messenger サービスを停止しているので、
Net Send するほうからサービスを起動するのに WSH の WshRemote( DCOM ) を使おうとすると
いろいろ壁が立ちふさがっていました。

まず、Windows XP では、WshRemote のインストールが Microsoft の問題でされていないと言う
事で、それをインストールする為に、wscript -regserver という隠しコマンドみたいなのを実
行しなくてはなりません。これでやっと登録されます。
HKEY_CLASSES_ROOT\CLSID\{6F201542-B482-11D2-A250-00104BD35090}
レジストリエディタでアクセスされる側としての設定

何故かレジストリを直接設定します。わりとここまでは技術者ならすぐ情報
を得る事ができますが、一般の人では無理でしょうから、なんか意図的とし
か思えない堅牢ぶりです。しかし、まだこれで終わりでは無かったのです。
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Script Host\Settings]
"Remote"="1"

呼び出す側の設定

今回は、Windows2000 から XP の呼び出しなので、すぐにこれはできるように
なったのですが、当然テストとして XP から Windows2000 へのテストもします。
すると、

エラー:	書き込みできません。
コード:	800A0046

と言うエラー。宛先を変えると違うエラーが出るし、相手側のレジストリを無効
にすると、イベントビュアーにエラーが出るので、通信は成立しているので権限
しかありません。ずっといろいろやっていたのですが、結論として、呼び出すほ
う(XP)の「ある」チェックボックスを ON にします。


それが以下です。

Dcom_setting

dcomcnfg を実行して、一番左のウインドウを表示させて、マイコンピュータで
右クリックしてプロパティを表示後順にダイアログを開けてチェックします。
これで双方から WshRemote( DCOM ) が実行可能となります。この設定はどうや
ら Windows2000 には無いようなのですが、実際のところは良く解りません。

また、Firewall が動いている場合はさらに、WshRemote で実行するアプリケーシ
ョンの登録が必要だと思いますが、Firewall が必要な環境でわざわざするような
内容では無いし、仮に必要だとしてもそれなりの技術者だろうから問題は無いでし
ょう。自分の環境ではここまでです。たぶん XP 同士でもこれでうまく行くと思い
ます(調べたかぎりでは Windows XP のお話だったので)。

あとは、Windows7 のテストですが、それは明日以降です。

実行したコードは以下のようになります。
(Microsoft のサンプルのまま)
Dim Controller, RemoteScript
Set Controller = WScript.CreateObject("WSHController")
Set RemoteScript = Controller.CreateScript("test.vbs", "night")
WScript.ConnectObject RemoteScript, "remote_"
RemoteScript.Execute

Do While RemoteScript.Status <> 2 
	WScript.Sleep 100
Loop

WScript.DisconnectObject RemoteScript

Sub remote_Error
	Dim theError
	Set theError = RemoteScript.Error
	WScript.Echo "Error " & theError.Number & " - Line: " & theError.Line & _
	", Char: " & theError.Character & vbCrLf & _
	"Description: " & theError.Description
	WScript.Quit -1
End Sub

で、test.vbs はサービス起動です
Set WshShell = CreateObject( "WScript.Shell" )
WshShell.Run("sc start Messenger")

結局 DCOM が動く状態ならば、その OS に存在するコマンドで自分自身に
メッセージ送ってやれば、net send であろうが、msg であろうが関係無い
ですね。( Vista 以降 Messanger サービス無いみたいですし )

で、Windows7 で MSG コマンドを試してみました。ひどいもんです、デフォルトでは使えません


Windows7 : MSG コマンドを使えるようにするには
やたら壁かありますが、結構情報は少なめです。使う人もあまりいないから かもしれませんが、業務で使いたい場合、一括で設定したい場合もあるでし ょうから、その場合は、以下を参考にするといいと思います。 【Management】Msgコマンドを使用すると「セッション名の取得エラー5」 また、Microsoft では以下のようなページで該当レジストリエントリの設定 が必要であると記述されています。 手順 2: 仮想マシンをインストールして構成する さて、Windows7 で リモートスクリプトの実行 Windows7 でも、WshRemote はインストールされておらず、wscript -regserver が双方の PC で必要になります。後は XP と同じです。ただ、自分の環境では Windows Firewall は 停止しているので、もし動いている場合はグループポリシーの設定に関する記述をみつけて います。英文ですから、同じ場所を少し探しにくいですが、 「着信リモート管理の例外を許可する」だと思います WSH Running a remote script - PC Tools Community Forum



2009.05.20 Wednesday | 16:09

  GENOとJSRedir-Rとgumblar.cn トラブル

その存在に気づいたのは手書きブログなんで手広くやっとくもんだな・・と思いました。
直接被害は周りでも無いですが、今日学校のほうには警告してます。

いろいろ調べて、記事もこれを入れると3つ目になります。

1) adobeセキュリティアップデート(09/05/12)

2) ITProより、adobeとJSRedir-Rの関連性を示すニュースが今日発表されました


で、SHPHOS のブログでは gumblar.cn について書いてあります。

the obfuscated script tries to download dangerous code from a site called gumblar.cn.

GENOの判定サイトでは、martuz.cn とあります。いずれも中国ドメインです。

GENOの判定サイトでは、今日以下のような告知がされています
「当方確認のGENOウイルスのみに関して05/20 午前2時現在では1000%以外安全です。」


JSRedir-R に関しては、生コードが WEB 上でブログに貼ってあったりとかしてるのですが、
どういう判定で100% 以下の判定( 例えば75とか ) をしていたのか不思議でなりません。
できれば判定方法を技術的に公開してほしいです。で、手書きブログが一時存亡の危機にさらされていたと
十分想像できるのですが・・

ま、悪いのはウィルス作った奴です。
困ったもんです。


GENOの判定サイトでは、昨日無かった情報がいくつか追加されています。

1) 未確認の駆除方法
2) GENOウイルス詳細

GENOウイルス詳細は、昨日リンクはあったのですが、中がからっぽだったので
作成中だったんでしょう。その中に、前述の生コードが貼ってあったブログの
リンクがありました。・・・・・だから告知なのかな?

履歴読むと、
>2009 05/20 02:24 いろいろ修正しました。2ちゃんねるセキュリティ板の方、ありがとうございました。
>2009 05/19 21:35 http://lineage2.plaync.jp/ での数値に異常があったので修正。
>2009 05/19 20:12 亜種?に対応させるため仕様を変更したところfc2の自動挿入タグに
> 反応するようになってしまったのを修正!


ふ〜〜・・・ん。なるほど。
5/19の情報を元に、いろいろ修正した結果やっとウィルス確定できるようになったわけですね。
結構無責任を裏付ける状況証拠多いですが。

あ、ちなみにウチのサイトを75% 扱いにしたのでちょっと怒ってます。



現実のインフルエンザといい、なんか世の中先がおもいやられますね。



1/2 >>