Cell4win51 V.2.2.0.1

久しぶりに更新。

使いにくい面が多々あることは知っていたのですが、
私個人としてはあまり困っていなかったので更新していなかったのですが、
もういけません。

老眼が進んでいるようで、小さい文字が見えない。

で、Zoom機能を入れました。
更にキーマップのカスタマイズへの要望も多かったので、これも入れました。

お試しはこちらからどうぞ。

hundredsoftinfo.gif









全ての機能をONにしてしまうと、すぐにPCを壊されると思いますので、一部機能制限を掛けています。
(右クリック、キーボード操作、コマンド起動などはできません)

新幹線の中からでもリモートPC操作できるようなiアプリって他にあるのかな。


VistaやWin7で使うときは、UACが掛かるような操作はしない方が良いです。
(UACが終わる)120秒間何もできません。
Windows7だと、UACを出さずに一部の高ILソフトを起動できますが
高ILのWindowに対しては何もすることができません。

どうしても操作したい場合は、Cell4win51を管理者として実行してください。
但し、この場合でもUACの操作はできません。
Cell4win51を管理者で実行するときは、cell4winRegも管理者として実行して、再設定してください。

UACの操作を可能にするためには、幾つかの制限を回避しなければなりません。

(1) UACのセッションを変えない。
 コントロールパネル→システムとセキュリティ→管理ツール→ローカルセキュリティーポリシー
セキュリティオプションの「ユーザーアカウント制御:昇格のプロンプト時にセキュリティで保護されたデスクトップに切り替える」を「無効」にする。

(2) UIPIを回避するため、Cell4win51をuiAccess=trueで実行する。

(2)については、別記事 でも書きましたが、Windows7用にBuildが必要なことはもちろん、ルート証明書のインストールまで必要になるので、運用上簡単ではありません。

---------
【追記】
あまり良くない方法ですが、自分で作ったソフトであるから許されると思います。
(1) MT.exeでcell4win51.exeにuiAccess="true"のマニフェストを設定。
(2) 自己認証のルート証明書・コード署名に使う証明書のインストール
(3) SignToolでcell4win51改造版に署名(コード署名の証明書を使って)。
(4) Program Filesの下に改造したcell4win51を置く。
(5) 昇格のプロンプト時にセキュリティで保護されたデスクトップに切り替えるを「無効」

で、cell4win51を起動するとUACや管理者権限に影響されることなくPCを操作することができました。
ソースコードは直してませんし、Buildもしてません。

つまりプログラム側で改変されたことを検知して実行禁止する仕組みを持たないソフトの場合、割と簡単にマニフェストを変更され作者の意図しない動作をしてしまう可能性がある。のかな。




Tags: Manifest関連 Windows7(x64)関連
author : HUNDREDSOFT | - | -

自己署名でuiAccess=trueにする

自己署名を使って、uiAccess=trueを試してみた。

※Windows7 x64で確認しましたが、Vistaでは確認しておりません。


(1) VS2008でC++/CLRの適当なプロジェクトを作り、ビルド&起動確認。

wizardのままのFormだけで構いません。


(2) プロジェクトプロパティ→リンカ→マニフェストファイル

「UACによるUI保護のバイパス」を「はい」にする。


(3) ビルド&起動確認

「サーバーから紹介が返ってきました」と表示される。


(4) できたexeを "C:\Program Files\test2" にコピーする。

ここでは、"clitest4.exe" としています。

(5) 管理者でコマンドプロンプトを開き、

"C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat"

(パスを入れるのが面倒なので)


(6) フォルダ移動

cd "C:\Program Files\test2"


(7) ルート証明書を作る

makecert -n "CN=testroot,O=aaa,C=JP,E=foo@hoge.jp" -sv testroot.pvk -r testroot.cer

パスワードを聞いてきます。

clip_1.gif















最後にもう一度尋ねられるので、先ほどのパスワードを入れます。


(8) ルート証明書を使ってデジタル署名用の証明書

makecert -n "CN=test,O=aaa,C=JP,E=foo@hoge.jp" -sv test.pvk -ic testroot.cer -iv testroot.pvk test.cer

