

リバースエンジニアリングについてです。  
素人らしい質問に申し訳ないですが疑問に思うことを分けて質問します。  
その前に一応私はハッキングに関心がありましてどのOSでもデバッグできるようになりたいです。  
つまり Linux, Windows
の色々なソフトウェアをデバッグしたりネットワークパケットを自ら修正できるほどの上級者になりたいです（プログラミング分野はなれてます）

  1. 一応基本知識が少なくとも入門できるということは知ってます。ですが  
リバースエンジニアリング勉強する時に一応深く理解したいというこだわりがありまして  
だから入門する前に基本を整えてからしたいと思ってます。  
今私が考えてるカリキュラムはアセンブリ,win32api,pefile仕組み,linuxapiなどです。  
これらを勉強したらリバースエンジニアリングとシステムハッキングに役に立つのでしょうか。  
そして以外にも役立つ内容があったら教えてほしいです。

  2. アセンブリに関して調べてみたのですがnasm,masm,64ビットアセンブリ  
色々なアセンブリがありまして混乱しているのですが、  
私はどのOSからでもデバッグしたいです。  
どのようなアセンブラを学べばいいのでしょうか。

  3. win32api以外にwin64apiの内容はあるのでしょうか。  
64ビットのソフトをデバッグするときwin64apiの内容は必要なのでしょうか。


CC BY-SA 4.0
2020-02-26T10:36:42.193
63375
2020-02-26T13:10:02.143
2020-02-26T11:41:57.990
3060
37978
question
c
リバースエンジニアリング 入門


車も普段はリバースで走らないのと同じで、リバースエンジニアリングってのは（フォワード）エンジニアリングが身についていてなんぼだと思います。

A1.

> 一応深く理解したい

のであれば余計に「フツーのエンジニアリング」を理解しておかないと意味がありません。それなしでリバースエンジニアリングとか、はっきり言って100年早いでしょ。

A2. どんな OS ってことは組み込み系の uITRON とかも含みますか？ いろんなマイコン (RX/SH/ARM-Cortex/PIC 等)
も含みますか？

アーキテクチャってのがわかればどんなマイコンでも短時間でアセンブラが使えるようになります（オイラがそうです、自信もって保証します）１つのマイコンだけ使えてもおいしくありません。アーキテクチャがなぜそうなっているか、背景を知っておくといくらでも応用ができます。アセンブラなんてのはそのあとで十分。

A3. アセンブラレベルのデバッグするなら「そのアーキテクチャにおける ABI 仕様」ってのは知っている前提です。必要ですか？なんて訊くまでもない。


CC BY-SA 4.0
2020-02-26T11:30:36.063
63377
2020-02-26T11:30:36.063
8589
63375
answer


100年はかからないと思います。

もし、学生だったら [IPAセキュリティーキャンプ](https://www.ipa.go.jp/jinzai/camp/index.html)
というのを開催しています。  
いろんな知見を得る機会になるいい機会だと思います。

参加のためには、[応募課題](https://www.ipa.go.jp/jinzai/camp/2019/zenkoku2019_vote.html)
に回答しないと参加できないので  
ここにある課題を 理解できるように 勉強してはいかがでしょうか？

質問内容のなかからいくつか抜粋

[code]

    B.7 サイバーセキュリティの分野で半導体や機械語の知識が必要な理由を自分なりの言葉で述べて下さい。
    
[/code]

[code]

    ■共通問題C
    OSを実装する上で基礎となるC言語の力を見る問題です。
    - C.1. C言語で双方向リンクリストとそれを操作する関数を作り、ソースコードを提出してください。
      リンクリストを生成する関数、要素を任意の場所に挿入する関数、全ての要素を順に標準出力に印字する関数、の3つがあれば十分です。
      やる気があればもっとたくさんの機能を実装しても構いません！
    - C.2. 設計・実装で工夫した点を述べてください。
    
[/code]

[code]

    ■共通問題4 Linuxプログラミングについて、経験がある項目を複数選択してください。
    Python, Ruby, Perlなどを用いてコマンドラインアプリケーションを作成したことがある
    C/C++などを用いてメモリを自身で管理しながら処理をおこなうデーモンを作成したことがある
    Procfsやシステムコール（libcシステムコールラッパー）を用いてカーネル内の情報を取得、設定するアプリケーション/デーモンを作成したことがある
    Linux Kernel Module/Linux Security Moduleを作成したことがある
    Linuxカーネルに機能を追加もしくは修正したことがある
    Linuxカーネルにパッチを投稿したことがある
    
[/code]

質問者の `プログラミング分野はなれてます` という言葉と
リバースエンジニアリング、ハッキングについて必要な基礎知識の間で、かなりのギャップがあるような気がしてなりません。


CC BY-SA 4.0
2020-02-26T13:10:02.143
63380
2020-02-26T13:10:02.143
18851
63375
answer