# Windows PowerShell を用いた指定ファイル書き換え例 # C#言語のソースコードを Windows PowerShell 上で定義して、その処理を実行させる # 以下の例は「うさみみハリケーン」付属の解析練習用「UsaTest2.EXE」を対象としている # 書き換え前に、下記対象ファイル「UsaTest2.EXE」のパスを、実行環境に合わせて修正する # 以下のテキスト全体をコピーして、Windows PowerShell の画面に貼り付けると書き換えが実行される # 初回書き換え時に「UsaTest2.EXE」のバックアップ「UsaTest2.EXE.bak」を作成する # 起動した実行ファイルや、他のアプリケーションで排他的に使用中のファイルは、書き換えに失敗する # 「#」は Windows PowerShell でのコメントアウトで、複数行ならば<# #>で囲む # 書き換え対象ファイルのパスを指定(実行環境に合わせた修正が必要) $outputPath ="C:\APP\UsaMimi_v044\UsaTest2.EXE" # 書き換え処理(メソッド)をC#言語で定義 Add-Type -TypeDefinition @" using System; using System.IO; using System.Text; public class BinaryWriterExample { public static void WriteBinaryFile(string filePath) { // 「//」はC#でのコメントアウトで、複数行ならば/* */で囲む // 指定されたファイルが存在するか確認する if(File.Exists(filePath) == false) { Console.WriteLine("指定ファイルが存在しません"); return; } // バックアップを作成する(上書きなし) if(File.Exists(filePath + ".bak") == false) File.Copy(filePath, filePath + ".bak"); using (FileStream fs = new FileStream(filePath, FileMode.Open)) using (BinaryWriter writer = new BinaryWriter(fs)) { // オフセットを指定する writer.Seek(0x993, SeekOrigin.Begin); // 整数値を書き込む例 // これは「UsaTest2.EXE」で固定アドレスのパラメータに設定された上限(値1000)を変更している writer.Write(999999999); // 別のオフセットを指定する // 書き込み後に、オフセットが書き込み箇所の直後に自動で変更される writer.Seek(0x2000, SeekOrigin.Begin); // 浮動小数点数を書き込む例 writer.Write(1.250F); writer.Write((double)1.250); // 文字コードを指定して文字列を書き込む例 var outbuffer = Encoding.Unicode.GetBytes("ABC123あいう猫耳"); writer.Write(outbuffer); Encoding sjisEnc = Encoding.GetEncoding("Shift_JIS"); outbuffer = sjisEnc.GetBytes("ABC123あいう猫耳"); writer.Write(outbuffer); outbuffer = Encoding.UTF8.GetBytes("ABC123あいう猫耳"); writer.Write(outbuffer); //writer.Write("あいうえお");//これだと文字数情報が付加されてしまう // バイト列を書き込む例 byte[] dataToWrite = new byte[] { 0x01, 0x02, 0xFF, 0x42 }; writer.Write(dataToWrite); Console.WriteLine("指定ファイルを書き換えました"); } } } "@ # 書き換え実行(メソッド呼び出し) [BinaryWriterExample]::WriteBinaryFile($outputPath) Write-Host "処理を終了しました"
Copyright © 2025 Digital Travesia |