- 締切済み
ソフトの多重起動制限
以前知り合いに作ってもらったWindow用のソフトを愛用してるのですが 同時に3個までしか起動できず、4個目を起動すると3個起動してるので動きませんとメッセージが出ます。 その知り合いとはもう疎遠になってしまったので直してもらうことが出来ません。 VC++ mutex で排他制御を行っていることまではわかったのですが バイナリエディタでこのソフトの中身を書き換えて同時起動の回数を変えることは出来ますでしょうか? また、出来る場合はどこをどのように変えればいいかというのは簡単にわかるものでしょうか? よろしくお願いします。 ※もらった時に自己責任で改造は自由にという許可はもらってあります。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- gerugugu84
- ベストアンサー率37% (29/78)
> ソースコードとはバイナリで開いた時の数字の羅列のことでしょうか? それって実行モジュール(.exe)を開いてませんか? ソースコードはC(C++)なら.cや.cppなどの拡張子のファイルです。 > プログラミングとか全くわからない僕のような人でも簡単にわかりますか? 少なくともバイナリエディタで実行モジュールを直接変更するのは無理です。 マシン語を習得した上で実行モジュールのフォーマットも熟知していないと出来ません。 要はハッカーみたいなスキルがないと無理です。
- nazotarou
- ベストアンサー率46% (27/58)
mutexって、アカウントをこえてダメだっけ? Win のアカウントを作って、別のユーザーで実行?だっけ? これで実行してみるとか。 バイナリは、詳しくないから、 バイナリエディタで開いて、ダメもとでそれっぽい所を変更してみるか、 デコンパイラツールで、ソースに戻すかかな? どちらにせよ、アプリもわからなければ、手が出せません。
お礼
回答ありがとうございます。 そのソフトをリネームするとそれぞれが3個まで起動するのですけど そのソフト自体が他のソフトから呼ばれる形で起動するのでダメでした。 バイナリで開いて1日にらめっこしていたんですけど、 それらしいところすらさっぱりわかりませんでした。
- wormhole
- ベストアンサー率28% (1626/5665)
バイナリエディタで可能といえば可能ですが 簡単にできるかどうかとなると、この質問している時点で難しいかと思います。 手順としては#2の方がおっしゃってる通りなのですがマシン語がわかるという必須条件がついてきます。 もしソースコードがあるならそれを修正して再コンパイルした方が簡単です。 ただ上記は単純に起動数制限してある場合での話で、 プログラムの構造的問題で起動数の制限してる場合にはその限りではありません。
お礼
回答ありがとうございます! ソースコードは無いです。 単純に直せるとは思うのですが、バイナリを見てもちんぷんかんぷんなので・・・ 一応アスキーコードで Mutexという文字列は何個かみつけたのですけど 自分にはそれが精一杯でした。
- chie65536(@chie65535)
- ベストアンサー率44% (8804/19966)
>VC++ mutex で排他制御を行っていることまではわかったのですが 起動時にmutexカウントが3以上だったら警告して終了、さもなければ、mutexカウントをカウントアップし、終了時にmutexカウントをカウントダウンしている筈です。 C言語開発ツールなどに付属しているデバッガを起動して、対象プロセスにアタッチして、メッセージが出ている状態でプロセスを一時停止させ「呼び出し元に戻るまで実行」などで実行トレースすれば「カウンタが3以上になっているかどうかコンペアして条件分岐命令で飛び先を変えている部分」が見付かります。 そこが見付かったら、コンペアする数字を書き換えるか、条件分岐命令を無条件分岐命令に書き換えれば良いでしょう。 書き換えは、バイナリエディタ等で行って下さい。
お礼
回答ありがとうございます! 僕自身プログラムとかわからないのでC言語の開発ツールとか持ってないのですけど デバッガというモノはフリーソフトでもありますでしょうか? バイナリエディタはわかるので、デバッガというのをもっとよく調べてみます!
- gerugugu84
- ベストアンサー率37% (29/78)
> バイナリエディタでこのソフトの中身を書き換えて同時起動の回数を変えることは出来ますでしょうか? 出来ます。 > また、出来る場合はどこをどのように変えればいいかというのは簡単にわかるものでしょうか? ソースコードを見ればわかります。
お礼
回答ありがとうございます! ソースコードとはバイナリで開いた時の数字の羅列のことでしょうか? プログラミングとか全くわからない僕のような人でも 簡単にわかりますか?
お礼
回答ありがとうございます! ソースコードはありません。 それがあればどこをいじればいいのか何となくわかるのですけど 逆アセンブルしながらデバッグするフリーソフトで動かしてみたのですけど なにか特殊な感じらしく、コードの解析が終わる前にソフトが実行されてしまい 1行ずつ実行してみるコトが出来ないのと 自分の使ってみたフリーソフトだと、2個目を起動しようとすると1個目が強制終了されてしまうので 3個起動してみることが出来ないのでもし1行ずつ実行できてもダメかなと・・・ 動いたプログラムを終了させると逆アセンブルされたソースコードが表示されたのですが なんとなく追っかけていっても、callでMutexとかを呼び出してる場所が見つかりませんでした。 ちなみにバイナリエディタで開くと、アスキーコードでMutex関係の関数?の文字列がいくつかありました。