リバースエンジニアリング:それは本当に何のためですか?[閉まっている]


15

私はいくつかの無邪気な/初心者の質問があります:

  • リバースエンジニアリングの利点は何ですか?
  • プログラマーとして、リバースエンジニアリングの技術を学ぶ必要がありますか?
  • 経験豊富なプログラマーにとってのメリットは何ですか?

5
この質問は、リバースエンジニアリングの逆アセンブルタイプだけですか、それとも他のタイプですか?(「アセンブリ」と「低レベル」がタグ内にあるため。)
Izkata

回答:


14

リバースエンジニアリングの利点は何ですか?

リバースエンジニアリングは、主にクラッキングとハッキング(シリアル番号保護またはパスワードプロンプトの削除)に適していますが、他のソフトウェアが実行できるウイルスや奇跡を理解するのにも役立ちます。時々、ソースを取得していないプログラムのバグを見つけてパッチを当てるのに役立つスキルです。

プログラマーとして、リバースエンジニアリングの技術を学ぶ必要がありますか?

はい、アセンブラーを学び、適切なデバッガーを使用してみてください。メタルに近い下位レベルのことを理解することで、より良い開発者になります。

リバースエンジニアリングに精通しているプログラマの利点は何ですか?

あなたは良いハッカー/クラッカーになります。あなたは他のアンチウイルスプロデューサーのために働くことができます。個人的な例として、私はかつてソフトウェアをリバースエンジニアリングして、Oracle接続の確立中に発生したエラーを追跡しました。他の誰も問題を解決できなかったので、名声を得ました。

また、@ johannesを引用したい彼が絶対に正しいので、コメントます。

「悪い」クラッキングに限定しません。逆アセンブルは、コンパイラが狂ったかどうかを判断するのに役立ちます(ただし、通常はコードです)


8
「悪い」クラッキングに限定しません。ビューのより多くのシステム管理者の観点から、アプリケーションに障害が発生した場所を見るのは興味深いことができ、コンパイラは(通常はそれはかかわらず、あなたのコードです)狂っを行ったかどうかを把握することが有用であり得る分解、...
ヨハネス

@johannes:はい、そうです。答えにそれを書いてもいいですか?
ファルコン

確かに、あなたが好きなように、私はそれについて著作権を主張しません
;

7
すみませんが、これは絶対に恐ろしい答えです。リバースエンジニアリングはありません絶対に定義された「主のために...割れやハッキング」、およびシステムは、プログラミングを扱っていない誰もがそのイデオロギーの観点からそれに導入されることにより害を行われています。
チュウ

1
私はそれがまだ言及されたとは思わないが、あなたのものではないソフトウェアでこれを行う場合(または誰にも言わないで)注意してください。ほとんどすべての商用EULAはリバースエンジニアリングを禁止しています。誰かの知的財産弁護士へのコピーを添えて、停止と破棄の手紙を受け取りたくありません。
Bratch

25

ファルコンの答えが好きが、私はいくつかの古い退屈なビジネスアプリケーションに世界リバースエンジニアリングは、いくつかの厄介なトラブルのあなたを得ることができることを追加したいと思います。

職場では、新しいメンテナンスのないサードパーティシステムとのデータ統合を行うときに多くのことを行うため、どこで中断すべきか、またはすべきではないかを知ることができます。

また、ソースコードが含まれていない場合は、リバースエンジニアを使用して、購入するサードパーティのコンポーネントのコード品質を(もちろん特定の制約付きで)チェックします。

私の本当のポイントは、リバースエンジニアリングは単一の技術や言語に結び付けられているのではなく、「ブラックボックス」の内部を学ぶプロセスであるということです。依存しているコードを持っているが、信用していない、または信用できない場合は、完全に内部を覗いてそのコードが何をしているのかを確認する必要があります。


ちなみに、私たちが借りているサードパーティシステムのSQLストアドプロシージャを調べて、要件を満たしているかどうかを確認することもあります。
マチャド

