2014年12月9日火曜日

ブラックボックスな処理の解析について

.net frameworkのアプリケーションであれば、逆コンパイルしてロジックをおえますが、ネイティブであれば、プロセスモニタを使用します。




using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{

//存在するレジストリキー
キー検索(@"SOFTWARE\Microsoft\.NETFramework");

//存在しないレジストリキー
キー検索(@"SOFTWARE\Microsoft\.NETFrameworkHogeHoge");

//存在しないファイル
ファイルアクセス(@"o:\readme.txt");

//存在しないファイル
ファイルアクセス(@"o:\hogehoge.txt");
}

private static void ファイルアクセス(string fileName)
{
try
{
Debug.WriteLine(File.ReadAllText(fileName));

}
catch (Exception ex)
{
Debug.WriteLine(ex.ToString());
//throw;
}
}

private void キー検索(string p)
{
// 操作するレジストリ・キーの名前
string rKeyName = p;
// 取得処理を行う対象となるレジストリの値の名前
string rGetValueName = "InstallRoot";

// レジストリの取得
try
{
// レジストリ・キーのパスを指定してレジストリを開く
RegistryKey rKey = Registry.LocalMachine.OpenSubKey(rKeyName);

// レジストリの値を取得
string location = (string)rKey.GetValue(rGetValueName);

// 開いたレジストリ・キーを閉じる
rKey.Close();

// コンソールに取得したレジストリの値を表示
Console.WriteLine(location);
}
catch (NullReferenceException)
{
// レジストリ・キーまたは値が存在しない
Console.WriteLine("レジストリ[" + rKeyName
  + "]の[" + rGetValueName + "]がありません!");
}
}
}
}

0 件のコメント:

コメントを投稿