.Net Framework のハック (OSバージョン偽装) その1

.Net Framework で作成したプログラムは

System.OperatingSystem os = System.Environment.OSVersion;
String getOs = os.ToString()

とかで取得できる。

実は、この関数が呼ばれた時ではなく、プログラムが起動されたときに GetVersionExW をコールして、文字列を生成してメモリ内に持っていることが解析の結果わかった・ω・

Environment クラス (System)
MSDNを見ると mscorlib.dll  がその役割を担っていることになっているが、実際にコールしてるのは
mscorlib.ni.dll である。

osx
ところが、.Net Framework はバージョンチェックで Vista だと判定すると専用APIをコールしようとして、クラッシュするので、Vista のチェックをしているアプリをOSバージョンの偽装をするとクラッシュしてしまう。

.Net 2.0時代のアプリであれば、カレントフォルダに kernel32.dllのラッパーを仕掛けておけばOSバージョンだけ偽装しつつクラッシュさせないように動作させることが可能なのだが…。

.Net 4.0アプリの場合この方法はうまくいかないのだ。

というわけで、方法をどうするか…。

つづく

おすすめ

2件のフィードバック

  1. 通行人 より:

    管理人様、初めましてです。
    一つお願いが有ります。
    LISMO portの件です。
    こちらの過去ログを拝見しLISMO port5.1をWindows8.1にインストールする件では助かりました。
    まずその件でお礼を申し上げます。
    有難うございます。
    そして、今夏、Windows10がリリースされます。
    そこで、OS別のハッシュ値をどこでどう見つけるのかが分かりません。
    あるいは、Windows10へのインストール方法に付いてもガイダンスしていただけると助かります。
    お手数をおかけしますが、よろしくお願いいたしますm(_)m

  2. 通行人 より:

    本日Windows7をWindows10にUpし
    教えて頂いたハッシュ値を元にLISMO Portのインストールが無事に完了いたしました。
    管理人の黒猫翼様、有難うございましたm(_)m
    現在の所、動作上では特に問題は有りません。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です