web-dev-qa-db-ja.com

ハッカーの視点からプログラミングを学ぶ方法

私はハッキングとセキュリティの側面に本当に夢中です。しかし、私が当面この情熱を追求するのを阻んでいるいくつかのことについて疑問に思っています。それらの1つは実際にはプログラミング言語です。一般にプログラミングは自由な分野であり、言語の基本を学ぶだけでは複雑なプログラムやエクスプロイトを書くことはできないということは誰もが知っているように、例として http:// www.exploit-db.com/exploits/29290/ 私はずっと前にCを研究していましたが、このエクスプロイトはCによって書かれました。コードはほとんど理解できません。

したがって、私はC、Python、およびIA-32を次の期間の開始として学習することを計画しています。しかし、基本をマスターした後は、通常のプログラマーだけでなく、情報セキュリティの一部としてプログラミングに焦点を当てるところに行きます。

私の目標は、上記のエクスプロイトを読んで理解し、同様のエクスプロイト(一般にバッファオーバーフロー)を作成できるようにすることです。また、このような弱点を見つけて悪用するには、システムの内部も理解する必要がありますか?

また、上記の悪用はLinux環境でのソケットプログラミングと何らかの関係があると聞いたことがあります。ANSICとは何ですか。なぜそのような悪用を記述するためにそれらが必要なのですか。

3
user209337

あなたの最初の懸念に対処するため。リンクしたコードを理解するのは、最初から理解するのが難しいでしょう。エントリポイント、ペイロード、エクスプロイト、およびその他のニュアンスをダイジェストする必要があります。これは、2つの数値を乗算して結果を返す単純なコードではありません。経験の浅い人はそれを理解できないのは当然です。

残念ながら、基本をマスターするだけでは十分ではありません。たとえば、基本をマスターしても、リンクしたコードを理解することはできません。最新のプログラミング言語は、言語を完全に理解していない人でも基本が理解できるように設計されています。

エクスプロイト、ペイロード、コードを完全に理解し、エクスプロイトについて最もよく知りたい場合は、いくつかのことを完全に理解する必要があります。

  1. メモリのしくみ(文字エンコーディング、スタック、バッファオーバーフロー)
  2. C
  3. エクスプロイトの対象となるプラットフォーム。 WindowsやLinux用のシェルコードを書く予定はありますか?...大きな違いがあるためです。
  4. プログラムをコンパイルして実行するとどうなるかを理解する

私があなたなら、K&R Cの本から始めます。これは、メモリとCについて学ぶのに役立ちます。次に、プログラミングを基礎から読んでいきます。これは、プログラムが実行されたときに何が起こるか、そしてあなたが書いたソースコードとあなたのコンピュータが実行する命令との間の接続について教えるのに役立ちます。

これが開始する最良の方法だと思いますが、開始するのは確かに難しい方法です ...材料は非常に密度が高く、理解するのが困難です。このことを理解するには、多くの時間と労力が必要です。また、ナレッジベースには依然として重大な欠陥があります。たとえそうであっても、これを経験すれば、あなたが見つけたエクスプロイトが何をしているか、そしていくつかの調査の後にそれらがどのように機能するかを簡単に理解することができます

3
user11869