先ほどと同じようにパスワードを聞いてきます。rootとは別のパスワードが良いです。
フォルダはこんな感じ。

clip_18.gif


























(9) testroot.cerをダブルクリックしてルート証明書をインストール

clip_6.gif

































信頼されたルート証明機関にストアします。

clip_7.gif





























(10) 今度は、test.cerをダブルクリックして証明書をインストール

clip_8.gif































自動で個人に入ると思います。

clip_9.gif































(11) mmcでスナップインの追加→証明書を追加して

 信頼されたルート証明機関にtestroot
 個人にtestが追加されていることを確認します。

clip_20.gif































clip_21.gif




























(12) Signtool

先ほどのコマンドプロンプトで

Signtool signwizard

と入れると、デジタル署名ウィザードが始まります。

exeを選びます。

clip_12.gif





























カスタムを選びます。

clip_13.gif





























次の画面で「ファイルから選択」をクリック。

clip_14.gif




























X.509証明書の"test.cer"を選びます。

clip_15.gif


























次の画面で秘密キーファイルに、test.pvkを選びます。


パスワード画面後、「ルート証明書を含む証明のパスのすべての証明書」を選んで次へ。

clip_16.gif


























最後の完了でもう一度パスワードを入れます。


(13) 確認

C:\Program Files\test2\clitest4.exe

を動かすと、普通に起動します。

MT.exeで確認しても良いですし、バイナリを直接見ても、
uiAccess="true"が設定されていることがわかります。

clip_22.gif





























いきなりexeをバイナリで見る人もいないとは思いますが....

ルート証明書がないとやっぱり「サーバーから紹介が返ってきました」と表示される。

この方法だとBuildの度にサインしなければなりませんが、
2回目以降は、証明書はできているので、Signtool signwizard だけで良いです。
入力するものが決まれば、コマンドプロンプトでSigntoolを動かせるので、
ビルド後のイベントに追加して自動化できます。

念のため書くと、uiAccess="true"にしたコードは動作はしますが、
・証明書のインストールが必要。
・Windowsソフトウェアロゴを得るには、MSの特別許可が必要。

ということなので、汎用ソフトというより開発ツールの類でしょうか。




Tags: プログラムメモ
author : HUNDREDSOFT | - | -

requestedExecutionLevelのuiAccess

前回の記事で書いたrequestedExecutionLevelの
2番目のエレメントuiAccessについて

uiAccess="true" にすると上位権限へのメッセージ送信が可能になります。

つまり標準権限で起動したアプリでも、管理者権限で実行中のアプリに対して
ドラッグ&ドロップが可能になります。いわゆるUIPI問題の回避策です。

例えばExplorerで uiAccess="true" に設定できれば、管理者権限で起動したアプリにドラッグ&ドロップできるようになるので、こういった設定があればよいのですが、セキュリティ効果を半減させてしまうのでバランスが難しいです。

但し、uiAccess="true" には2つの条件があります。

(1) 署名付きのプログラムである。
(2) %WinDir% または、%ProgramFiles%フォルダーに保存されている。


単に MT.exe で変更しただけでは、条件を満たしていないので、
「サーバーから紹介が返ってきました」と表示されます。
(この文言が適当なのでしょうかね。)

オープンソースや自作ソフト・自社製品以外で(1)を満たすことはまず無理なので、一般のアプリケーションやMSのプログラムを uiAccess="true" に書き換えることは無理でしょう。

バイナリを直接いじるという手もありますが、ダイジェスト値が変わってしまうので、やはり認証されないと思います。

別プロセスでエクスプローラを管理者権限で立ち上げて、
そこからドラッグ&ドロップするという手はありますが、

ドラドロするようなアプリは、メニューにFileOpenがあるのが普通なので
そこまでするなら、FileOpenを使った方が簡単な気がする。

ドラッグ&ドロップだけでも何とかならないですかね。

----------------
【追記】
自己署名でuiAccess=true を試される方は、こちら




Tags: プログラムメモ  Windows7(x64)関連
author : HUNDREDSOFT | - | -

ファイルの関連付け

