- ベストアンサー
デバッグ<命令の無効化>
ソフトを起動する度に表示されるタイトルロゴや 使用上あまり必要の無い部分を機能させないようにしたいと思い 逆アセンブルをして解析を始めたのですが 必要の無い命令を無効にするにはどうしたらいいのでしょうか? 例えば :0047D3EA push 000055F2 のようなダイアログ呼び出し(?)の命令があったとして このダイアログの表示は必要無いので表示させないようにしたい この場合どの様にして書きかえればよいのでしょうか? バイナリエディタ等で開き書き換えるのだと思いますが どのようにしてよいのかわかりません また、ソフトウェア改造の違法性についても知っている方教えて下さい アセンブリ言語初心者ですので質問に意味不明なところがあるかもしれませんが そのへんもフォローしてお願いします
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
まず、基本的に、市販のソフトウェアの場合、逆アセンブルをすることは、著作権などの関係で禁止されている場合がほとんどです。(使用許諾書を見て下さい。音楽などと違って個人での使用時でも禁じていることが多い) 上記がクリアされているとして、いらない命令はNOP(No Operation)命令(CPUによって違う名前かもしれません)で置き換えればいいと思います。ただし、置き換える命令の長さが、代わってしまうと旨く行かないので、NOPを必要な数だけ入れる必要が在るかもしれません。また、スタックの数もきちんと考える必要が有ります。 出来れば、自分で小さなアプリケーションを作成して、テストしてみると一番解りやすいと思います。
その他の回答 (2)
- selenity
- ベストアンサー率41% (324/772)
まずソフトウェアの使用許諾所を読んで ディスアセンブルなどのリバースエンジニアリングを 一切禁止するなどと書かれていないことを確認しましょう。 もし、本当にSplashWindowがうっとおしければ 開発元に文句を言いましょう。 正規ユーザなのだから、、、
お礼
その通りですね 文句言ってもなかなか改善されないでしょうけど・・・・
- ashizawa
- ベストアンサー率42% (3/7)
先ほどの追加です。もちろん、バイナリエディタで、該当するコードの場所をNOPのコードに変更すれば問題有りません。たとえば、例に有った、 :0047D3EA push 000055F2 は、4バイトですので、NOPコードが2バイトのAA22だった場合、0047D3EAをAA22AA22にすれば、無効化が出来ます。ただし、該当するコードが3バイトでNOPコードが2バイトの場合など、前後のほかのコードを同じ動きをする別のコードに置き換えて調整をし、他からのジャンプなどにも注意を払う必要が有ります。 他に作業に当たっては、失敗することを考えて、元のプログラムのコピーに作業することと、数字が一つずれても一つ間違えてもおかしな動作を起こす可能性が在るので(OSを壊すとか、ハードディスクに不正にアクセスするなど)完全に安全な(壊れても良い)環境で行うことがベストだと思います。気をつけて取り組んで下さい。
お礼
大変わかりやすい回答ありがとうございました とても参考になりました また質問することがあるかもしれませんが その時はよろしくお願いします
お礼
回答ありがとうございます ご指摘の通り自作アプリケーションでやってみたいと思います できればもう一つ教えていただきたいのですが NOP命令にして置き換えるとします その場合、バイナリを直接 バイナリエディタなどで書き換えて やる事はできるでしょうか? 可能でしたら方法についても教えて下さい