回答:
リバースエンジニアリングの利点は何ですか?
リバースエンジニアリングは、主にクラッキングとハッキング(シリアル番号保護またはパスワードプロンプトの削除)に適していますが、他のソフトウェアが実行できるウイルスや奇跡を理解するのにも役立ちます。時々、ソースを取得していないプログラムのバグを見つけてパッチを当てるのに役立つスキルです。
プログラマーとして、リバースエンジニアリングの技術を学ぶ必要がありますか?
はい、アセンブラーを学び、適切なデバッガーを使用してみてください。メタルに近い下位レベルのことを理解することで、より良い開発者になります。
リバースエンジニアリングに精通しているプログラマの利点は何ですか?
あなたは良いハッカー/クラッカーになります。あなたは他のアンチウイルスプロデューサーのために働くことができます。個人的な例として、私はかつてソフトウェアをリバースエンジニアリングして、Oracle接続の確立中に発生したエラーを追跡しました。他の誰も問題を解決できなかったので、名声を得ました。
また、@ johannesを引用したい彼が絶対に正しいので、コメントます。
「悪い」クラッキングに限定しません。逆アセンブルは、コンパイラが狂ったかどうかを判断するのに役立ちます(ただし、通常はコードです)
ファルコンの答えが好きが、私はいくつかの古い退屈なビジネスアプリケーションに世界リバースエンジニアリングは、いくつかの厄介なトラブルのあなたを得ることができることを追加したいと思います。
職場では、新しいメンテナンスのないサードパーティシステムとのデータ統合を行うときに多くのことを行うため、どこで中断すべきか、またはすべきではないかを知ることができます。
また、ソースコードが含まれていない場合は、リバースエンジニアを使用して、購入するサードパーティのコンポーネントのコード品質を(もちろん特定の制約付きで)チェックします。
私の本当のポイントは、リバースエンジニアリングは単一の技術や言語に結び付けられているのではなく、「ブラックボックス」の内部を学ぶプロセスであるということです。依存しているコードを持っているが、信用していない、または信用できない場合は、完全に内部を覗いてそのコードが何をしているのかを確認する必要があります。
また、リバースエンジニアリングの退屈な退屈な側面もあります。これは、あなたがいる会社がまだ使用されているコードやプログラムを少し持っているが、それについて何も知らないと主張するときです。そのため、プロジェクトを開始する前に実行する必要があるすべてのエンジニアリング作業を文書化し、テストを作成します。これは、すでに書かれているソフトウェア、つまり「リバースエンジニアリング」に対して行います。
コードがあれば簡単ですが、技術的にはリバースエンジニアリングのままです。ビジネス会議でレガシープロジェクトについて話しているときによく出てくる用語の1つです。
リバースエンジニアリングのビジネス価値を拡大するために-遭遇する新規顧客の半数以上は既存のシステム/アプリを持っています(常に実稼働しているわけではありません)。
約30%のケースで、顧客はシステムのソースをまったく入手しておらず、多くの場合、実際のビジネスプロセス、ルール、および知識の多くはコードでロックされています。
また、以前のベンダーが明白な悪意を持ち、バイナリを難読化し、コードをタイムロックするなど、顧客を無期限に捕らえたいくつかのケースで。
したがって、あなたの質問に答えるために、リバースエンジニアリングは多くの場合、かなり絶望的な(そしてやけどを負った)顧客との新しいエンゲージメントの出発点であり、既存のコードから忘れられた知識を抽出する「ビジネスクリティカル」な成功要因になる可能性があります。
リバースエンジニアリングのスキルセットとデバッグのスキルセットはまったく同じだと主張します。素晴らしいデバッガーであれば、素晴らしいリバースエンジニアでもあり、その逆も同様です。
私は自分の経験から現実世界の例を挙げています。
当社が別の会社からプロジェクトを引き継いだ後。プロジェクトの約半年後、サブプロジェクトにはコードがないことがわかりました。前の会社にコードの配信を依頼したところ、彼らはサブプロジェクトのコードが見つからないと丁寧に答えました。そのサブプロジェクトの何かを変更したかったので、コードが必要でした。
サブプロジェクトをリバースエンジニアリングする必要がありました。
最初にアセンブリを逆コンパイルしました(はい、それは.NETプロジェクトです)。逆コンパイルされたアセンブリの結果は、ローカル変数の名前と複雑な制御構造のない、簡潔でわかりにくいコードです。これは、コンパイルによって、逆コンパイルできない重要な情報が破棄されるためです。
次に、そのコードを変更する場所を見つけようとしました。これを行うために、コードを簡素化して、同じように動作しますが、より簡潔にしています。また、その動作から変数の名前を推測しました。コードが何をしているのかがわかるまで、何度もコードをステップ実行しました。
すべてをリバースエンジニアリングするのではなく、変更しなければならない部分だけを作りました。それほど悪くはありませんでした、約200行のVBコード。約5日間の労働時間がかかりました。