windowsのセキュリティについて学ぶには【リバースエンジニアリングバイブルなどの本】
学び方
プログラムの仕組みを学ぶ
プログラムはなぜ動くのか 第2版 知っておきたいプログラムの基礎知識 新品価格 |
中古価格 |
C言語を学ぶ
WindowsAPIを学ぶ
APIで学ぶWindows徹底理解 (日経BPパソコンベストムック) 中古価格 |
アセンブリ言語を学ぶ
中古価格 |
いまどきのアセンブラプログラミング
いまどきのアセンブラプログラミング―Windowsプログラム解析・開発の独習 中古価格 |
マルウェア解析を学ぶ
初めてのマルウェア解析 ?Windowsマルウェアを解析するための概念、ツール、テクニックを探る 中古価格 |
マルウェア解析を学ぶ2
アナライジング・マルウェア ?フリーツールを使った感染事案対処 (Art Of Reversing) 中古価格 |
windowsカーネルを学ぶ
インサイド Microsoft Windows 第4版〈上〉 新品価格 |
インサイド Microsoft Windows 第4版〈下〉 新品価格 |
ローダーを学ぶ
中古価格 |
ネットワークを学ぶ
新品価格 |
パケットを学ぶ
新品価格 |
デベロッパーツールを使う
ソケットを学ぶ
WinSock 2.0 プログラミング?Window Socket APIによるネットワークプログラミングのすべて 中古価格 |
エキスパートCプログラミング?知られざるCの深層 (Ascii books) 中古価格 |
exeファイルが実行されるとはどういうことか
キーワード[プロセス、スレッド、リソース、ハンドル、メモリ、カーネル]
windowsのデスクトップにはexeファイルのショートカットが置いてあることが多いと思います。
そのショートカットをダブルクリックして起動すると、exeファイルが起動してプログラムが起動します。
このときexeファイルはエクスプローラーから起動されます。
エクスプローラーとはC:\Windows\explorer.exeにあるexeファイルで、よくファイルとか探すのに使いますよね。
exeファイルが起動するとプロセスというものが作成されます。
このプロセスとはexeファイルが実行しているもののことです。
そのためデスクトップにあるショートカットがダブルクリックされると、エクスプローラーのプロセスがそのショートカットのexeファイルを起動し、そのプロセスが作成されます。
このようにプロセスを作成するプロセスを親プロセス、作成されるプロセスを子プロセスと言います。
このプロセスはexeファイルの中身を取り出してパソコンのメモリに置きます。
これをexeファイルをメモリに展開すると言います。
exeファイルの中身のデータのことをリソースと言います。
このリソースを区別するための番号のことをハンドルと言います。
メモリとはいろんなデータを保存する場所のことで、パソコンを構成している部品のことです。
(メモリ、amazonより)
これによってプロセスはメモリからデータを使っていろいろな処理を行うことができます。
このプロセスが行う1つ1つの命令をスレッドと言います。
このスレッドはパソコンのCPUで処理されます。
CPUはいろんな演算を行うところで、パソコンの部品の一つです。
(CPU、wikiより)
CPUの中にはさらにコアという部品があり、これが実際に処理を行っているところです。
コアの数はパソコンによって異なりますが、コアの数が多いほど処理できるスレッドの数も多くなります。
コアには数に限りがありますから、スレッドを適切に割り当てないとうまく処理できません。
このコアにスレッドを適切に割り当てる作業はカーネルというものが行っています。
カーネルとはOSの中核となる部分のことで、PC上で起動しているプログラムなどのアプリケーションとCPUやメモリなどのハードウェアとのやり取りを管理しているもののことです。
OSとはwindowsやLinuxなどのコンピュータを制御するためのソフトウェアのことです。
カーネルの仕事は他にもあり、プロセスがメモリを確保するときに使われていない部分を割り当てたり、CDやUSBなどのデバイスとのやりとりなど多くの仕事をしています。
exeファイルが実行されるとプロセスやスレッドなどの処理がCPUで行われ、その過程で様々なものと関わっていることがわかります。
このようにexeファイルを起動すると目には見えない部分で多くの処理が行われていて、実際はここに書かれていることより非常に多く複雑です。
dllファイルとは何か
dllファイルとは動的リンクを使ったライブラリのことです。
dllはDynamic Link Libraryの略です。
動的リンクとはexeファイルが実行されたときにそのexeファイルとdllファイルが結合することです。
ライブラリというのは多くの関数がまとまって書かれたもののことです。
すなわち、dllファイルとはexeファイルが実行する際に関数を呼び出すための関数がまとまったファイルのことです。
exeファイルが実行された時にexeファイルがdllファイルを呼び出して、dllファイルの中の使いたい関数を使えるということです。
1つのexeファイルに関数をまとめて書かないでdllファイルにすることで、他のプログラムからも使えるようになり、同じコードを書く手間や容量を省くことができます。
APIとは何か
APIとはApplication Programming Interfaceの略であり、アプリケーションから提供された機能を使うためのインターフェースのことです。
インターフェースとはモノとモノの間の部分とそのプロトコルのことです。
wikipediaで調べるとカタカナの説明にカタカナが使われていて、どんどん調べることが増えていきます。。
プロトコルとはやり取りに関する取り決めのことです。
ここまでをまとめると、APIとはアプリケーションから提供された機能を使うためのものということがわかります。
まとめてないですね、インターフェースの部分を無視しただけですね。。
具体例としてWindowsAPIやTwitterAPIがあります。
WindowsAPIというのはWindowsの機能を使うための関数のことで、DLLファイルとしてC:/Windows/System32に保存されています。
プロセスやメモリを管理するkernel32.dllやウィンドウを管理するuser32.dll、文字や描画を管理するgdi32.dllなどがそのフォルダに入っています。
TwitterAPIというのはTwitterの機能をプログラムから使うための関数のことです。
TwitterAPIを使えばTwitterをブラウザから開かなくてもプログラムからリツイートしたり良いねしたりすることができます。
ポインタと配列の文字列の違いは何か
Visual Studio
TCC
このようにコンパイラによるため、文字を扱うときは普通に配列を使った方がいいかもしれません。
デバッガとは何か
デバッガとはプログラムのバグを見つけるために用いるソフトのことです。
デバッガでは一行ずつコードを実行したりできますよね。
それはブレークポイントという機能を用いています。
この方法には2つあります。
1つはハードウェアブレークポイントと言い、デバッグレジスタというデバッグ用のメモリであるレジスタに止めたいコードのアドレスを入れることで実現できます。
2つ目はソフトウェアブレークポイントと言い、コードの止めたい場所に0xCCを書き込むことで実現できます。
フックとインジェクションとは何か
フックとは英語でhookと書き、ひっかけるという意味です。
フックとはコードを書き換えて特定のコードに飛ばしてから戻すことを言います。
元のコードを特定のコードにひっかけているようなため、フックすると言います。
また特定のコードに飛ばして戻ってくることからトランポリンとも言います。
インジェクションとは英語でinjectionと書き、注射・注入するという意味です。
そのためDLLインジェクションといえば、DLLをファイルに埋め込むことを言います。
Windowsのカーネルの概要
TCP/IPとはなにか
[プロトコル、DNSサーバー]
Qtとは何か
たまに聞くQtというのは、キュートと読み、C++でクロスプラットフォームなGUIをつくるフレームワークです。
クロスプラットフォームとは様々なOSでも動くという意味です。
フレームワークというのは英語でframeworkと書き、骨組みという意味です。
すなわちQtから提供された関数を使えばwindowsやLinux、Macで動くウィンドウアプリを簡単に作れるということです。
コメント
0 件のコメント :
コメントを投稿