どうしてもXPモードだと、アプリの起動だけでなく実行速度も落ちてしまいます。
CPUも1個しか割り当てられませんから。

で、できるだけWin7上にアプリをインストールするわけですが、
「管理者で実行」 (高IL)しないとまともに動作しないアプリもあります。
(※IL: Integrity Level)

この場合の欠点は、

(1) ドラッグ&ドロップが効かない。
(2) ファイルの関連付けをしても標準権限(中IL)でしか起動できないアプリがある。


(1)は、エクスプローラーが標準権限(中IL)で動作しているので
中ILから高ILへの通信はUIPIによって制限されるからです。
結果としてドラッグ&ドロップは無視されます。

(2)の場合「管理者で実行」しないと起動できないようなアプリだと、
標準権限で起動してエラー終了します。

(2)は、関連付けられたプログラムを管理者権限で動作させることができれば
エクスプローラから関連ファイルをダブルクリックして起動させることができます。

単独でアプリを動かす際は、管理者として起動を選ぶか、
ショートカットなら、プロパティ→詳細設定で「管理者として実行」にチェックを入れれば事足りますが、
ファイルの関連付けからの起動には、このような設定が見当たりません。
(どこかにレジストリ設定でもあれば良いのですが...)

シールドアイコンが付いているようなアプリであれば、常に管理者として起動できます。(シールドアイコン:アイコンの右下に黄色と青の楯が付いたもの。例えばコンピュータ→右クリックの管理。)
shield.jpg
自分で作ったものでもない一般のアプリをシールドアイコン付きにすることができれば、ひとつの解決策となります。

----------

ここから先は、全てのアプリで試した訳ではなく、動作を保障するものではありません。また、アプリケーションのライセンスによっては、違反行為とみなされる場合もありますのでご注意ください。

前提として、MT.exe (Manifest Tool) が必要になります。
(VS2005やVS2008の製品版には付いています。VS2008のExpress版にも入っているようです。)

最初にコマンドプロンプトで

"C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat"

を行うとMTのパスを入れなくて済みます。

----------

今回の問題が発生するようなアプリには、
マニフェストファイルは添付されていないと思います。
まず、該当アプリケーションのマニフェストを作ります。

mt.exe -inputresource:target.exe;#1 -out:target.manifest

次にtarget.manifestを編集します。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false"></requestedExecutionLevel>
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>

が必要な部分です。

trustInfoがなければ、trustInfoをそのまま追加します。
リソース自体がない場合は、そのまま追加します。

大事なところは、requestedExecutionLevel level="requireAdministrator"
です。

書き換えたマニフェストでtarget.exeのリソースを書き換えます。

mt.exe -manifest target.manifest -outputresource:target.exe;#1

#1 はリソースIDですが、通常は1です。
複数のリソースを持つものもあります。
(PE Explorerを使うとより詳しく調べられます。)

mt.exeで失敗しなければ、シールドアイコン付きのアプリに変わります。

実際に作業される場合は、Program Filesの下ではなく、
別のユーザーフォルダにコピーして作業してください。
変換後、Program Filesの下のオリジナルの.exeをrenameして、
変換した.exeファイルをコピーしてください。


MTさえ持っていれば大した作業ではありません。
ドラッグ&ドロップは無理ですが、
ファイルの関連付けの問題が解消できるケースもあります。

----------
【追記】
Openソース系でwin32バイナリを拾ったものは、プログラム内にダイジェスト値を持っているものが多く、こういうアプリは書きかえるとエラー終了します。Openソース系は自分でBuildするしかないです。




Tags: Manifest Windows7(x64)
author : HUNDREDSOFT | - | -

はじめに

Windows7のRTM版が公開され、現在メインで使用しているXP環境から7環境への移行を行っています。

メモリ価格が下がっているので、もう32bitにこだわる必要もないだろう。
ということで、今後数年使えそうな64bit対応PCを探すことから始まりました。

で、Dell Studio XPSを入手。

CPU: i7
メモリ: 12GB
Graphic: Radeon HD4870




Tags: VirtualPC関連 Manifest関連 Adobe関連 Windows7(x64)関連
author : HUNDREDSOFT | - | -