|
↓ダウンロードで試して、自分のサイトに実装して試してみると良いでしょう
ブラウザでダウンロード
<?
if ( $_POST['target'] != '' ) {
$rep = trim(str_replace("\\\\","\\", $_POST['target']));
setcookie("reg", $rep, time()+3600*24*30);
header( "Content-Type: application/octet-stream" );
header( "Content-disposition: attachment; filename=regopen_". uniqid() . ".vbs" );
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );
foreach( $_GET as $Key => $Value ) {
$_POST[$Key] = $_GET[$Key];
}
foreach( $_POST as $Key => $Value ) {
$_POST[$Key] = str_replace("\\\\", "\\", $Value );
$_POST[$Key] = str_replace("\\'", "'", $_POST[$Key] );
$_POST[$Key] = str_replace("\\\"", "\"", $_POST[$Key] );
}
$vbs = <<<EOD
strParam = "{$rep}"
' レジストリ書き込み用
Set WshShell = CreateObject( "WScript.Shell" )
' WMI用
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\cimv2")
' レジストリエディタが最後に開いていたキーの登録を行います
strPath = "Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\Regedit\\LastKey"
if GetOSVersion() >= 6 then
strRegPath = "コンピュータ\\" & strParam
else
strRegPath = "マイ コンピュータ\\" & strParam
end if
' 既に regedit が実行中の場合はいったん終了させます
Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = 'regedit.exe'")
For Each objProcess in colProcessList
' 最後のウインドウの位置とサイズを保存する為の終わらせ方
WshShell.AppActivate("レジストリ エディタ")
Wscript.Sleep(500)
WshShell.SendKeys ("%{F4}")
Wscript.Sleep(500)
' 上記終わらせ方が失敗した時の強制終了
on error resume next
objProcess.Terminate()
on error goto 0
Next
WshShell.RegWrite "HKCU\" & strPath, strRegPath, "REG_SZ"
' レジストリエディタを起動します
Call WshShell.Run( "regedit.exe" )
' レジストリエディタが終わるまで待つ場合は以下のようにします
' Call WshShell.Run( "regedit.exe", , True )
REM **********************************************************
REM OS バージョンの取得
REM **********************************************************
Function GetOSVersion()
Dim colTarget,str,aData,I,nTarget
Set colTarget = objWMIService.ExecQuery( _
"select Version from Win32_OperatingSystem" _
)
For Each objRow in colTarget
str = objRow.Version
Next
aData = Split( str, "." )
For I = 0 to Ubound( aData )
if I > 1 then
Exit For
end if
if I > 0 then
nTarget = nTarget & "."
end if
nTarget = nTarget & aData(I)
Next
GetOSVersion = CDbl( nTarget )
End Function
EOD;
print str_replace("\n","\r\n", $vbs);
}
else {
header( "Content-Type: text/html" );
$_COOKIE['reg'] = trim(str_replace("\\\\","\\", $_COOKIE['reg']));
?>
<HTML>
<HEAD>
<META http-equiv="Content-type" content="text/html; charset=shift_jis" />
<TITLE>指定した位置でレジストリエディタを開く為のスクリプトをダウンロード</TITLE>
<STYLE type="text/css">
BODY {
margin: 0;
font-size: 12px;
}
h1 {
font-size: 13px;
border-style: solid;
border-width: 1px;
border-color: #9192A3;
padding: 7px 0px 8px 13px;
background: url(http://winofsql.jp/image/h1.png) repeat-x 0px 0px;
}
span {
color: #000000;
}
</STYLE>
</HEAD>
<BODY>
<FORM
method="POST"
>
<H1>指定した位置でレジストリエディタを開く為のスクリプトをダウンロードします</H1>
<div style='margin-top:-10px;padding-left:8px;'>
<INPUT
id="reg"
type="text"
name="target"
style='width:600px;'
value="<?= $_COOKIE['reg'] ?>"
>
<INPUT
type="submit"
name="send"
value="送信"
>
<br><br>
例: <INPUT
type="button" value="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft"
onClick='document.getElementById("reg").value=this.value'
style='width:300px;vertical-align:middle'
>
<script type="text/javascript">
if (window.navigator.userAgent.toLowerCase().indexOf("msie") > -1) {
var str="";
str+="<INPUT style='vertical-align:middle' type=button value=\"IE専用貼り付けボタン\" onClick='document.getElementById(\"reg\").value=clipboardData.getData(\"Text\")'> ";
document.write( str );
}
</script>
<br>
<span>( クリップボードから貼り付けるのが通常です )</span><br>
</div>
</FORM>
</BODY>
</HTML>
<? } ?>
|
|
<?
if ( $_POST['target'] != '' ) {
session_start();
$rep = trim(str_replace("\\\\","\\", $_POST['target']));
setcookie("reg", $rep, time()+3600*24*30);
$str = <<<VBS
Set WshShell = Wscript.CreateObject( "WScript.Shell" )
strPath = "Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\Regedit\\LastKey"
strRegPath = "マイ コンピュータ\\$rep"
WshShell.RegWrite "HKCU\\" & strPath, strRegPath, "REG_SZ"
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\cimv2")
Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = 'regedit.exe'")
For Each objProcess in colProcessList
objProcess.Terminate()
Next
Call WshShell.Run( "regedit", , True )
VBS;
$flname = "regopen" . session_id() . ".vbs";
file_put_contents($flname,$str);
header( "Location: $flname" );
}
else {
header( "Content-Type: text/html" );
$_COOKIE['reg'] = trim(str_replace("\\\\","\\", $_COOKIE['reg']));
?>
<HTML>
<HEAD>
<META http-equiv="Content-type" content="text/html; charset=shift_jis" />
<TITLE>指定した位置でレジストリエディタを開く為のスクリプトをダウンロード</TITLE>
<STYLE type="text/css">
BODY {
font-size: 12px;
}
</STYLE>
</HEAD>
<BODY>
<FORM
method="POST"
>
● 指定した位置でレジストリエディタを開く為のスクリプトをダウンロードします<br>
レジストリのパスを入力してください。<br>
例: <INPUT
type="button" value="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft"
onClick='document.getElementById("reg").value=this.value'
style='width:300px;vertical-align:middle'
><br>
( クリップボードから貼り付けるのが通常です )<br>
<INPUT
id="reg"
type="text"
name="target"
style='width:400px;'
value="<?= $_COOKIE['reg'] ?>"
>
<INPUT
type="submit"
name="send"
value="送信"
>
</FORM>
↓regopen.lzh ( このファイル ) のダウンロード<br>
<IFRAME
src="http://lightbox.on.coocan.jp/fileDownload.swf?dir=php%2Fonline%2Fregopen&file=regopen&ext=lzh"
frameborder="no"
scrolling="no"
width="250"
height="70"
></IFRAME>
<br><br>
※ 自分のサイトに置く場合は IFRAME を削除するとダウンロードコンテンツが削除されます
</BODY>
</HTML>
<?
$DirHandle = @opendir("./");
if ( $DirHandle ) {
$Target = readdir( $DirHandle );
while( $Target !== false ) {
if ( $Target != "." ) {
$ext = strrchr( $Target, "." );
$ext = strtolower($ext);
if ( $ext == ".vbs" ) {
$astamp = stat($Target);
$laststamp = $astamp[9];
if ( $laststamp < time() - 300 ) {
@unlink($Target);
}
}
}
$Target = readdir( $DirHandle );
}
closedir( $DirHandle );
}
}
?>
|
|