3
+1。大企業の売れ筋のソフトウェア製品でさえ、時としてブラックボックスになることがあります。これは、不適切で、時代遅れで、単純で間違っていて、時には存在しないオンライン文書などです。
ラルフシャピン

13

また、リバースエンジニアリングの退屈な退屈な側面もあります。これは、あなたがいる会社がまだ使用されているコードやプログラムを少し持っているが、それについて何も知らないと主張するときです。そのため、プロジェクトを開始する前に実行する必要があるすべてのエンジニアリング作業を文書化し、テストを作成します。これは、すでに書かれているソフトウェア、つまり「リバースエンジニアリング」に対して行います。

コードがあれば簡単ですが、技術的にはリバースエンジニアリングのままです。ビジネス会議でレガシープロジェクトについて話しているときによく出てくる用語の1つです。


+1、私には特にそうです。私は、レガシーシステムに技術文書が1つもなかった銀行で働いてきました。
マチャド

7

リバースエンジニアリングのビジネス価値を拡大するために-遭遇する新規顧客の半数以上は既存のシステム/アプリを持っています(常に実稼働しているわけではありません)。

約30%のケースで、顧客はシステムのソースをまったく入手しておらず、多くの場合、実際のビジネスプロセス、ルール、および知識の多くはコードでロックされています。

また、以前のベンダーが明白な悪意を持ち、バイナリを難読化し、コードをタイムロックするなど、顧客を無期限に捕らえたいくつかのケースで。

したがって、あなたの質問に答えるために、リバースエンジニアリングは多くの場合、かなり絶望的な(そしてやけどを負った)顧客との新しいエンゲージメントの出発点であり、既存のコードから忘れられた知識を抽出する「ビジネスクリティカル」な成功要因になる可能性があります。


2

リバースエンジニアリングのスキルセットとデバッグのスキルセットはまったく同じだと主張します。素晴らしいデバッガーであれば、素晴らしいリバースエンジニアでもあり、その逆も同様です。


1

私が理解している限り、一部の部品/ソフトウェアを相互運用するために使用されることがあります。奇妙なインターフェース、実装のバグなど。

しかし、私が理解していることから、それは非常に滑りやすい主題であり、したがって、ソフトウェア開発のすでに複雑な法則は、リバースエンジニアリングによって極端になります。


1

リバースエンジニアリングを使用すると、作業を最小限に抑えるコードを再利用できます。たとえば、Symfony2では、通常のMySQLから作成したデータベースを変換して教義形式に変換できます。これは、Symfonyで可能になったリバースエンジニアリングプロセスです。 ....そしてリバースエンジニアリングを使用すると、「2Dで」と言うコードを見ることができます


0

私は自分の経験から現実世界の例を挙げています。

当社が別の会社からプロジェクトを引き継いだ後。プロジェクトの約半年後、サブプロジェクトにはコードがないことがわかりました。前の会社にコードの配信を依頼したところ、彼らはサブプロジェクトのコードが見つからないと丁寧に答えました。そのサブプロジェクトの何かを変更したかったので、コードが必要でした。

サブプロジェクトをリバースエンジニアリングする必要がありました。

最初にアセンブリを逆コンパイルしました(はい、それは.NETプロジェクトです)。逆コンパイルされたアセンブリの結果は、ローカル変数の名前と複雑な制御構造のない、簡潔でわかりにくいコードです。これは、コンパイルによって、逆コンパイルできない重要な情報が破棄されるためです。

次に、そのコードを変更する場所を見つけようとしました。これを行うために、コードを簡素化して、同じように動作しますが、より簡潔にしています。また、その動作から変数の名前を推測しました。コードが何をしているのかがわかるまで、何度もコードをステップ実行しました。

すべてをリバースエンジニアリングするのではなく、変更しなければならない部分だけを作りました。それほど悪くはありませんでした、約200行のVBコード。約5日間の労働時間がかかりました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.