- ベストアンサー
ライセンスキーを登録したら EXE のバイナリの書き換えするには
Windows の 商用ソフトやシェアウェアによくあるのですが、 ライセンスキーを登録する画面で、ライセンスキーを入力すると、 設定ファイル(INIファイルとか)に書き込んだりレジストリの値を書き換えるのではなく、 EXEファイルそのものを書き換える(ように見える)ソフトがありますが(Eudor○などはそのようです) それってどういう仕組みか教えていただけないでしょうか? 自分でもそういうソフトを作ってみたいのです。 まあ、バイナリの書き換えをされるとクラックされてしまうでしょうけど、INIファイルに書いたりするよりはましかなと思いまして。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
まずは、exeファイルがどういう構造になっているのかを調べる必要がありますね。 構造とその意味がわかれば方法が思いつくのでは。 単純に言えばデータを持つ部分と、実行されるコードを持つ部分がありますので、 そのデータ部をうまく書き換えて、読めばいいことになります。 その位置をどうやって決めるかは、細かい構造と意味を知る必要があります。 それと、実行中のプログラムは書き換えられませんので、プログラムが自分自身を書き換えることはできません。 多分、実際に動くプログラムと、書き換えを行うプログラムが必要だろうと思います。 また、簡単に書き換えられることを防ぐなら、データチェックを行う、暗号化する等の手を使えば単純な書き換えなら防げるでしょう。 まあ、私もやったことありませんが。
その他の回答 (1)
- hitomura
- ベストアンサー率48% (325/664)
まず最初に、「やめとけ」と言っておきます。 実行ファイルのどこをどういう風に書き換えればいいのかというのはアセンブラ(というか機械語)の知識が必要になります。下手をすると、書き換えた実行ファイルが動かなくなるので、そういうことをするならば素直にレジストリを変更した方が安全です。 それでもやる、という場合、C言語ならば、単純に考えると次のようになります。 long thePlace = 1000; void register( void ) { FILE* fp=fopen( "foo.exe", "wb" ); fseek( fp, thePlace, SEEK_SET ); char buf[3]; buf[1]='b'; buf[2]='a'; buf[3]='r'; fwrite( buf, sizeof( char ), 3, fp ); fclose(fp); } 上の例はfoo.exeの頭からthePlace番目からのデータを"bar"に書き換えます。