[-]=======================================================================[-] Wizard Bible vol.17 (2005,4,29) [-]=======================================================================[-] x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ---- 第0章:目次 --- x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ○第1章:ウイルスプログラミングへの招待 〜インポートセクションを持たずにAPIを使う方法〜 まひん 著 ○第2章:人工衛星と衛星データ 多変量解析 著 ○第3章:ビバ!OllyDbg DokoDon 著 ○第4章:CCDA研修受講 D 著 ○第5章:hostsファイルの名前変更 金床 著 ○第6章:日本のクラックシーンの起源 kn0wledge 著 ○第7章:Bookmarkletでインターネットをちょっとだけ快適に えいる 著 ○第8章:吉里吉里2で作成されたソフトの解析 dori 著 ○第9章:個人でできるリアル世界でのセキュリティ2 〜護身術を中心に〜 黒猫 著 ○第10章:DHCPDoS 山本洋介山 著 ○第11章: ソーシャルエンジニアリングで秘密調査 くろいみや 著 ○第12章: Windows 2000/MEの脆弱性 Will 著 ○第13章: 東京賃貸生活ぐんにょり物語 理事長 著 ○第14章: Windows Device Driver Programming Part 1 Kenji Aiko 著 ○第15章: カード審査の実態 Aluminumovercast 著 ○第16章: ソーシャルネットワーキングサイトmixiをハクる Zer0real 著 ○第17章: 最近のアセンブリ言語本事情 eagle0wl 著 ○第18章: 音の本質 IPUSIRON 著 ○第19章: ハッカーの教科書【完全版】 編集後(悔)記 まど 著 ○第20章:お知らせ ○第21章:著者プロフィール x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第1章: ウイルスプログラミングへの招待 〜インポートセクションを持たずにAPIを使う方法〜 --- 著者:まひん x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) はじめに  WindowsアプリはPEファイルという構造をしています。もっとも基本的なウイル スは感染するときに自分のPEヘッダなどは一切コピーせずにコードセクションの みを宿主ファイルにコピーします。PEファイルの構造中にWindowsAPIを使うため のインポートセクションがあることを考えると、コードセクションのみを宿主フ ァイルにコピーしてはAPIが使えないことになります。  しかし、インポートセクションをまったく持たずにAPIを使う方法があります。  ウイルスプログラミングの基本中の基本ですが、少し複雑で、DOSウイルスの作 者の多くが挫折した部分でもあります。この手法は、現在、アプリをクラックか ら保護するようなプロテクターなどにも応用されている技術です。ウイルスの技 術的おもしろさの一部を垣間見ることができるのではないかと思います。  この記事ではアセンブラにNASMを使用しています。したがって、ソースコード の書式はNASM式です。ご注意ください。 ■0x02.) 必要なAPIを使うには  自分の使いたいAPIがなんでも使えるようにするには、LoadLibrary()とGetPro cAddress()があれば大丈夫です。LoadLibrary()はDLLがロードされたベースアド レスの値を返す関数です。また、Windowsアプリはプログラムの終わりに必ずExi tProcess()を使用して終了する必要があります。この3つのAPIはすべてkernel32 .dllからエクスポートされている関数です。つまりKernel32のベースアドレスと GetProcAddress()のアドレスが取得できればいいわけです。 ■0x03.) カーネルのベースアドレスの取得  Windowsではプログラムが実行されるとKernel内からcall命令によって呼び出さ れます(CreateThread()から)。したがって、スタックには戻り先のアドレス( Kernel内のアドレス)が入っていることになります。  DLLをロードするメモリ上の位置は必ずページ単位になっています。また、DLL もPEファイルなのでMZシグネチャ、PEシグネチャといった署名があります。これ らの情報を元にカーネルのベースアドレスを知る方法を以下に示します。 ----- ;; リミッター。50ページに制限する mov ecx,5 ;; Kernel内へのリターンアドレスを取得する mov eax,[esp] ;; 下4桁を0でマスクする and eax,0FFFF0000h .check1: ;; リミッターのチェック cmp ecx,0 je .not_found ;; MZヘッダのチェック cmp word [eax],'MZ' je .check_PE .check2: ;; 次の10ページへ sub eax,10000h dec ecx jmp .check1 .check_PE: ;; PEヘッダのチェック mov edi,[eax+3ch] add edi,eax cmp word [edi],'PE' je got_k jmp .check2 -----  プログラムのスタート直後にはespにリターンアドレスが入っています。これを 「mov eax,[esp]」で取り出します。DLLがロードされる位置はxxxx0000hというア ドレスなのでAND命令を使ってマスキングします。あとは、10000hごとにMZシグネ チャを探し、さらに対応するPEシグネチャがあるかを調べることでKernelのベー スアドレスが取得できます。  この手法で見つからないことはありませんが、各OSのKernelのロードアドレス をハードコードしてもいいでしょう。 =====表 Win95/98 0bff70000h WinME 0bff60000h WinNT 077f00000h Win2000 077e00000h WinXP 07c800000h ===== ------ mov eax,0bff70000h ; win95/98 cmp word [eax],'MZ' je got_k mov eax,0bff60000h ; winME cmp word [eax],'MZ' je got_k mov eax,077f00000h ; WinNT cmp word [eax],'MZ' je got_k mov eax,077e00000h ; Win2000 cmp word [eax],'MZ' je got_k mov eax,07c80000h ; WinXP ------ ■0x04.) Kernel32のエクスポートディレクトリを探索  Kernel32.dllが提供するAPIは、エクスポートディレクトリにすべて格納されて います。エクスポートディレクトリでAPI名とそのアドレスが分かります。つまり、 エクスポートディレクトリを調べ上げることで任意のAPIのアドレスを取得できる のです。  まずNumberOfNamesをはじめとするエクスポートディレクトリの基本情報を取得 します。 ----- ;; エクスポートディレクトリ内を探索 mov esi,[edi+78h] ; エクスポートディレクトリ add esi,ecx add esi,18h lodsd ;; NumberOfNamesを保存 mov dword [NumberOfNames],eax lodsd add eax,ecx ; ベースアドレスを考慮 ;; AddressOfFunctionsを保存 mov dword [AddressOfFunctions],eax lodsd add eax,ecx ; ベースアドレスを考慮 ;; AddressOfNamesを保存 mov dword [AddressOfNames],eax lodsd add eax,ecx ; ベースアドレスを考慮 ;; AddressOfNameOrdinalsを保存 mov dword [AddressOfNameOrdinals],eax ----- ■0x05.) GetProcAddressA()のアドレスを取得  次に"GetProcAddressA"という文字列を元に、対応するアドレスを探すことにな ります。AddressOfNamesで探索するAPI名の最大値を設定します。あとは単純な文 字列比較をして、一致する箇所を確定します。 ----- ;; GetProcAddressAを探す準備 mov esi,[AddressOfNames] mov dword [nIndex],esi mov edi,[esi] add edi,ecx xor ecx,ecx lea ebx,[nGetProcAddress] ; 'GetProcAddressA',0 search_GPA: .next: mov esi,ebx .check: ;; API名が一致しているか? cmpsb jne .nextAPI cmp byte [edi],0 ; 文字列の終端か? je .got jmp .check .nextAPI: ;; 一致していないので次のAPI名へ ;; インデックスとカウンタをずらす inc ecx cmp ecx,dword [NumberOfNames] jge exit add dword [nIndex],4 mov esi,[nIndex] mov edi,[esi] add edi,[kernel] jmp .next -----  'GetProcAddressA'の文字列が見つかれば、あとはAddressOfFunctionsの対応す る位置からAPIアドレスを取得することができます。 ----- .got: mov ebx,esi inc ebx shl ecx,1 mov esi,dword [AddressOfNameOrdinals] add esi,ecx xor eax,eax mov ax,word [esi] shl eax,2 mov esi,[AddressOfFunctions] add esi,eax mov edi,dword [esi] add edi,[kernel] mov dword [aGetProcAddress],edi; GetProcAddressAのアドレスを保存 ----- ■0x06.) 取得したAPIを実際に使う  取得したGetProcAddressA()を元にBeep()のアドレスを調べます。APIの呼び出 しはアセンブリ言語では、第n引数、第n-1引数、…、第2引数、第1引数の順にPU SHして、APIをCALLすればいいだけです。 ----- GetkAPIAddress: mov esi,nBeep ; 'Beep',0 mov edi,aBeep ; Beep()のアドレスを格納する場所 ;; GetProcAddressA()を呼び出してBeep()のアドレスを取得する push esi ; 'Beep',0 ;; LoadLibraryA()で得られる値はベースアドレスそのもの! push dword [kernel] call dword [aGetProcAddress] test eax,eax je exit stosd ; aBeepにBeep()のアドレスを保存 ;; Beep(0x1000,0x1000) push 1000h push 1000h call dword [aBeep] ----- ■0x07.) ソースコード  NASMとGOLINKを使用して以下のようにすれば実行ファイルが完成します。なお、 ウイルスで用いられる基本パターンを元にしたプログラムなので、コンパイルし たときにアンチウイルスにより検出されることがあるかもしれません。理解した 上でお使いください。 ○NASM http://nasm.sourceforge.net/ ○GOLINK http://www.jorgon.freeserve.co.uk/ ----- nasm -fwin32 -O3 getapi.s golink -entry start getapi.obj ----- ----- ソースコード section .date nGetProcAddress db 'GetProcAddressA',0 nBeep db 'Beep',0 nExitProcess db 'ExitProcess',0 section .bss kernel resd 1 ; Kernel32のベースアドレス ;;; Kernel32のエクスポートディレクトリの要素 NumberOfNames resd 1 AddressOfFunctions resd 1 AddressOfNames resd 1 AddressOfNameOrdinals resd 1 ;;; GetProcAddressAを探すときに使うインデックス nIndex resd 1 ;;; 取得したAPIのアドレス aGetProcAddress resd 1 ; GetProcAddressA() aBeep resd 1 ; Beep() section .text global start start: ;; リミッター。50ページに制限する mov ecx,5 ;; Kernel内へのリターンアドレスを取得する mov eax,[esp] ;; 下4桁を0でマスクする and eax,0FFFF0000h .check1: ;; リミッターのチェック cmp ecx,0 je .not_found ;; MZヘッダのチェック cmp word [eax],'MZ' je .check_PE .check2: ;; 次の10ページへ sub eax,10000h dec ecx jmp .check1 .check_PE: ;; PEヘッダのチェック mov edi,[eax+3ch] add edi,eax cmp word [edi],'PE' je got_k jmp .check2 .not_found: ;; 調べていって見つからなければ ;; 各OSのデフォルト値を試してみる mov eax,0bff70000h ; win95/98 cmp word [eax],'MZ' je got_k mov eax,0bff60000h ; winME cmp word [eax],'MZ' je got_k mov eax,077f00000h ; WinNT cmp word [eax],'MZ' je got_k mov eax,077e00000h ; Win2000 cmp word [eax],'MZ' je got_k mov eax,07c80000h ; WinXP mov edi,[eax+3ch] add edi,eax cmp word [edi],'PE' jne exit got_k: ;; 取得したKernelのベースアドレスを保存 mov dword [kernel],eax mov ecx,eax ;; エクスポートディレクトリ内を探索 mov esi,[edi+78h] ; エクスポートディレクトリ add esi,ecx add esi,18h lodsd ;; NumberOfNamesを保存 mov dword [NumberOfNames],eax lodsd add eax,ecx ; ベースアドレスを考慮 ;; AddressOfFunctionsを保存 mov dword [AddressOfFunctions],eax lodsd add eax,ecx ; ベースアドレスを考慮 ;; AddressOfNamesを保存 mov dword [AddressOfNames],eax lodsd add eax,ecx ; ベースアドレスを考慮 ;; AddressOfNameOrdinalsを保存 mov dword [AddressOfNameOrdinals],eax ;; GetProcAddressAを探す準備 mov esi,[AddressOfNames] mov dword [nIndex],esi mov edi,[esi] add edi,ecx xor ecx,ecx lea ebx,[nGetProcAddress] search_GPA: .next: mov esi,ebx .check: ;; API名が一致しているか? cmpsb jne .nextAPI cmp byte [edi],0 ; 文字列の終端か? je .got jmp .check .nextAPI: ;; 一致していないので次のAPI名へ ;; インデックスとカウンタをずらす inc ecx cmp ecx,dword [NumberOfNames] jge exit add dword [nIndex],4 mov esi,[nIndex] mov edi,[esi] add edi,[kernel] jmp .next .got: mov ebx,esi inc ebx shl ecx,1 mov esi,dword [AddressOfNameOrdinals] add esi,ecx xor eax,eax mov ax,word [esi] shl eax,2 mov esi,[AddressOfFunctions] add esi,eax mov edi,dword [esi] add edi,[kernel] mov dword [aGetProcAddress],edi; GetProcAddressAのアドレスを保存 GetkAPIAddress: mov esi,nBeep ; 'Beep',0 mov edi,aBeep ; Beep()のアドレスを格納する場所 ;; GetProcAddressA()を呼び出してBeep()のアドレスを取得する push esi ; 'Beep',0 ;; LoadLibraryA()で得られる値はベースアドレスそのもの! push dword [kernel] call dword [aGetProcAddress] test eax,eax je exit stosd ; aBeepにBeep()のアドレスを保存 ;; Beep(0x1000,0x1000) push 1000h push 1000h call dword [aBeep] exit: mov esi,nExitProcess push esi push dword [kernel] call dword [aGetProcAddress] push 0 call eax ----- ■0x08.) おわりに  ウイルスでは、この手法を元に、ウイルス用にカスタマイズして使用すること になります(ウイルスはコードセクションのみを使用するなどの制限が出てくる からです)。  PEファイルフォーマットを理解していることを前提に書いてみましたが、PEフ ァイルフォーマットから説明しだすとキリがないので、「クラッカープログラム 大全」や近々発売予定の続編を参照していただければ幸いです。さらに、もう少 し先の話になりますが、今までのくだらないワームスクリプト作成マニュアルみ たいなものではなく、本格的なウイルス技術体系を今回の記事の100倍ぐらいわか りやすく、詳しい解説をつけて出版する予定でいます。ご期待下さい。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第2章: 人工衛星と衛星データ --- 著者:多変量解析 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) はじめに  最近だと、Google map(http://maps.google.com/)やhotwireの記事など、衛 星写真関係の記事をネットでもよく見かけるようになってきました。 ○Google map http://maps.google.com/ ○hotwireの記事 http://hotwired.goo.ne.jp/news/culture/story/20050414203.html ○x51.orgの記事 http://x51.org/x/05/04/1948.php  Wizard Bibleの趣旨には関係ないかもしれませんが、地球観測衛星は軍事衛星 の民間転用として発展してきている歴史を見てみても、アングラっぽいと思って しまったという経緯があることを考慮していただけると幸いです。単なるそこら へんにいる普通の大学生が無責任に書いた文章です。事実か否かについては一切 受け付けません。間違いの指摘もなしでお願いします。テキトーに読み進めてく ださい。 ■0x02.) 人工衛星  人工衛星には色々な種類があることは皆さんはご存知であると思います。それ らの種類をどのくらい挙げることができますか? 多分、気象衛星、スパイ衛星、 GPS衛星などが主でしょう。しかし、人工衛星にはもっと多くの種類が存在します。 それでは、次に列挙してみます。 1:技術開発衛星 2:科学衛星 3:月探査機 4:惑星探査機 5:有人宇宙船 6:物質補給線 7:通信放送衛星 8:気象衛星 9:地球観測衛星 10:偵察衛星 11:早期警戒衛星 12:航行・測位衛星 13:測地衛星 14:アマチュア無線衛星 15:データ中継衛星 16:宇宙葬衛星 17:微小重力実験機  …16が気になりますが、この記事では衛星写真を回折しています。となります と、9、10、15などの衛星を中心的に扱うことになります。 ■0x03.) リモートセンシング  いきなり衛星写真の話をする前に、手法論について触れたいと思います。  リモートセンシング(以下、リモセン)とは、そのまま訳すと「対象物に直接、 触れることなく、その物体の性状を探知する」となるかと思います。人間の場合 には五感のうち、視覚、聴覚、嗅覚というセンサーで対象物をリモセンしている ことになります。様々なセンサーを開発し、稼動させることによって、人間には 到底探査することができないようなものが、科学技術の発達のおかげで探査可能 になったわけです。見えないものが見えるなんて素敵だと思います。衛星データ の場合は、「遠距離から電磁波を媒体として対象物をセンサーで探査する」こと になります。媒体として電磁波が選ばれた理由は、偏光、偏波という性質や多く の波長が利用でき、情報伝達時の変量がたくさんあるので解析対象の情報量が多 く、しかも、地上から宇宙まで少ない減衰で伝播するからです。それ以外の媒体 として考えられるものには、「圧力波」、「力の場」、そして「テレパシー」( 嘘)があるそうですが…私の理解を超えているので解説できません。 ■0x04.) 電磁波の区分  波長域の詳細はググればわかると思います。波長の短いほうから列挙します。 γ線、X線、紫外線、可視光線、近赤外線、中赤外線、熱赤外線、マイクロ波( EHF/SHF/UHF)、ラジオ波(VHF/HF/MF/LF/Vlf)、電力波となります。  今回は衛星写真ということなので、地表面をリモセンする必要があります。そ こで問題になってくるのが「大気の窓」といわれる電磁波です。これが、地表の 電磁波発信源(リモセンする場所)と人工衛星のやり取りするを邪魔します。そ こで、水蒸気の吸収帯、二酸化炭素の吸収帯、オゾンの吸収帯以外の電磁波の波 長帯を使用します。逆をいえば、大気をリモセンしたいときはそれらの波長帯を 使用すればいいわけです。しかし、大気による電磁波の吸収、散乱や大気からの 放射(熱を持つ物質は熱放射している)の影響を無視することはできません。し かも、大気条件(気温、気圧、吸収成分の濃度)、センサーの位置・方向、地表 面状態は日々変化していくため、リモセンから得られるデータの画像処理・解析 は複雑になります。そのために、吸収、散乱、放射の大気での影響(path radia nce:パスラジアンス)を精密な放射伝達モデルに従い、観測時の大気の透過率、 放射量、観測されるエネルギー量を数値シュミレーションにより計算することで 対応します。  数値シュミレーション用のソフトウェアを選ぶときは、使用目的に依存します。 計算結果が厳密解の必要ならばこれ、実用解で十分ならばこれといった感じです。 そのため、あらゆる種類のシュミレーション用のソフトウェアが提供されていま す。その中でも一番有名なのは米国空軍が開発したLOWTRANというコンピュータコ ードが有名でバージョンアップが繰り返されています、安定した数値シュミレー ションソフトとして人気があります。 ■0x05.) 地球観測衛星のセンサー  地球観測衛星のセンサーは、2つに分類できます。 ・画像センサ ・非画像センサ  さらに、それぞれについて、2つに大別できます。 ・受動型 ・能動型  受動型は初期のタイプであり、能動型は後で登場したタイプです。  受動型はその名前のとおり、受動的にデータ収集します。ただ、宇宙を漂いな がら自然現象で集まってくるデータ(太陽放射、大気散乱放射、地表の放射・反 射、熱放射)を観測します。プランクの法則から導かれる式より、温度をパラメ ーターとして波長との関係がわかるので、熱放射の波長域を観測すれば温度が推 定できます。従って、ヒートアイランドなどの地表面上の暖かいところがわかり ますし、水温とかもわかります。  能動型は人工的に発生させた放射を利用するレーザレーダ、マイクロ波レーダ などを放射し、観測します。例えば、合成開口レーダ(SAR:Synthetic Apertur e Radar)が代表的です。  地球からの衛星データの取得方法ですが、地球観測衛星は気象衛星と異なり軌 道を南北に周回する衛星であるため、地上受信局から見える範囲が狭くなり、こ うなると地球上の限られた狭い範囲の観測データしか入手できません。そこで、 データレコーダを搭載し、限られた時間(数十分らしい)に2,000コマンドぐらい 送り込んで人工衛星に仕事をさせ、地球全体をカバーします。地上受信局でしか 受信できない地域以外のデータをレコーダに一時記録し、再び地上局と直接通信 できるエリアに入ったときにデータを再生し受信局へ送信します。  また、他の方法として、データ中継衛星(「0x02」の人工衛星15)を静止衛星 軌道上に約110度離れた2箇所に置いておき、データリレーでデータ収集をします。 人工衛星の「landsat」はその恩恵を受けています。 ■0x06.) 衛星データとは  衛星データとは、人工衛星から得られる地球観測データのことです。今回は衛 星画像について触れるので地球観測衛星から得られるデータになります。衛星デ ータから得られるものは、当然ですが量子化されたデータです。1ピクセルあたり のビット数は最近では11ビットですが、一般的には8ビットで提供されることが 多いようです。昔は7ビットだったそうです。しかし、数ビットの差による画像判 定特性にはたいした差がなく無意味だという意見もあります。ビット数が少ない 方がデータ転送量が少なくすむからです。 ■0x07.) 衛星写真  はい、ようやくメインディッシュに来ました。  8ビット衛星データの場合、0〜255の256(=2^8)階調を得ます。お好きな3バ ンドを選択し、光の3原色であるRGBに割り当て統合します。すると、人工衛星デ ータからカラーの画像を得ることができます。しかし、これは普通の人たちの思 っているような「写真」とは違います。あるバンドの組み合わせをもって初めて、 いわゆる「写真」のような衛星画像ができます。これを一般的に衛星写真といっ てんじゃないのでしょうか…。  さまざまな物質にはそれらの物質がもつ個別の反射スペクトル特性があり、物 質の判別ができきるので、バンドの組み合わせによって、いわゆる「写真」とは 一味も二味も違った情報を得ることができます。厳密には間違っているかもしれ ませんが、「衛星データ=地理情報」と考えてもらえれば直感的にわかると思い ます。  衛星データの例をテキトーに列挙します。  例えば、植生、灌漑地、地表の水分、海流の流れ、地形標高、植生活性度、地 熱の状況、火山の温度分布、断層、漁場の発見、熱慣性、水質、都市の成長過程、 土地被覆など。まだまだ、たくさんありますよ。 ■0x08.) 人工衛星の寿命とは  話は変わりますが、宇宙ごみは皆さんご存知だと承知しております。人工衛星 の寿命はセンサーの故障…ではないです、センサーは壊れることはありますが、 滅多にそんなことはありません。アポジモーターの燃料が人工衛星の寿命です。 宇宙ごみなどにぶつかって、向きが変わったときに「プシュー、プシュー」って 向きを補正します。その燃料が衛星の寿命です。 ■0x09.) 人工衛星の破壊の仕方  重さが2トンクラスまでの人工衛星なら大気圏で燃やして焼却しきれると思いま すが、そうでない場合は地上3,500kmの軌道から地球から遠ざける方向に最後の燃 料を使い、アポジモーターでフッ飛ばします。ですから、今も、宇宙を漂ってい るゴミ人工衛星があります。宇宙人が拾うかもしれません。 ■0x0A.) ロケットについて  私は日本人です。h2aロケットが成功とか失敗とかTV報道されていますが、ロケ ットというのは単なる輸送システムにすぎません、事実、JAXA(宇宙航空研究開 発機構)のサイトには輸送システムって書いてあると思います。肝心なのは、ロ ケットに積んでいるものです。そうであるにもかかわらず、それが詳細に報道さ れていません。そこが目的なのに、手段ばかりが注目されています。  ロケットの形状を思い浮かべてみてください、何かに似てませんか?  …そうです。ミサイルです。乗せているものが人か、人工衛星か、核弾頭か、 爆薬か、生物兵器かなどの違いだけなのです(編注1)。  「打ち上げ成功」とは「ミサイル成功」といっても過言ではないと思います…。  よかったね、日本人。いつでも、発射できる技術があるよ。ロケットは東向き に発射させます。地球の自転をカタパルトになるわけね。  また、日本の場合、種子島から発射させるので万が一のときに海に落とすこと ができます。 ○JAXA(宇宙航空研究開発機構) http://www.jaxa.jp/index_j.html 【編注1】ロケットの起源は10世紀といわれています。10世紀始めには中国で黒色 火薬が発明されました。最初は花火などの目的に使用しましたが、11世紀中頃で あり「火矢」と呼ばれていたロケット花火そっくりの武器が登場します。1232年 に宋の首都(現在の開封)をモンゴル軍が包囲した戦いにおいて、火矢を本格的 に軍事目的に利用したといわれています。その後、鎌倉時代(13世紀)になると、 モンゴル軍が日本を襲いました。元寇です。モンゴル軍は火矢や鉄砲(初期の鉄 砲となるもの)を活用し、日本軍の鎌倉武士たちを苦戦させます。実際、このと きの絵は歴史の教科書によく出てくるので記憶している方も多いでしょう。その 後、様々な戦争で利用された火気ですが、現在のようなロケットのような形にな ってきたのは20世紀になってからです。アメリカ生まれのロバート・ゴダートが 登場します(近代ロケットの父と呼ばれている)。彼の作成したゴダートロケッ ト2は、姿勢制御されたロケットが発射され安定して飛行しました。到達高度1,4 00メートル、平均時速880キロメートルです。形もミサイルそっくりです。一方、 ドイツ人のフォン・ブラウンもロケット開発を行っていました。彼は若干25歳で 技術責任者になり、ナチスによる秘密研究が続けられ、第二次世界大戦直前には ジャイロで慣性誘導する全長6.5メートルのロケットの実験に成功しました。そし て引き続き、この2倍を超える大型ロケットの開発に着手して、成功を収めました。 このロケットがイギリスを恐怖に落としたV-2ロケットです。全長14メートル、最 大径1.65メートル、推力25トン、最大速度マッハ4.5の大型ロケットでした。 ■0x0B.) 地上(土地)分解能、熱分解能、スペクトル分解能について  衛星の持つセンサーのレベルを語るのに使用される言葉です。地上分解能はひ とつの画素が表せる領域のことです。例えば、quick birdの場合、確か0.82mくら いだったと思いますが、これは1画素が82cm分の領域を表しますので、車がどちら の方向に向いているのかくらいまで、拡大(ズーム)できるわけです。  google mapでも拡大できる場所と出来ない場所があることに気付くかと思いま す。  イラク戦争のときに軍事アナリストがいっていましたが、某国は分解能5cmまで のセンサーを隠し持っているらしいです。これで監視してんのかなぁ。あの人を。 ■0x0C.) その他  シーン幅、熱分解能、スペクトル分解能、衛星データの利用・活用方法につい てはいつか機会のあったときにする予定です。別に衛星ではなく飛行機にセンサ ー積んでやることも当然あります。衛星データが売れるのは戦争のときや、津波、 地震、などの天変地異が起きたときに売れまくるそうですよ。  衛星データは売っているので買ってみれば? ■0x0D.) お遊的にLINKする  問題があるかもしれないので、公系のサイトと外国の有名所です。国内の民間 の企業にも、衛星データを売っている会社はあります。 ●空中写真サービストップページ by 国土地理院 http://mapbrowse.gsi.go.jp/airphoto/  あなたのお家を探してみたら。JavaScriptはONでなければうまく見れないと思 います。 ●地球観測情報システム/データ公開システム http://www.eoc.jaxa.jp/  Webページ内の「探す/見る」>「地球観測情報システム」>「一般ユーザー はこちらから!」>「サービス開始」ボタンを選択することで、データ検索のペ ージに切り替わります。 ●DegitalGlobe http://archivetool.digitalglobe.com/  衛星データのシーン検索サイトにどうぞ。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第3章: ビバ!OllyDbg --- 著者:DokoDon x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) はじめに  OllyDbgはOleh Yuschuk氏の作ったデバッガで、今やその人気は世界トップレベ ルといっても過言ではないでしょう。私とOllyDbgのはじめての出会いは、当時私 にとって最強の情報源であり、神のことばでもあった「解析素材」の以下の記事 によってでした。 ----- OllyDbg 2000/12/14 フリーなデバッガ。 ブレークポイントに API を指定できなかったり、 機能的には既存のデバッガに少し劣るのだけど、わりと期待できそうな感じ? -----  以来、今日まで私はOllyDbgと共に解析の道を歩むことになるのです。 ■0x02.) OllyDbgの歴史  では、わかる範囲でOllyDbgの歴史を振り返ってみたいと思います。 ●記念すべきVer1.00  OllyDbgの最初のバージョンは2000年11月16日にリリースされました。といって も先にも書いたとおり、私自身はその時点では知りませんでしたが。まさに彗星 のごとくあらわれ、当時TRW2000を使っており、ナグにウンザリしていた私はOll yDbgの手軽さ、扱いやすさと安定度に一発で魅了されました。この最初のリリー スですでにインポート関数を名前で表示してくれるなど、ディスアセンブルコー ドの可読性はすばらしいものでした。  また、オブジェクトやライブラリをサーチして静的結合されたルーチンを特定 してくれるなど、現在でもかなり有用な分析機能をこの時点で有していました。  ちなみにホイールマウスには対応していませんでした(書きながら確認)。 ●Ver1.01  初版リリースの約一ヵ月後の2000年12月27日に出たバージョン1.10では、限定 的ながらボーランド形式のデバッグ情報に対応する試みがなされています。 ●Ver1.02  2001年3月17日にリリースされたバージョン1.02ではWM_PAINTなどのウィンドウ メッセージをデコードできるようになりました。またボーランドデバッグ情報へ の対応もより進みました。 ●Ver1.03  2001年4月25日リリース。このころから末尾の数字が奇数のバージョンは中間バ ージョンでテスト的なものに位置付けられました(ひょっとしたら最初からだっ たかも)。ヘルプの更新などがなされなくなったので、変更点についてはわかり にくくなりましたが、オプションの項目が増えていることよりこのバージョンか らSFX機能が搭載されました。SFX機能とは、パックや暗号化されているアプリの 自己展開ルーチンをトレースしてくれる機能で、アンパックの最大の友と言える ものです。が、このころはなんのことやらまったくわからず、アンパックのなん たるかも知らなかったので使っていませんでした。今使ってみると、例外の自動 処理がまだできないため、途中で止まってしまったりして、使用にはまだ不十分 だったもののようです。 ●Ver1.04  2001年6月15日リリース。Ver1.03で試されていたSFX機能が、例外を無視(プロ グラムにそのまま処理させる)オプションの追加と共に、使えるものになってい ます。  そして、恐らくOllyDbg史上最大の進化であるプラグインへの対応がなされまし た。これによりOllyDbgは無限の可能性を秘めたデバッガへと成長することになり ます。  また、インポートライブラリ内の関数の序数名前解決やジャスト・イン・タイ ムデバッガへの登録、PE/COFFヘッダーのデコード、ラン・トレースなど多くの便 利な機能が追加されています。  ところで、このバージョンからついた、「Options」メニューの「Analysis1」 タブにある「Decode tricky code sequences」はmuffinさんのリクエストにより 実現された機能です。 ●Ver1.05  ホイールマウスに対応してました。正式には次の1.06で対応とのことですが。 ●Ver1.06  なぜかReadme.txtが見当たらず、ファイルの更新日時からVer1.06は2002年2月 25日頃のリリースと思われます。このバージョンでは1.04で登場したラン・トレ ースに条件を指定できるようになり、この機能もアンパックに有用なものとなり ました。「Options」メニューに「Appearance」が加わり、フォントと色をユーザ ーが指定できるようになりました。これにより、日本語文字列の表示が可能にな りました。多くの新機能が追加された結果、内部で使用している構造体が大幅な 変更となり、Ver1.06以前用のプラグインはそのままでは使えなくなりました。 といっても、新しいPlugin Development Kitでコンパイルし直すだけでVer1.06 で使えるようになったのですが。 ●Ver1.08  2002年11月16日リリース。M$形式のデバッグ情報ファイルに対応しました。ジ ャンプ命令を選択すると飛び先を示す矢印が表示されるようになりました。  また、コードハイライト機能が追加され、命令のカテゴリ別にコードに色がつ けられますます可読性が増しました。 ●Ver1.10-ファイナルバージョン  Ver1.xxの最終バージョンとなる1.10は2004年5月23日にリリースされました。 DLLの単独デバッグ、SEHチェーンの表示、アナライザへの分析ヒント設定(強制 的に指定したデータと見なすように指定する)などを加え、ディスアセンブラと してもIDAに迫る分析能力を得ました。 ●今後  OllyDbg V1シリーズのプロジェクトは終了し、V2シリーズが完全再設計でスタ ートしています。開発の方は時間がかかっていますが順調に進んでいるようです。  また、V1シリーズもプラグインにより拡張が可能でありまだまだ進化すること でしょう。  駆け足でOllyDbgの歴史を振り返ってみました。読んでもなんのことかわらない かもしれませんが、筆者も書いていてよくわからなくなってきてるのでご容赦く ださい。 ■0x03.) プラグインを作ってみよう  さて、OllyDbgの最大の特徴ともいえるプラグインによる機能拡張はすべての人 に開かれたものです。OllyDbgをより使いやすいものにするため、ぜひプラグイン 作成に挑戦していただきたいと思います。ここではプラグインを作成するための 基本コード(雛型)について見ていきたいと思います。 ●プラグイン・コールバック関数  プラグイン・コールバック関数とは、OllyDbgのイベントによって呼び出される プラグインの関数でOllyDbgとプラグインとのインターフェースとなるものです。 PDK1.10では下記の14のプラグイン・コールバック関数が用意されています(引数 省略)。  ・ODBG_Plugindata  ・ODBG_Plugininit  ・ODBG_Pluginmainloop  ・ODBG_Pluginsaveudd  ・ODBG_Pluginuddrecorddata  ・ODBG_Pluginmenu  ・ODBG_Pluginaction  ・ODBG_Pluginshortcut  ・ODBG_Pluginreset  ・ODBG_Pluginclose  ・ODBG_Plugindestroy  ・ODBG_Paused  ・ODBG_Pausedex  ・ODBG_Plugincmd  この中で必須なのはODBG_PlugindataとODBG_Plugininitの2つだけで、他はオプ ションです。  ODBG_Plugindata関数はプラグイン名を引数に渡し、プラグインバージョンを戻 り値とすることでこれらをOllyDbgに知らせる役目を担います。 ----- extc int _export cdecl ODBG_Plugindata(char shortname[32]) { strcpy(shortname,"Sample"); // Name of plugin return PLUGIN_VERSION; }; -----  ODBG_Plugininit関数は文字通りプラグインの初期化を行うための関数です。 ----- extc int _export cdecl ODBG_Plugininit(int ollydbgversion,HWND hw, ulong *features) { // まず、OllyDbgのバージョンとプラグインのバージョンをチェックします。 // OllyDbgのバージョンが古ければ処理を中断するため-1を返します。 if (ollydbgversion #include #include #include "plugin.h" HINSTANCE hinst; // DLLインスタンス格納用グローバル変数 HWND hwmain; // OllyDbgメインウィンドウのウィンドウハンドル用 BOOL WINAPI DllEntryPoint(HINSTANCE hi,DWORD reason,LPVOID reserved) { if (reason==DLL_PROCESS_ATTACH) hinst=hi; // Mark plugin instance return 1; // Report success } extc int _export cdecl ODBG_Plugindata(char shortname[32]) { strcpy(shortname,"Sample"); // プラグインの名前 return PLUGIN_VERSION; } extc int _export cdecl ODBG_Plugininit(int ollydbgversion,HWND hw, ulong *features) { // まず、OllyDbgのバージョンとプラグインのバージョンをチェックします。 // OllyDbgのバージョンが古ければ処理を中断するため-1を返します。 if (ollydbgversion○○○○○〜様 投稿者:津田%初段 08月28日 08時19分 警告したにもかかわらず、許可を得ずにパッチを公開してしまいましたね。 公開するのではなく、パッチ方法をメールで私に知らせていただけませんか? >○○○○○〜様、その他の方々 -----  この後、津田氏によるクラッキングコンテストが開催されたことはなかったと 記憶しています。2ちゃんねるでもお祭騒ぎになったオフィスヒラカワ社が行なっ た販売時点情報管理(POS)システムソフト「ぽす助」でも同じことですが、残念 ながらどうも日本では一度破られると「次は、これでどうだ!」といったものが ないように思えます(ぽす助の場合プロテクトに他社のプログラムを使用してい たため事情が異なりますが)。  ちなみに、あまり詳しいわけではありませんが、海外のクラッカーのコミュニ ティーでプロテクトを研究している人が「これはクラックできるか?」、「それ がクラックできたなら、今度のこれはどうだ?」というような、クラッカーとソ フト開発者のやり取りがあるといっていました。つまり、日本とは違った形でプ ロテクトを強化するシステムが形成されているとういうことです。日本にもこの ようなシステムがあればと思います。日本ではただ掲示板にソフトウェアを不正 利用したい人間(クラック依頼を出す人間)とプロテクトに興味があり、それを クラック人間(クラック依頼に答える人間)という二つのタイプだけしかいませ ん。ソフトウェア製作者がクラックの場面に参加しないために、単にクラックが 「できた・できない」ということに終始し、プロテクトの強化やプロテクトの技 術が他の国から比べて遅れてしまっているんだと私は思います。私個人の意見と しては、ぜひともソフトウェア製作者も積極的にシリアル掲示板に書き込みをし、 プロテクトを解除する側とコミュニケーションを取り、ソフトウェアのプロテク トを強化するとともに機能を制限したフリー版、フル機能のシェア版と二つ用意 するようになって欲しいと思っています。  ちなみに、シェアウェア作家協会の掲示板でクラッキングコンテストが開かれ た時代はたくさんのシリアル系掲示板が存在したときでもあります。各々の掲示 板によって書き込みするクラッカーが違うために、あの掲示板ではあのプロテク トに強いなどという色がでてきて楽しい時代でした。  また、各クラックチームも多くのプログラムや文章を発表したりと繁栄の時代 だったといえます。 ■0x04.) クラックシーンの衰退  繁栄の時代があれば当然のように衰退の時代があります。現在はまさにその衰 退の時代だと思います。数えることができない程たくさんあったシリアル系掲示 板の多くは閉鎖され、正常に機能している掲示板は数える程しかない状態です。 また、FCJ、Team iCE、Team next Generationなどといったたくさんあったクラッ クチームは活動停止や解散という状態になりました。  ここであるクラックチーム解散のときに発表された文章から一部引用したいと 思います。 ----- もともとTeamを作った本音は、 Krack汎用手法を貪欲に欲していたからでした。 簡単にいって手法技法情報の交換を行いたかった。 しかし、 KrackWEBの周辺は、 多数の、Krack結果情報だけを求めている人 中数の、できるなら学んでKrackしたいと思っている人 中数の、Krack関連情報を提供している人 少数の、本気でKrack手法を探して学んでいる人 少数の、KrackerおよびKrack結果情報を提供している人 極少数の、Krack汎用手法情報を研究公開している人 という構成になっていて、 かつ、Krackerは初心者のうちは寄り合うが 一定のラインに到達すると寄り合い難くなる、 つまり独立活動と技の奥義秘密化に向かってしまう。 またKracker同士といっても、 Krackerによって関心があることが違うので、 寄り合っても、話題興味がずれて なかなか有意義な情報交換ができない。 Krackなんて言葉は最近できたものではあるが、 いまやKrackという言葉でひとからげにはできない(編注)、 暗号Krack、ドングルKrack、デバッガ対策Krackなどと 細分化して語らないと焦点がボケてしまう状況なのかな、 -----  この引用した文章にもあるように、現在クラックキングはあまりにも細分化さ れクラックとひとつの言葉でくくるには無理ができてきました。こうして見ると シリアル系掲示板がたくさんあり、複数のチームが存在していたときに掲示板に 書き込みしていた人の姿は今どの掲示板でも見ることがなくなりました。その理 由は「独立活動」、これを行なっているためだと私は思います。私は現在どのよ うな人がシリアル系掲示板で活躍しているのかまったく知りませんが、おそらく あるラインにたどり着いたとき、すなわち細分化されたひとつの道を選択して「 独立活動」を始めたとき、その人は掲示板で依頼を受けてそれをクラックするこ とをしなくなるのではないでしょうか。そして、シリアル系掲示板やクラック系 Webサイトを見て自分でやってみようと思った人がシリアル系掲示板に書き込みす るようになり、またその人も他と同じように独立活動を始める、このサイクルが 繰り返されると私は考えています。 【編注】「ひとからげ」(一絡げ)とは、ひとつにたばねること。また細かい違 いを無視して、多くのものをひとまとめに扱うことを指します。 ■0x05.) 最後に  正確にはわかりませんが私が保存しているファイルのタイムスタンプによると 1996年となっているので、それから考えると9年間になります。その9年間見てき た私の感じたことや思ったことを書かせていただきました。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第7章: Bookmarkletでインターネットをちょっとだけ快適に --- 著者:えいる x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) はじめに  はじめまして、えいるといいますヽ(´ー`)ノ  今回は便利な割には知名度があまり高くない(と思ってる)Bookmarkletについ て書こうと思います。こんなのすでに常識だったらごめんなさい。 ■0x02.) ブックマークレットって?  Bookmarkletとは、JavaScriptで記述されたコードをブラウザのお気に入りから 任意のページに対して実行できる状態(お気に入りに登録する)にしたものです。  例えば自分の好きなようにページの色を変えたり、本来ユーザが見ることので きない(といってもローカルにデータはあるのですが)情報を閲覧したりといっ たことが可能となります。  以下ではいくつかのサンプルを見ながら解説をして行こうと思います。なお、 JavaScriptの細かい構文の解説は省いてます。動作確認はIE6です。 ■0x03.) 実際のコードと解説  現在閲覧中のサイトのタイトルを表示させるBookmarkletは次のようになります。 ---- javascript:alert(document.title); ----  上記のコードをコピーしてお気に入りに登録し、任意のページ上でそのお気に 入りを選択します。すると、今見ているサイトのタイトルがダイアログに表示さ れるはずです。もちろんブラウザの設定でJavascriptの実行を許可する必要があ ります。コードを分解して、簡単に説明すると以下のようになります。 ---- javascript: //これ以降のコードがJavascriptだということを表す宣言 alert(document.title); //閲覧中のサイトのタイトルをダイアログで表示する ----  もう少し複雑なものも作ってみます ---- javascript:(function() {var s = "";s = document.cookie; if (s) { alert("このページ上のクッキー\n\n" + s);window.clipboardData.setData("text",s); } else { alert("このページに対してcookieはありません"); } }) (); ----  少し構文が増えましたが、あまり変わらないですね。  現在閲覧しているwebサイトが発行しているクッキーを表示し、クリップボードにコピーします。 ---- javascript:( //これ以降のコードがJavascriptだということを表す宣言 function(){ //無名関数の宣言 var s = ""; //変数sの宣言と初期化 s = document.cookie; //クッキーの値を変数sに格納 if (s) //sの中身が空かどうかの判定 { //クッキーが発行されている場合の処理 alert("このページ上のクッキー\n\n" + s); //クッキーの値を表示する window.clipboardData.setData("text",s); //クッキーの値をクリップボードにコピー } else { //クッキーが発行されていない場合の処理 alert("このページに対してcookieはありません"); //クッキーが存在しない旨を表示するダイアログ }) ();//無名関数の呼び出し ----  先ほどのコードとの違いは、2行目のfuntionで一度関数を作り、最後に呼び出 しているところですね。もちろん先ほどのように書いても動くのですが、このよ うに書いたのには理由があります。  3行目で変数sを宣言していますが、関数を使用せずに宣言すると、見ているサ イト内で同じ名前の変数が使用されている場合その値を書き換えてしまいます。 そのせいでサイトでのJavaScriptの動作がおかしくなる可能性があるので、関数 の中だけでしか使えないようにしているわけです。もちろん、そういった動作を させたい場合はその限りではありませんが…。上の例ではクッキーを取得してい ますが、同じ要領でクッキーを書き換えることも可能です。会員制Webサイトのロ グインユーザの判定に毎回同じクッキーを発行しているような場合だと、あらか じめそういったBookmarkletを登録しておくことによりログインを簡単に行うこと ができますね。  また、Javascriptがフォーム上のテキストボックスなどにアクセスできること を利用すると以下のようなコードも書くことができます。 ---- javascript:( function(){ var s,F,j,f,i; //変数の宣言 s = ""; //sの初期化 F = document.forms; //Fにフォームへの参照を格納 for(j=0; j NTSTATUS DriverEntry(PDRIVER_OBJECT, PUNICODE_STRING); #ifdef __cplusplus } #endif NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath) { return STATUS_SUCCESS; } -----  まぁ見てわかる通り何もしないプログラムのようです。デバイスドライバでは、 DriverEntryからコードが始まります。要するにWinMainもしくはmain関数みたい なものです。では、これをコンパイルして実行してください。といっても、どう やってコンパイルするかわかりません。そもそもWinDDKをもってませんという人 は以下のアドレスからDLしてください。私はWindowsXP環境なので「XP DDK」を使 っています。CD-ROMイメージなのでCDに焼くか、仮想CDドライブソフト(Daemon Toolsなど)を使ってインストールしてください。リンク切れてたらマイクロソ フトから注文してください。 ○DDK http://club.shelek.com/viewfiles.php?id=2 ○DAEMON Tools http://www.daemon-tools.cc/dtcc/portal/download.php?mode=ViewCategory&catid=5 ○DAEMON Tools Homepage http://www.daemon-tools.cc/dtcc/portal/index.php ○Microsoft Windows Driver Development Kit http://www.microsoft.com/whdc/devtools/ddk/default.mspx  2年くらい前まではマイクロソフトのホームページで無償で提供されていたので すが、何故か突然やめてしまったので、現在では正規の入手方法はマイクロソフ トに直接注文するしかなくなりました。ちなみにDDK本体は無料なのですが、送料 が25ドルくらいかかるらしいです。でも、ネット上を探してみれば意外と見つか りますので、わざわざ注文する必要もないかもしれません(編注1)。  さて、本題に戻ります。DDKをインストールしたら通常「C:\WinDDK」というフ ォルダが作成されます。その中に入ると「2600」というフォルダがあり、その中 に実質的なWinDDKのファイル群があるわけです。この中のひとつに「src」という、 いかにもサンプルプログラムが大量に入ってそうなフォルダが目に付きますが、 ご想像の通りサンプルプログラムは初心者がみてもまず理解できないシロモノに なっていますので、最初の頃はほぼ無意味です。それでこれらはとりあえず置い といて、ひとつフォルダを上がって「2600」と同じ場所に「hello」というフォル ダを作ってください。そしてその中に「hello.cpp」を入れてください。これで、 「C:\WinDDK\hello\hello.cpp」というファイルが存在することになります。そし て、さらにhelloフォルダ以下に、次の2つのファイルを作成してください。 ----- MAKEFILE !INCLUDE $(NTMAKEENV)\makefile.def ----- ----- SOURCES TARGETNAME=hello TARGETTYPE=DRIVER TARGETPATH=obj SOURCES=hello.cpp -----  さて、これで準備完了です。「C:\WinDDK\hello\hello.cpp」、「C:\WinDDK\h ello\MAKEFILE」、「C:\WinDDK\hello\SOURCES」の3つのファイルを作成したら、 いよいよコンパイル(ビルド)となります。Windowsお馴染みのスタートメニュー から「スタート→プログラム→Development Kits→Windows DDK 2600→Build En vironments→Win XP Checked Build Environment」としてください。もしくはコ マンドプロンプトを起動して「C:\WINDDK\2600\bin\setenv.bat C:\WINDDK\2600 chk」と実行してください。すると、以下のような入力画面でコマンドプロンプ トが止まります。 ----- コマンドプロンプト C:\Documents and Settings\kenji>C:\WINDDK\2600\bin\setenv.bat C:\WINDDK\2600 chk C:\WINDDK\2600> -----  ここで「cd C:\WINDDK\hello」と入力して場所を移動します。そして、buildと 入力することでコンパイルされます。 ----- コマンドプロンプト C:\WINDDK\2600>cd C:\WINDDK\hello C:\WINDDK\hello>build BUILD: Object root set to: ==> objchk BUILD: Adding /Y to COPYCMD so xcopy ops won't hang. BUILD: /i switch ignored BUILD: Compile and Link for i386 BUILD: Loading C:\WINDDK\2600\build.dat... BUILD: Computing Include file dependencies: BUILD: Examining c:\winddk\hello directory for files to compile. c:\winddk\hello - 1 source files (17 lines) BUILD: Compiling c:\winddk\hello directory Compiling - hello.cpp for i386 BUILD: Linking c:\winddk\hello directory Linking Executable - objchk\i386\hello.sys for i386 BUILD: Done 2 files compiled 1 executable built C:\WINDDK\hello> -----  無事コンパイルが完了すると、SOURCESファイル、MAKEFILEファイル、hello.c ppファイルの他に2つのフォルダと1つのログファイルが作成されます。そしてob jchk\i386フォルダ以下にある「C:\WINDDK\hello\objchk\i386\hello.sys」とい う拡張子が.sysのファイルが、デバイスドライバファイルです。これでコンパイ ルは無事完了となります。ちなみにこの例ではチェックビルドを行いましたが、 フリービルドでも構いません。64ビット環境の方は、64ビットのチェック(また はフリー)ビルドを行ってください。では、このhello.sysファイルを実行するこ とにします。 【編注1】WB10の「ブルースクリーンと仲良くなろうよ」という記事にもあるよう に、「Debugging Tools for Windows」というツールの中にDDK(Driver Develop ment Kit)が含まれていたと思います。 http://www.microsoft.com/japan/whdc/devtools/debugging/default.mspx ■0x03.) 実行  実際ビルドして作成されたhello.sysファイルですが、これいったいどうやって 実行するのでしょうか? というかそもそも.sysファイルって何だろうと思いま すが、それは私にも分かりません。ただドライバは一般的に.sysファイルみたい です。WindowsXPなら「C:\WINDOWS\system32\drivers」以下をみると.sysファイ ルがたくさんあるのがわかります。  さて、とりあえず実行したいわけですが、ドライバは通常Windows起動時にWin dows本体に組み込まれます。ドライバの中にはOSのboot時に実行されるものやシ ステム初期化時に実行されるものなど、もはやOSの一部となるような動作をする のが当たり前というか、そういう処理が必要なソフトウェアがそもそもドライバ を利用するわけです。なので、再起動が日常茶飯事になります。動作を確認する ためにはOSの再起動をしなければなりませんし、実行を解除するためにもやはり OSの再起動が必要となります。さらに通常のアプリケーションデバッガは意味を 持ちませんので、OllyDbgやVC++についているデバッガも無意味です。なのでデバ ッグを行う際はSoftICEなどを使うことになるようです。  話がずれてきたので元に戻します。ドライバを実行するためにはレジストリを 変更する必要があります。そしてその後再起動を行ないOSに組み込みます。とい うことで以下のようなファイルを作成します。 ----- hello.reg REGEDIT4 [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\hello] "Start"=dword:1 "Type"=dword:1 "ErrorControl"=dword:1 "DisplayName"="hello" -----  .regファイルはダブルクリックするとレジストリにデータを追加してくれます。 ちなみに後で手動で消さなければならないので、「HKEY_LOCAL_MACHINE\System\ CurrentControlSet\Services\hello」の位置は覚えておいてください。  hello.regをレジストリに追加して、さらにhello.sysファイルを「C:\WINDOWS\ system32\drivers」以下にコピーします。これで準備完了です。Windowsを再起動 してください。  Windowsが起動するとちゃんとhello.sysが実行されています。といってもその ままでは確認できないため、デバイスドライバを表示するツールを使うことにし ます。もし私と同じ環境である「WinXP DDK」を使っているならば「Device Tree V2.6」というツールが「WinXP DDK」の中に入っていますのでそれを起動してく ださい。 http://ruffnex.oc.to/kenji/windriver/pic1.png  もしXP以外のDDKを使っている場合は、「Sysinternals」というサイトから「W inObj」というドライバ閲覧ツールをDLしてください。WinObjを使ってhello.sys ドライバを確認したキャプチャー画像が以下です。 http://ruffnex.oc.to/kenji/windriver/pic2.png ○Sysinternals http://www.sysinternals.com/ ○WinObj http://www.sysinternals.com/ntw2k/freeware/winobj.shtml  これで無事ドライバがコンパイル実行できました。さて、実際実行されたドラ イバですが、一度実行してしまうとOS起動中は終了できません。いわばOSに組み 込まれている状態ですので、終了させるためには再びレジストリを変更して、he llo.sysファイルを削除して、再起動する必要があります。つまりデバイスドライ バは、作成後、実行確認と終了時の2回の再起動を必要とするわけです。通常のア プリケーションプログラムのように、.exeファイルをダブルクリックして実行し、 [×]ボタンで終了というように簡単にはいかないのです。なんともメンドクサイ ですが、これがデバイスドライバの開発みたいです。  では、ファイル名を指定して実行よりregedit.exeを起動して、実行時に登録し たレジストリ「HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\hello」 を削除してください。さらに、「C:\WINDOWS\system32\drivers」以下にコピーし たhello.sysも削除してください。そして再起動してください。  再起動後、再び「Device Tree V2.6」を使ってドライバを確認してください。 helloはもう起動していません。これで終了となります。 ■0x04.) サービス制御マネージャー  つまり、ドライバ開発の一連の流れは以下のようになります。 1、ソースコードを書く 2、SOURCESファイル、MAKEFILEファイルをそれぞれ作成する 3、ソースコードのビルドを行う 4、レジストリを変更し、.sysファイルをdriversファイルにコピーする 5、再起動 6、実行を確認 7、レジストリを変更し、.sysファイルをdriversファイルから削除する 8、再起動 9、終了を確認  そして、実行時にエラーなどがあったらもちろん再度ソースを編集してビルド し、実行を確認しなければならないので、以後3から9を繰り返すことになります。  うーん、かなりメンドクサイです。特に2回の再起動はたえられません。一度実 行を確認するだけで、2回も再起動を要するのはさすがにやる気でません。という ことで、これを何とか打開しようと筆者(つまり私)は考えました。まぁデバイ スドライバですので「一度実行してしまったら、再起動する限り終了できない」 というのは分かります。でも実行するくらいは、ボタンひとつでやらせてくださ い。  ここで現れる救世主が「サービス制御マネージャー」です。これを利用すると、 なんとボタンひとつでデバイスドライバが起動するツールが作れるらしいのです。 ということで実際に作ってみました。 http://ruffnex.oc.to/kenji/windriver/idriver.zip  ソースコードも添付してますので、興味があったらご覧ください。ソースコー ドの解説はしませんのでご了承ください。でも毎度のごとくコメントはたくさん つけてます。  起動すると以下のように表示されます。 http://ruffnex.oc.to/kenji/windriver/install.png  .sysファイルを選択して「Install」ボタンをクリックするとWindowsにドライ バがインストールされます。「Device Tree V2.6」で確認してください。ちなみ に、インストールはすぐにできますが、「UnInstall」ボタンを押してもその瞬間 からアンインストールはされません。あくまで再起動時(Windows終了時)にアン インストールが実行されます。あと、アンインストールしなければ次回OS起動時 もドライバが実行されます。 ■0x05.) デバッグ  SoftICEを用意してもらえれば万事解決なのですが、さすがにそうもいかないの でデバッグ環境を整えることにします。というか、デバイスドライバって、CUIプ ログラムのようにテキストを表示する場所もなければ、Windows(GUI)プログラ ムのようにウィンドウを描画するわけでもないので、どこまで実行されているの か、どこにエラーがあるのかが、まったくもって分かりません。そもそもデバイ スドライバというものそれ自体がWindowsの内部でこっそりと動いているモノであ るわけですので、デバッグという観点から見たら、もう救いようがありません。 よって、まずはそこから整えていくことにします。 ○Sysinternals http://www.sysinternals.com/ ○DebugView http://www.sysinternals.com/ntw2k/freeware/debugview.shtml  「Sysinternals」というサイトに「DebugView」なるツールがあります。まずは これをDLしてください。現在のバージョンは4.3です。これはドライバ開発者の中 ではかなり有名なツールらしく、結構いろいろな人に使われているようです。さ て、このツール、その名の通りデバッグ情報を出力してくれるだけなのですが、 OutputDebugStringからのデータだけでなく、DbgPrintからのデータも表示してく れるところがGOODです。つまりカーネルモードからのデバッグ情報も表示してく れるわけです。ちなみにDbgPrintはカーネルモードのOutputDebugStringみたいな もので、MSDNでは以下のように定義されています。 ○DbgPrint - MSDN http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ddtools/hh/ddtools/DebugFns_5e11bbcc-adc2-46c0-b371-0e54c50bb2dc.xml.asp ----- ULONG DbgPrint(IN PCHAR Format, ...[arguments] ); -----  みてわかるとおり、使い方はprintfと同じです。では、これを利用してhello. cppを改良します。以下のプログラムをみてください。 ----- Dhello.cpp #ifdef __cplusplus extern "C" { #endif #include NTSTATUS DriverEntry(PDRIVER_OBJECT, PUNICODE_STRING); #ifdef __cplusplus } #endif NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath) { DbgPrint("Hello World! from kernel mode."); return STATUS_SUCCESS; } ----- ----- MAKEFILE !INCLUDE $(NTMAKEENV)\makefile.def ----- ----- SOURCES TARGETNAME=Dhello TARGETTYPE=DRIVER TARGETPATH=obj SOURCES=Dhello.cpp -----  簡単ですね。DbgPrintが追加されただけです。ではこれをビルドしてください。 hello.sysの時は再起動しましたが、今回は「サービス制御マネージャー」の項で 作成したツールを使ってください。  まずは、Dbgview.exeを起動します。これはいろいろと設定できるようですが、 私の場合はDLした状態(デフォルト)のままでOKでしたので、何も変更しない状 態で起動してください。起動すると以下のようなウィンドウが表示されます。 http://ruffnex.oc.to/kenji/windriver/dbview.png  そして、起動した状態のまま、今度は「Driver Install Program」を使って、 Dhello.sysをインストールしてください。無事インストールが完了したら、Dbgv iew.exeのウィンドウを開いてください。以下のように表示されます。 http://ruffnex.oc.to/kenji/windriver/dbview2.png  これでとりあえずDbgPrintを使ってデバイスドライバからの出力が受けられる ようになりました。もっと大きなプログラムを作成するのならSoftICEのような有 用なデバッガを用いて、本格的に処理を追っていかなければなりませんが、個人 で作るような小さなプログラムならば、DbgPrintとDbgview.exeで十分でしょう。 今後は「DbgPrint」と「Dbgview.exe」そして「サービス制御マネージャー」を利 用して作成した「Driver Install Program」を使って、デバイスドライバ作成講 座を進めていくことにします。  今回のサンプルプログラムである「hello」と「Dhello」は、ZIP圧縮して以下 のアドレスにアップしました。参考にしてください。 http://ruffnex.oc.to/kenji/windriver/driver1.zip ■0x06.) さいごに  さて、いかがだったでしょうか。今回は「Windows Device Driver Programmin g Part 1」と題してお送りしましたが、「Part 2」があるかどうかは定かではあ りません。「デバイスドライバ作成講座を進めていくことにします」と言ってい るにも関わらず(笑)。というのも、こんなマニアックなことを書いてると「本 当に誰も読んでくれないのでは?」という不安がよぎるからです。さすがにモチ ベーションが保てません(^^;。なので、こういう読者層が極度に狭いネタは自分 のHPでこっそり公開しようかなぁと考えていますが、そんな時間もないですし「 そもそもお前はたくさんの人に読んでもらえるようなモノを書けるのか?」とい われると、書けないです(^^;。なのでこのまま突き進んでいくことにします(笑)。 ただ、せっかくデバドラ関連の記事を書いたので、今後はMACフレームレベルでの パケット取得方法や、カーネルモードプログラムのAPIフック方法などを解説して いけたらなと思います。さて、最後になりましたが、ここまで読んでくれて本当 にありがとうございます。  では、また会う日まで... ■0x07.) 参考サイト ・Driver Development Part 1: Introduction to Drivers http://www.codeproject.com/system/driverdev.asp ・Driver Development Part 2: Introduction to Implementing IOCTLs http://www.codeproject.com/system/driverdev2.asp ・Driver Development Part 3: Introduction to driver contexts http://www.codeproject.com/win32/driverdev3.asp ・Driver Development Part 4: Introduction to device stacks http://www.codeproject.com/system/driverdev4asp.asp ・Driver Development Part 5: Introduction to the Transport Device Interface http://www.codeproject.com/useritems/driverdev5asp.asp x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第15章: カード審査の実態 --- 著者:Aluminumovercast x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) 概要  クレジットカードの審査方法について実際どのように行われているのか疑問に 思った方も少なくないと思います。試しに知り合い何人かに尋ねたところ審査担 当者が申し込み表をチェックして何かの基準で決めているのではないかという意 見が多く聞かれました。  また、こんな経験のある方もいるかもしれません。例えばA社とB社にほぼ同時 期に申し込んだらA社だけ発行されてB社は断られてしまった、複数回に渡るカー ドの延滞をしたらカード会社から与信額(カード限度額)を引き下げられた、ま たはカード停止(返却)された経験のいる方もいるかもしれません。同じ回数を 延滞してもA社は今まで通り使えるのにB社はすぐに停止されてしまったという話 も聞くことがあります。  現在のクレジットカードの審査は人手による判断は極限まで排除され、多くの 場合「審査モデル」(呼称は各社異なります)と呼ばれる、いわゆる数理方程式 によってジャッジされています。  今回は現在行われているカードの審査について、実際の審査方法を紹介しなが ら説明していきたいと思います。 ■0x02.) 免責 ・本資料はクレジットカードの審査方法について説明するものです。無担保ロー ンや住宅ローン、自動車ローンなどについてはまったく考え方の異なる方法がと られていることがありますのでご注意ください。 ・今回紹介するカード審査方法は実際にある銀行系の企業が、データ分析ソフト ウェア用にシュミレーション用として公開したもので、実際の審査で運用される ものはクレジットカード会社独自の基準によってそれぞれ異なります。 ・資料で使用する審査モデルは初期審査で使用されるものであり、初期審査で「 承認」が出ても本審査と呼ばれる、照会された個人信用情報を利用した審査では 「拝辞」となるケースが十分ありえます。本資料の内容は個人の与信状況からカ ード審査の承認を保証するものではなく、その損害については明示・黙示を問わ ず一切の責任を負いません。  また、「資料の通りの属性なのに断られた」などのクレーム等も一切受け付け られません。 ・本資料で登場する審査モデルテンプレートの著作権は株式会社浜銀総合研究所 に属すものであり、その使用に関しては著作者の許諾用件に基づき公開していま す。 ・本資料で登場する審査用与信データは、審査モデルのテスト用に作成されたも のであり、実際のデータの抽出サンプル等ではありません。 ・本資料で登場する審査モデルのテンプレートは、特殊な業務用ソフトでしか使 用できないこと、また一般公開されていないという性質上、再配布の許諾はされ ておりますが、本資料では不適切と判断し配布はいたしません。 ■0x03.) はじめに  今回は初期与信にはどのようなデータが使用されるのか、またどのような審査 方法が行われるのかに重点をおいて説明しますので、「どうしたらカードの審査 に通るのか」という類のテクニック(?)的な内容ではありませんので、最初に お断りしておきます。  また、カードの審査承認基準はカード会社が独自に定めるものであり、こうす れば通りますという概論的なセオリーは現実には存在しません。  そして、本文中で詳しく紹介しますが、カードの審査は最新の数理技術、統計 理論を使用して、極めて客観的に、標準化されたスキームで行われており、審査 を人が行うときのような「紛れ」の要素はほとんどないといって過言ではありま せん。  従って前述のような内容の個別の質問にもお答えしようがありませんのでご了 承ください。 ■0x04.) 初期審査とは  皆さんがカードに申し込まれる場合、最初は当然ですが申し込み表に記入する ことになります。最近ではインターネットでの受付もできる企業がほとんどです ので、インターネットで入会される方も多いと思いますが、入力する内容は手書 きの場合とまったく同じですので、両者の違いについては本資料では特に言及し たとき以外は同じだと思っていただいて結構です。ただし、カード会社によって は若干異なることもあります。最近では、「ネットで10分で審査!」などを売り 物にしているクレジットカード会社や信販会社も存在しますが、そこで行われて いるのがすなわち「初期審査」と呼ばれるものです。初期審査はあくまでも申し 込み表の内容から審査を行うものであり、意図するかしないかに関わらず虚偽の 事実が記入されていたり、空白だったりとその信用度にはやはり疑問が残ります。 従って初期審査を通過してから、(場合によっては申込者の意思を確認した後) 「本審査」に移行します。本審査では先ほどの内容に加えて「個人信用情報」を 利用します。個人信用情報とは銀行が加盟する全国銀行個人信用情報センターや 信販系が加盟するCICなど、個人の信用情報、すなわち、他社借金の件数や過去の 延滞履歴、破産情報など、所謂借金に関する情報が主に登録されていると思って ください。  自分はそんなところに登録手続きした覚えはないし、使うのはカードの一括払 いだけで借金は一円もしていないと思われる方もいらっしゃるかもしれませんが、 クレジットカードや自動車ローン、住宅ローンなどに一度でも申し込まれたこと のある方は、自動的に登録されることになっています。  そんな話しは知らない、聞いていないと言う方は申し込み契約書の裏面をよく 読んでください。「申し込むということは同時に登録に同意することだからね」 というような文面が必ず掲載されています。  また、クレジットカードによる買い物については支払期日に支払いを完了して 初めて購入者に所有権が移転します。つまり、支払が完了するまでは法律上はカ ード会社に所有権があるということになりますので、一括払いの残債もやはり借 金に性質が近いと思ったほうがよいと思います。ちなみに、カードで買った商品 を支払いが終わっていないのに、人に転売したり質屋で売る行為は上記の理由か らカード会社に詐欺として告発される恐れがありますので注意してください。も ちろん支払いが無事になされている限り転売の事実は判明することはないのです が。  それではテスト用データを使って初期審査の流れを見ていきましょう。初期審 査の流れは以下のようになります。 1:審査モデルを構築 2:申し込みデータを審査モデルに流し結果を見る。  初期審査は申込者の自己申告に基づき申込者の属性によって審査をしていきま すが、そのジャッジを下すのは人間ではなく、事前に作成された「審査モデル」 です。審査モデルとは一連のフィールドの関係を記述した数値方程式であり、通 常は統計手法に基づいており、モデルで使用するフィールドの分布に関する仮説 や、関係の数値的な形式が含まれています。審査モデルを使用するメリットは人 手による審査と違い迅速で効率的であること、客観性が保たれること、紛れの要 素がないこと、リスク調整後収益をコントロールできることが上げられます。審 査モデルは既に会員となっている人の利用履歴データを使用します。  なお、今回の資料は審査の流れを説明することに主眼を置いていますので、個 人信用データは項目として使用しません。  しかし、項目として、今回紹介するような使い方に順ずることは資料を最後ま で読んでいただければ理解いただけると思います。 表1:審査モデル構築用テストデータ ============================================================================================================================================================================================================ ID 正常代弁区分 年齢 性別 既婚独身区分 居住区分 同居別居区分 勤続年数区分 職種 業種 転職有無 資本金 従業員数 年収 年間収益額 ============================================================================================================================================================================================================ 6208 正常者 40-49歳 男性 独身 本人持家 同居 20年以上 技術職 欠損 無 5千万以上 10名未満 500万≦ 64533 4416 正常者 50-59歳 男性 既婚 本人持家 同居 30年以上 営業 製造・建築 無 1千万以上 10名以上 1000万≦ 64284 8421 正常者 40-49歳 男性 既婚 本人持家 同居 1年 事務職 公的機関 無 1千万未満 10名未満 700万≦ 63470 1574 正常者 60-65歳 女性 既婚 本人持家 同居 0年 欠損 欠損 無 5千万以上 10名未満 200万≦ 63142 571 正常者 30-39歳 男性 既婚 借家・アパート 同居 2年以上 技術職 製造・建築 無 5千万以上 10名以上 400万≦ 60492 4703 正常者 40-49歳 男性 独身 家族持家 同居 10年以上 技術職 欠損 無 欠損 欠損 1000万≦ 60151 2225 正常者 50-59歳 男性 既婚 本人持家 同居 20年以上 欠損 小売 無 1千万未満 10名以上 1000万≦ 59840 5376 正常者 50-59歳 男性 既婚 本人持家 同居 30年以上 技術職 製造・建築 無 欠損 10名未満 500万≦ 59815 9809 正常者 30-39歳 女性 既婚 家族持家 同居 5年以上 事務職 不動産業 無 1千万未満 10名未満 300万≦ 59101 7210 正常者 50-59歳 男性 独身 本人持家 同居 10年以上 技術職 製造・建築 無 1千万未満 10名以上 500万≦ 57592 5114 正常者 30-39歳 男性 既婚 家族持家 同居 5年以上 接客 小売 無 1千万未満 10名以上 400万≦ 57217 3984 正常者 20-29歳 女性 既婚 借家・アパート 同居 5年以上 技術職 製造・建築 無 1千万未満 10名未満 400万≦ 56769 8756 正常者 40-49歳 男性 既婚 本人持家 同居 20年以上 事務職 小売 無 1千万未満 10名以上 1000万≦ 56535 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ※一部のみ。実際には10000件のテストデータを使用。  いくつか見慣れない属性がありますので説明します。  まず、代弁という言葉です。代弁とは代位弁済の略で、債務者が何らかの理由 により金融機関への返済が不能になった場合、保証契約を結んだ保証会社(第三 者)が債務者に代わり金融機関に対して債務を弁済することをいいます。つまり、 利用者の度重なる延滞を保証会社が肩代わり補填することをいいます。ただし、 補填するといっても利用者側は債務が免除されるわけではなく、債権者がカード 会社から保証会社に移るだけですので注意が必要です。このように長期にわたる 延滞をした利用者は代弁者として、延滞のない「正常者」と分けて扱われます。  年間収益額というのはその属性の会員が年間どれだけカードを利用したかとい う数字です。  代弁金額というのは前述のように保証会社によって支払われた額ということに なります。  余談ですが、カード会社がいう延滞というのは基本的に連続、及び間隔を空け て複数回に繰り返されたり、督促を複数回無視した場合に対して初めて呼ばれる もので、たまたま残高不足で督促がきても、次回指定された支払期日までにきち んと入金すれば、いきなり延滞(代弁)の履歴がつくようなことはありません。 ただし、いったん代弁区分が立つと個人信用情報にも登録されますので他社クレ ジットカードを申し込んでもほとんど拝辞となることは覚えておいて損はないで しょう。  今回は便宜上割愛していますがもうひとつ大切な属性があります。それは他社 の利用状況です。申し込み表には他社カード枚数やローンの額を記入する欄が必 ずあると思います。前述の通り、個人信用情報機関によって、クレジットカード の所有者や無担保ローンなど各種ローンの利用者は、その利用状況や過去の負の 履歴は申し込みをするカード会社には筒抜けになっています。それなのに申し込 み書には他社カード枚数やローンの残債に関する記入欄もあります。なぜでしょ うか?  実はこの欄は審査で「はねられる」かもしれないと言う知恵を働かせてか「過 少申告」する申込者が多いのも有名です。  いずれわかることをわざわざ申し込み書に書かせるのには理由があります。ひ とつには初期審査の段階で個人信用情報を照会しなくてもある程度の与信状況が 判定できるというメリットがあります。従って、過去に代弁や破産がない限り、 初期審査で承認が出た後、本審査で拝辞となるケースではここの情報の不一致に よるものが大きかったかもしれません。こう書くと、「踏み絵をさせているんだ。 ここの数字が違うと審査する人の心象が悪くなって落ちやすい」などと思われる 方もいるかもしれませんが、この部分の情報不一致で拝辞となるのは、単純に他 社利用状況が審査をする会社の基準に一致しないだけであり、個人信用情報と申 告情報が違ったという事実を考慮することは私が知る限りあまりないと思います。 意図するにしろしないにしろ過少申告したことで発生する弊害は、初期審査は承 認されても結局本審査で拝辞となるだけで、ようするに「時間の無駄」というこ とになり、過少申告によるメリットはやはりまったくありません。 ※所有権に関する内容や、個人信用情報については本資料の趣旨に一致しません ので詳細な説明は割愛させて頂きます。興味をもたれた方は、様々なWEBサイト で情報を調べることが出来ますので検索エンジンなどを利用して調べてみてくだ さい。 ■0x05.) 審査モデルの構築  前置きが長くなりましたが、以上を踏まえた上でこれからいよいよ初期審査の 手順について触れていきましょう。  まず、過去の履歴データで審査モデルを作ります。このモデルを作ることをモ デリングと呼びます。審査モデルを作るには、決定木、ロジスティック回帰、ニ ューラルネットワークやそれらの組みあわせによって構築します。これらの「予 測モデル」は「教師あり学習」と呼ばれ、入力フィールドの値を使用して出力フ ィールドの値を予測するものです。  それぞれの特徴は以下の通りです。 ●決定木(ルール算出:ディシジョンツリー)  代表的な手法としてC5.0やC&RTなどがありますが、今回はC5.0 アルゴリズムを 使用して、ディシジョン ツリーまたはルールセットを作成します。C5.0 モデル は、最大の情報の対応をもたらすフィールドに基づいてサンプルを分割します。 最初の分割によって定義された各サブサンプルは、異なるフィールドに基づいて 再度分割されます。サブサンプルをこれ以上分割できなくなるまで、この過程が 繰り返されます。最終的に、最下位レベルの分割が再検証され、モデルの値にほ とんど寄与しないレベルが削除(剪定)されます。C5.0 では、2 種類のモデルを 生成できます。  ディシジョン ツリーは、アルゴリズムによって検出された分割の詳細を表して います。  各ターミナル(葉)ノードは、学習データの特定のサブセットを表します。学 習データの各ケースは、ディシジョン ツリー中のひとつのターミナルノードだけ に属します。つまり、ディシジョン ツリーに存在する特定のデータレコードに対 しては、ひとつの予測だけが可能です。  これとは対照的に、ルールセットは、各レコードに対して予測を試みる複数の ルールをセットにしたものです。ルールセットは、ディシジョン ツリーから派生 したもので、ディシジョン ツリーで検索された情報を単純化または凝縮したもの ということができます。より単純なモデルでありながら、ディシジョン ツリー全 体からの重要な情報の大部分を保持できます。  ルールセットとディシジョン ツリーでは機能が異なるため、属性も異なります。 最大の違いは、ルールセットでは、特定のレコードに複数のルールが適用される こともあれば、ルールがまったく適用されないこともある点です。複数のルール を適用する場合、各ルールに対して、そのルールに関連付けられた確信度に基づ いて重み付けされた「票決」が行われ、最終的な予測は、対象レコードに適用す るすべてのルールの重み付き票を組み合わせて決定されます。適用するルールが ない場合、デフォルトの予測がレコードに割り当てられます。 ●ニューラルネットワーク(NNW)  多層パーセプトロンと呼ばれることもあるニューラルネットワークは、基本は 人間の脳が情報を処理する方法を単純化したモデルです。ニューラルネットワー クは、相互に接続された多数の単純な処理ユニットをシミュレートします。  処理ユニットは、ニューロンを抽象化したものに似ています。処理ユニットは、 複数の層で編成されています。 通常、ニューラル ネットワークは、入力フィー ルドを表すユニットから成る入力層、隠れ層、および出力フィールドを表すユニ ットから成る出力層の 3 種類の層で構成されています。ユニットは、さまざまな 接続強度 (重み)で接続されています。  ネットワークは、各レコードを検証してレコードごとに予測を生成し、不正確 な予測が行われた場合は重みを調整することで、学習していきます。この過程を 何度も繰り返し、1 つ以上の停止基準が満たされるまで予測の改善を継続します。  入力フィールドタイプに特に制限はありません。通常ニューラルネットでは、 数値型、シンボル値型、またはフラグ型の入出力を処理できます。  ニューラルネットワークは、強力な一般関数推定法です。通常この手法は、他 の手法と同等またはそれ以上の性能で予測を行います。場合によっては、はるか に優れた性能を見せることもあります。  また、これは他のモデリングにも言える事ですが、ニューラルネットによるモ デリングを実行したり、学習させたり、適用するには、通常最低限の統計学およ び数学の知識しか必要ありません。なぜなら主要なデータマイニングアプリケー ションではユーザーがそれらをほとんど意識することなく処理できるように操作 が簡略化されているからです。同時に、それらのツールにはよくあるニューラル ネットワークの落とし穴を回避するための機能が組み込まれています。ネットワ ークの解釈を支援する重要度分析、過度の学習を防止する剪定と検証、適切なネ ットワーク アーキテクチャを自動的に検出する動的ネットワークなどの機能が用 意されています。NNWにはMLP(Multi Layer Perseptron)やRBFN(Radical basi s Function)などがあります。 ■0x06.) モデリング  それではC5.0を使って先ほどのテストデータをモデリングしてみましょう。  まず今回は代弁者の属性データの内訳を見てみます。 ===== 値 割合 % 度数 代弁者 0.05 5.0 500 正常者 0.95 95.0 9500 =====  データの中には5%の代弁者が存在します。これをデフォルト率5%といいます。 このリスクの高いグループについてC5.0でモデリングを行い、内容を見てみまし ょう。 --------------------------------------------------------------------------------------------------------- C5.0によるモデリング結果 --------------------------------------------------------------------------------------------------------- 業種 in [ "その他サービス" "マスコミ・出版" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] [ モード: 正常者 ] (8,007.52) 従業員数 in [ "1000名以上" "300名以上" "欠損" ] [ モード: 正常者 ] (3,538.12) 転職有無 = 無 [ モード: 正常者 ] (3,475.11) 年齢 in [ "20-29歳" "30-39歳" ] [ モード: 正常者 ] (2,301) 居住区分 in [ "その他" "社宅・寮" ] [ モード: 正常者 ] (575.001) 年収 in [ "0万≦" "200万≦" "500万≦" ] [ モード: 正常者 ] (225) 従業員数 in [ "1000名以上" ] [ モード: 正常者 ] (144) 年齢 = 20-29歳 [ モード: 正常者 ] => 正常者 (91, 0.989) 年齢 = 30-39歳 [ モード: 代弁者 ] => 代弁者 (53, 0.057) 従業員数 in [ "300名以上" "欠損" ] [ モード: 代弁者 ] => 代弁者 (81, 0.086) 年収 in [ "1000万≦" "400万≦" ] [ モード: 正常者 ] => 正常者 (112, 0.982) 年収 in [ "300万≦" "700万≦" ] [ モード: 正常者 ] (238) 業種 in [ "その他サービス" "小売" "旅館" "欠損" "製造・建築" "農林水産" ] [ モード: 代弁者 ] => 代弁者 (226, 0.102) 業種 in [ "マスコミ・出版" "不動産業" "運輸" ] [ モード: 正常者 ] => 正常者 (12, 1.0) 居住区分 in [ "借家・アパート" "家族持家" "本人持家" ] [ モード: 正常者 ] (1,725.98) 業種 in [ "その他サービス" "旅館" "欠損" "製造・建築" "運輸" ] [ モード: 正常者 ] (1,447.99) 職種 in [ "事務職" "技術職" "欠損" ] [ モード: 正常者 ] (1,157.99) 同居別居区分 = 別居 [ モード: 正常者 ] (184) 職種 in [ "事務職" ] [ モード: 代弁者 ] => 代弁者 (33, 0.121) 職種 in [ "技術職" "欠損" ] [ モード: 正常者 ] => 正常者 (151, 0.96) 同居別居区分 = 同居 [ モード: 正常者 ] (967.994) 勤続年数区分 in [ "0年" "10年以上" "1年" "30年以上" ] [ モード: 正常者 ] (416.001) 年収 in [ "0万≦" "1000万≦" "300万≦" "400万≦" "700万≦" ] [ モード: 正常者 ] => 正常者 (208, 1.0) 年収 in [ "200万≦" "500万≦" ] [ モード: 正常者 ] (208) 居住区分 in [ "借家・アパート" "家族持家" ] [ モード: 正常者 ] => 正常者 (159, 0.975) 居住区分 in [ "本人持家" ] [ モード: 代弁者 ] => 代弁者 (49, 0.061) 勤続年数区分 in [ "20年以上" "2年以上" "5年以上" ] [ モード: 正常者 ] (552.001) 業種 in [ "その他サービス" "旅館" "欠損" ] [ モード: 正常者 ] => 正常者 (231, 0.983) 業種 in [ "製造・建築" "運輸" ] [ モード: 正常者 ] (321) 職種 in [ "事務職" "欠損" ] [ モード: 代弁者 ] => 代弁者 (146, 0.068) 職種 in [ "技術職" ] [ モード: 正常者 ] => 正常者 (175, 0.971) 同居別居区分 = 欠損 [ モード: 正常者 ] => 正常者 (6, 1.0) 職種 in [ "労務" "営業" ] [ モード: 正常者 ] (232) 年齢 = 20-29歳 [ モード: 正常者 ] (149) 居住区分 in [ "借家・アパート" "本人持家" ] [ モード: 代弁者 ] => 代弁者 (63, 0.127) 居住区分 in [ "家族持家" ] [ モード: 正常者 ] => 正常者 (86, 0.965) 年齢 = 30-39歳 [ モード: 正常者 ] => 正常者 (83, 0.976) 職種 in [ "接客" ] [ モード: 代弁者 ] => 代弁者 (58, 0.103) 業種 in [ "マスコミ・出版" "不動産業" "小売" "農林水産" ] [ モード: 正常者 ] => 正常者 (278, 0.989) 年齢 in [ "40-49歳" "50-59歳" ] [ モード: 正常者 ] (1,078.99) 資本金 in [ "1億以上" "1千万以上" "5千万以上" ] [ モード: 正常者 ] (849.996) 性別 = 男性 [ モード: 正常者 ] (708.999) 勤続年数区分 in [ "0年" "1年" "20年以上" "30年以上" "5年以上" ] [ モード: 正常者 ] => 正常者 (575.001, 0.981) 勤続年数区分 in [ "10年以上" "2年以上" ] [ モード: 代弁者 ] => 代弁者 (134, 0.075) 性別 = 女性 [ モード: 正常者 ] => 正常者 (141, 1.0) 資本金 in [ "1千万未満" "欠損" ] [ モード: 正常者 ] => 正常者 (229, 1.0) 年齢 in [ "60-65歳" ] [ モード: 正常者 ] => 正常者 (95, 1.0) 転職有無 = 有 [ モード: 代弁者 ] => 代弁者 (63, 0.127) 従業員数 in [ "100名以上" "10名以上" "10名未満" ] [ モード: 正常者 ] (4,469.19) 居住区分 in [ "その他" "家族持家" "本人持家" "社宅・寮" ] [ モード: 正常者 ] (3,181.08) 転職有無 = 無 [ モード: 正常者 ] (3,102.07) 職種 in [ "事務職" "技術職" "欠損" ] [ モード: 正常者 ] (2,285) 勤続年数区分 in [ "0年" "20年以上" ] [ モード: 正常者 ] => 正常者 (560.001, 0.977) 勤続年数区分 in [ "10年以上" "1年" "2年以上" "30年以上" "5年以上" ] [ モード: 正常者 ] (1,724.98) 業種 in [ "その他サービス" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] [ モード: 正常者 ] (1,692.98) 資本金 in [ "1億以上" "5千万以上" "欠損" ] [ モード: 正常者 ] (678.999) 既婚独身区分 in [ "既婚" ] [ モード: 正常者 ] (349.001) 年齢 in [ "20-29歳" "30-39歳" "40-49歳" "60-65歳" ] [ モード: 正常者 ] (266) 業種 in [ "その他サービス" "欠損" ] [ モード: 代弁者 ] => 代弁者 (125, 0.072) 業種 in [ "不動産業" "小売" "旅館" "農林水産" "運輸" ] [ モード: 正常者 ] => 正常者 (36, 1.0) 業種 in [ "製造・建築" ] [ モード: 正常者 ] (105) 従業員数 in [ "100名以上" "10名以上" ] [ モード: 代弁者 ] => 代弁者 (85, 0.106) 従業員数 in [ "10名未満" ] [ モード: 正常者 ] => 正常者 (20, 1.0) 年齢 in [ "50-59歳" ] [ モード: 正常者 ] => 正常者 (83, 0.988) 既婚独身区分 in [ "欠損" "独身" ] [ モード: 正常者 ] => 正常者 (330.001, 0.979) 資本金 in [ "1千万以上" "1千万未満" ] [ モード: 正常者 ] (1,013.994) 従業員数 in [ "100名以上" "10名以上" ] [ モード: 正常者 ] (606.001) 同居別居区分 = 別居 [ モード: 代弁者 ] => 代弁者 (51, 0.118) 同居別居区分 = 同居 [ モード: 正常者 ] (552.002) 資本金 = 1千万以上 [ モード: 正常者 ] (347.001) 業種 in [ "その他サービス" "不動産業" "旅館" "欠損" ] [ モード: 正常者 ] (141) 居住区分 in [ "その他" ] [ モード: 正常者 ] => 正常者 (11, 1.0) 居住区分 in [ "家族持家" "本人持家" "社宅・寮" ] [ モード: 代弁者 ] => 代弁者 (130, 0.085) 業種 in [ "小売" "製造・建築" ] [ モード: 正常者 ] (185) 居住区分 in [ "その他" "本人持家" "社宅・寮" ] [ モード: 正常者 ] => 正常者 (102, 0.99) 居住区分 in [ "家族持家" ] [ モード: 代弁者 ] => 代弁者 (83, 0.06) 業種 in [ "農林水産" ] [ モード: 代弁者 ] => 代弁者 (1, 1.0) 業種 in [ "運輸" ] [ モード: 正常者 ] => 正常者 (20, 1.0) 資本金 = 1千万未満 [ モード: 正常者 ] => 正常者 (205, 0.98) 同居別居区分 = 欠損 [ モード: 正常者 ] => 正常者 (3, 1.0) 従業員数 in [ "10名未満" ] [ モード: 正常者 ] (408.001) 性別 = 男性 [ モード: 正常者 ] (268) 年収 in [ "0万≦" "200万≦" "400万≦" "500万≦" "700万≦" ] [ モード: 代弁者 ] => 代弁者 (188, 0.138) 年収 in [ "1000万≦" "300万≦" ] [ モード: 正常者 ] => 正常者 (80, 0.975) 性別 = 女性 [ モード: 正常者 ] (140) 勤続年数区分 in [ "10年以上" "2年以上" "30年以上" "5年以上" ] [ モード: 代弁者 ] => 代弁者 (127, 0.079) 勤続年数区分 in [ "1年" ] [ モード: 正常者 ] => 正常者 (13, 1.0) 業種 in [ "マスコミ・出版" ] [ モード: 代弁者 ] => 代弁者 (32, 0.219) 職種 in [ "労務" "営業" "接客" ] [ モード: 正常者 ] (816.998) 勤続年数区分 in [ "0年" "1年" "30年以上" ] [ モード: 正常者 ] (217) 業種 in [ "その他サービス" "マスコミ・出版" "不動産業" "小売" "旅館" "欠損" "農林水産" "運輸" ] [ モード: 正常者 ] => 正常者 (177, 0.977) 業種 in [ "製造・建築" ] [ モード: 代弁者 ] => 代弁者 (40, 0.1) 勤続年数区分 in [ "10年以上" "20年以上" "2年以上" "5年以上" ] [ モード: 正常者 ] (600.001) 同居別居区分 in [ "別居" "欠損" ] [ モード: 代弁者 ] => 代弁者 (44, 0.182) 同居別居区分 in [ "同居" ] [ モード: 正常者 ] (556.002) 従業員数 in [ "100名以上" "10名以上" ] [ モード: 正常者 ] (333) 資本金 in [ "1億以上" "1千万未満" "5千万以上" ] [ モード: 正常者 ] (191) 既婚独身区分 in [ "既婚" "欠損" "独身" ] [ モード: 代弁者 ] => 代弁者 (191, 0.105) 資本金 in [ "1千万以上" ] [ モード: 代弁者 ] => 代弁者 (113, 0.044) 資本金 in [ "欠損" ] [ モード: 正常者 ] => 正常者 (29, 1.0) 従業員数 in [ "10名未満" ] [ モード: 代弁者 ] => 代弁者 (223, 0.13) 転職有無 = 有 [ モード: 代弁者 ] => 代弁者 (79, 0.165) 居住区分 in [ "借家・アパート" ] [ モード: 正常者 ] (1,287.99) 業種 in [ "その他サービス" "小売" "旅館" "欠損" "製造・建築" ] [ モード: 正常者 ] (1,148.99) 勤続年数区分 in [ "0年" "1年" "2年以上" "30年以上" "5年以上" ] [ モード: 正常者 ] (860.997) 年齢 in [ "20-29歳" "30-39歳" ] [ モード: 正常者 ] (718.999) 資本金 in [ "1億以上" "1千万以上" "欠損" ] [ モード: 正常者 ] (397.001) 勤続年数区分 in [ "0年" "2年以上" "5年以上" ] [ モード: 正常者 ] (324) 職種 in [ "事務職" "労務" "欠損" ] [ モード: 正常者 ] => 正常者 (114, 0.965) 職種 in [ "営業" "技術職" "接客" ] [ モード: 正常者 ] (210) 従業員数 in [ "100名以上" "10名以上" "10名未満" ] [ モード: 代弁者 ] => 代弁者 (210, 0.086) 勤続年数区分 in [ "1年" "30年以上" ] [ モード: 代弁者 ] => 代弁者 (73, 0.151) 資本金 in [ "1千万未満" "5千万以上" ] [ モード: 代弁者 ] => 代弁者 (322, 0.134) 年齢 in [ "40-49歳" "50-59歳" ] [ モード: 代弁者 ] => 代弁者 (133, 0.158) 年齢 in [ "60-65歳" ] [ モード: 正常者 ] => 正常者 (9, 1.0) 勤続年数区分 in [ "10年以上" "20年以上" ] [ モード: 正常者 ] (288) 職種 in [ "事務職" "労務" "営業" "欠損" ] [ モード: 正常者 ] => 正常者 (169, 0.976) 職種 in [ "技術職" "接客" ] [ モード: 正常者 ] (119) 年齢 in [ "20-29歳" ] [ モード: 正常者 ] => 正常者 (17, 1.0) 年齢 in [ "30-39歳" "40-49歳" "50-59歳" "60-65歳" ] [ モード: 代弁者 ] => 代弁者 (102, 0.118) 業種 in [ "マスコミ・出版" "農林水産" ] [ モード: 正常者 ] => 正常者 (30, 1.0) 業種 in [ "不動産業" "運輸" ] [ モード: 正常者 ] (109) 年収 in [ "0万≦" "1000万≦" "700万≦" ] [ モード: 正常者 ] => 正常者 (17, 1.0) 年収 in [ "200万≦" "300万≦" "400万≦" "500万≦" ] [ モード: 代弁者 ] => 代弁者 (92, 0.217) 業種 in [ "公的機関" "医療機関" "金融機関" ] [ モード: 正常者 ] (1,992.98) 職種 in [ "事務職" ] [ モード: 正常者 ] => 正常者 (702.998, 0.99) 職種 in [ "労務" "営業" "技術職" "欠損" ] [ モード: 正常者 ] (1,280.99) 年収 in [ "0万≦" "200万≦" "300万≦" "400万≦" "500万≦" "700万≦" ] [ モード: 正常者 ] (1,142.99) 勤続年数区分 in [ "0年" "30年以上" ] [ モード: 正常者 ] => 正常者 (152, 0.993) 勤続年数区分 in [ "10年以上" "1年" "20年以上" "2年以上" "5年以上" ] [ モード: 正常者 ] (990.994) 居住区分 in [ "その他" ] [ モード: 代弁者 ] => 代弁者 (28, 0.143) 居住区分 in [ "借家・アパート" "家族持家" "社宅・寮" ] [ モード: 正常者 ] (744.998) 年収 in [ "0万≦" "200万≦" "300万≦" "500万≦" "700万≦" ] [ モード: 正常者 ] (613.001) 従業員数 in [ "1000名以上" "100名以上" "10名以上" "300名以上" "欠損" ] [ モード: 正常者 ] (490.002) 年収 in [ "0万≦" "700万≦" ] [ モード: 正常者 ] => 正常者 (85, 0.988) 年収 in [ "200万≦" "300万≦" "500万≦" ] [ モード: 正常者 ] (405.001) 職種 in [ "労務" "営業" "技術職" ] [ モード: 正常者 ] (312) 勤続年数区分 in [ "10年以上" "1年" "20年以上" "2年以上" ] [ モード: 正常者 ] => 正常者 (251, 0.984) 勤続年数区分 in [ "5年以上" ] [ モード: 代弁者 ] => 代弁者 (61, 0.098) 職種 in [ "欠損" ] [ モード: 代弁者 ] => 代弁者 (93, 0.075) 従業員数 in [ "10名未満" ] [ モード: 正常者 ] (123) 居住区分 in [ "借家・アパート" "家族持家" ] [ モード: 代弁者 ] => 代弁者 (108, 0.111) 居住区分 in [ "社宅・寮" ] [ モード: 正常者 ] => 正常者 (15, 1.0) 年収 in [ "400万≦" ] [ モード: 正常者 ] => 正常者 (132, 0.985) 居住区分 in [ "本人持家" ] [ モード: 正常者 ] => 正常者 (218, 0.986) 年収 in [ "1000万≦" ] [ モード: 正常者 ] => 正常者 (138, 1.0) 職種 in [ "接客" ] [ モード: 代弁者 ] => 代弁者 (9, 0.222) ---------------------------------------------------------------------------------------------------------------------------------------  このデータの読み方を解説します。  データを階層的に表示しているのは条件を絞り込む過程です。上から下、左か ら右に行くほど末端の条件ということになります。  例えば、次のような末端のデータは、それより上層の条件を満たした上で、従 業員数が300名未満もしくは欠損(空白)の場合で代弁者であったケースは81件存 在し、確信度が8.6%であるという結果となります。 ============================================================================== 従業員数 in [ "300名以上" "欠損" ] [ モード: 代弁者 ] => 代弁者 (81, 0.086) ==============================================================================  確信度とは、このグループにおいて正確に分類されたレコード(代弁者である と予測されたものが実際に代弁者である)割合を示しています。  ここでは36件の代弁者ルールが出力されました。それらのルールを参照してみ ます。 ---------------------------------------------------------------------------------------------------------------------------------- 代弁者 のルール - 36 ルールあります。 ルール 1: 代弁者 (53, 0.057) if 業種 in [ "その他サービス" "マスコミ・出版" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 従業員数 in [ "1000名以上" "300名以上" "欠損" ] と 転職有無 = 無 と 年齢 in [ "20-29歳" "30-39歳" ] と 居住区分 in [ "その他" "社宅・寮" ] と 年収 in [ "0万≦" "200万≦" "500万≦" ] と 従業員数 = 1000名以上 と 年齢 = 30-39歳 then 代弁者 ルール 2: 代弁者 (81, 0.086) if 業種 in [ "その他サービス" "マスコミ・出版" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 従業員数 in [ "1000名以上" "300名以上" "欠損" ] と 転職有無 = 無 と 年齢 in [ "20-29歳" "30-39歳" ] と 居住区分 in [ "その他" "社宅・寮" ] と 年収 in [ "0万≦" "200万≦" "500万≦" ] と 従業員数 in [ "300名以上" "欠損" ] then 代弁者 ルール 3: 代弁者 (226, 0.102) if 業種 in [ "その他サービス" "マスコミ・出版" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 従業員数 in [ "1000名以上" "300名以上" "欠損" ] と 転職有無 = 無 と 年齢 in [ "20-29歳" "30-39歳" ] と 居住区分 in [ "その他" "社宅・寮" ] と 年収 in [ "300万≦" "700万≦" ] と 業種 in [ "その他サービス" "小売" "旅館" "欠損" "製造・建築" "農林水産" ] then 代弁者 ルール 4: 代弁者 (33, 0.121) if 業種 in [ "その他サービス" "マスコミ・出版" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 従業員数 in [ "1000名以上" "300名以上" "欠損" ] と 転職有無 = 無 と 年齢 in [ "20-29歳" "30-39歳" ] と 居住区分 in [ "借家・アパート" "家族持家" "本人持家" ] と 業種 in [ "その他サービス" "旅館" "欠損" "製造・建築" "運輸" ] と 職種 in [ "事務職" "技術職" "欠損" ] と 同居別居区分 = 別居 と 職種 = 事務職 then 代弁者 ルール 5: 代弁者 (49, 0.061) if 業種 in [ "その他サービス" "マスコミ・出版" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 従業員数 in [ "1000名以上" "300名以上" "欠損" ] と 転職有無 = 無 と 年齢 in [ "20-29歳" "30-39歳" ] と 居住区分 in [ "借家・アパート" "家族持家" "本人持家" ] と 業種 in [ "その他サービス" "旅館" "欠損" "製造・建築" "運輸" ] と 職種 in [ "事務職" "技術職" "欠損" ] と 同居別居区分 = 同居 と 勤続年数区分 in [ "0年" "10年以上" "1年" "30年以上" ] と 年収 in [ "200万≦" "500万≦" ] と 居住区分 = 本人持家 then 代弁者 ルール 6: 代弁者 (146, 0.068) if 業種 in [ "その他サービス" "マスコミ・出版" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 従業員数 in [ "1000名以上" "300名以上" "欠損" ] と 転職有無 = 無 と 年齢 in [ "20-29歳" "30-39歳" ] と 居住区分 in [ "借家・アパート" "家族持家" "本人持家" ] と 業種 in [ "その他サービス" "旅館" "欠損" "製造・建築" "運輸" ] と 職種 in [ "事務職" "技術職" "欠損" ] と 同居別居区分 = 同居 と 勤続年数区分 in [ "20年以上" "2年以上" "5年以上" ] と 業種 in [ "製造・建築" "運輸" ] と 職種 in [ "事務職" "欠損" ] then 代弁者 ルール 7: 代弁者 (63, 0.127) if 業種 in [ "その他サービス" "マスコミ・出版" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 従業員数 in [ "1000名以上" "300名以上" "欠損" ] と 転職有無 = 無 と 年齢 in [ "20-29歳" "30-39歳" ] と 居住区分 in [ "借家・アパート" "家族持家" "本人持家" ] と 業種 in [ "その他サービス" "旅館" "欠損" "製造・建築" "運輸" ] と 職種 in [ "労務" "営業" ] と 年齢 = 20-29歳 と 居住区分 in [ "借家・アパート" "本人持家" ] then 代弁者 ルール 8: 代弁者 (58, 0.103) if 業種 in [ "その他サービス" "マスコミ・出版" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 従業員数 in [ "1000名以上" "300名以上" "欠損" ] と 転職有無 = 無 と 年齢 in [ "20-29歳" "30-39歳" ] と 居住区分 in [ "借家・アパート" "家族持家" "本人持家" ] と 業種 in [ "その他サービス" "旅館" "欠損" "製造・建築" "運輸" ] と 職種 = 接客 then 代弁者 ルール 9: 代弁者 (134, 0.075) if 業種 in [ "その他サービス" "マスコミ・出版" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 従業員数 in [ "1000名以上" "300名以上" "欠損" ] と 転職有無 = 無 と 年齢 in [ "40-49歳" "50-59歳" ] と 資本金 in [ "1億以上" "1千万以上" "5千万以上" ] と 性別 = 男性 と 勤続年数区分 in [ "10年以上" "2年以上" ] then 代弁者 ルール 10: 代弁者 (63, 0.127) if 業種 in [ "その他サービス" "マスコミ・出版" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 従業員数 in [ "1000名以上" "300名以上" "欠損" ] と 転職有無 = 有 then 代弁者 ルール 11: 代弁者 (125, 0.072) if 業種 in [ "その他サービス" "マスコミ・出版" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 従業員数 in [ "100名以上" "10名以上" "10名未満" ] と 居住区分 in [ "その他" "家族持家" "本人持家" "社宅・寮" ] と 転職有無 = 無 と 職種 in [ "事務職" "技術職" "欠損" ] と 勤続年数区分 in [ "10年以上" "1年" "2年以上" "30年以上" "5年以上" ] と 業種 in [ "その他サービス" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 資本金 in [ "1億以上" "5千万以上" "欠損" ] と 既婚独身区分 = 既婚 と 年齢 in [ "20-29歳" "30-39歳" "40-49歳" "60-65歳" ] と 業種 in [ "その他サービス" "欠損" ] then 代弁者 ルール 12: 代弁者 (85, 0.106) if 業種 in [ "その他サービス" "マスコミ・出版" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 従業員数 in [ "100名以上" "10名以上" "10名未満" ] と 居住区分 in [ "その他" "家族持家" "本人持家" "社宅・寮" ] と 転職有無 = 無 と 職種 in [ "事務職" "技術職" "欠損" ] と 勤続年数区分 in [ "10年以上" "1年" "2年以上" "30年以上" "5年以上" ] と 業種 in [ "その他サービス" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 資本金 in [ "1億以上" "5千万以上" "欠損" ] と 既婚独身区分 = 既婚 と 年齢 in [ "20-29歳" "30-39歳" "40-49歳" "60-65歳" ] と 業種 = 製造・建築 と 従業員数 in [ "100名以上" "10名以上" ] then 代弁者 ルール 13: 代弁者 (51, 0.118) if 業種 in [ "その他サービス" "マスコミ・出版" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 従業員数 in [ "100名以上" "10名以上" "10名未満" ] と 居住区分 in [ "その他" "家族持家" "本人持家" "社宅・寮" ] と 転職有無 = 無 と 職種 in [ "事務職" "技術職" "欠損" ] と 勤続年数区分 in [ "10年以上" "1年" "2年以上" "30年以上" "5年以上" ] と 業種 in [ "その他サービス" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 資本金 in [ "1千万以上" "1千万未満" ] と 従業員数 in [ "100名以上" "10名以上" ] と 同居別居区分 = 別居 then 代弁者 ルール 14: 代弁者 (130, 0.085) if 業種 in [ "その他サービス" "マスコミ・出版" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 従業員数 in [ "100名以上" "10名以上" "10名未満" ] と 居住区分 in [ "その他" "家族持家" "本人持家" "社宅・寮" ] と 転職有無 = 無 と 職種 in [ "事務職" "技術職" "欠損" ] と 勤続年数区分 in [ "10年以上" "1年" "2年以上" "30年以上" "5年以上" ] と 業種 in [ "その他サービス" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 資本金 in [ "1千万以上" "1千万未満" ] と 従業員数 in [ "100名以上" "10名以上" ] と 同居別居区分 = 同居 と 資本金 = 1千万以上 と 業種 in [ "その他サービス" "不動産業" "旅館" "欠損" ] と 居住区分 in [ "家族持家" "本人持家" "社宅・寮" ] then 代弁者 ルール 15: 代弁者 (83, 0.06) if 業種 in [ "その他サービス" "マスコミ・出版" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 従業員数 in [ "100名以上" "10名以上" "10名未満" ] と 居住区分 in [ "その他" "家族持家" "本人持家" "社宅・寮" ] と 転職有無 = 無 と 職種 in [ "事務職" "技術職" "欠損" ] と 勤続年数区分 in [ "10年以上" "1年" "2年以上" "30年以上" "5年以上" ] と 業種 in [ "その他サービス" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 資本金 in [ "1千万以上" "1千万未満" ] と 従業員数 in [ "100名以上" "10名以上" ] と 同居別居区分 = 同居 と 資本金 = 1千万以上 と 業種 in [ "小売" "製造・建築" ] と 居住区分 = 家族持家 then 代弁者 ルール 16: 代弁者 (1, 1.0) if 業種 in [ "その他サービス" "マスコミ・出版" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 従業員数 in [ "100名以上" "10名以上" "10名未満" ] と 居住区分 in [ "その他" "家族持家" "本人持家" "社宅・寮" ] と 転職有無 = 無 と 職種 in [ "事務職" "技術職" "欠損" ] と 勤続年数区分 in [ "10年以上" "1年" "2年以上" "30年以上" "5年以上" ] と 業種 in [ "その他サービス" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 資本金 in [ "1千万以上" "1千万未満" ] と 従業員数 in [ "100名以上" "10名以上" ] と 同居別居区分 = 同居 と 資本金 = 1千万以上 と 業種 = 農林水産 then 代弁者 ルール 17: 代弁者 (188, 0.138) if 業種 in [ "その他サービス" "マスコミ・出版" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 従業員数 in [ "100名以上" "10名以上" "10名未満" ] と 居住区分 in [ "その他" "家族持家" "本人持家" "社宅・寮" ] と 転職有無 = 無 と 職種 in [ "事務職" "技術職" "欠損" ] と 勤続年数区分 in [ "10年以上" "1年" "2年以上" "30年以上" "5年以上" ] と 業種 in [ "その他サービス" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 資本金 in [ "1千万以上" "1千万未満" ] と 従業員数 = 10名未満 と 性別 = 男性 と 年収 in [ "0万≦" "200万≦" "400万≦" "500万≦" "700万≦" ] then 代弁者 ルール 18: 代弁者 (127, 0.079) if 業種 in [ "その他サービス" "マスコミ・出版" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 従業員数 in [ "100名以上" "10名以上" "10名未満" ] と 居住区分 in [ "その他" "家族持家" "本人持家" "社宅・寮" ] と 転職有無 = 無 と 職種 in [ "事務職" "技術職" "欠損" ] と 勤続年数区分 in [ "10年以上" "1年" "2年以上" "30年以上" "5年以上" ] と 業種 in [ "その他サービス" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 資本金 in [ "1千万以上" "1千万未満" ] と 従業員数 = 10名未満 と 性別 = 女性 と 勤続年数区分 in [ "10年以上" "2年以上" "30年以上" "5年以上" ] then 代弁者 ルール 19: 代弁者 (32, 0.219) if 業種 in [ "その他サービス" "マスコミ・出版" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 従業員数 in [ "100名以上" "10名以上" "10名未満" ] と 居住区分 in [ "その他" "家族持家" "本人持家" "社宅・寮" ] と 転職有無 = 無 と 職種 in [ "事務職" "技術職" "欠損" ] と 勤続年数区分 in [ "10年以上" "1年" "2年以上" "30年以上" "5年以上" ] と 業種 = マスコミ・出版 then 代弁者 ルール 20: 代弁者 (40, 0.1) if 業種 in [ "その他サービス" "マスコミ・出版" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 従業員数 in [ "100名以上" "10名以上" "10名未満" ] と 居住区分 in [ "その他" "家族持家" "本人持家" "社宅・寮" ] と 転職有無 = 無 と 職種 in [ "労務" "営業" "接客" ] と 勤続年数区分 in [ "0年" "1年" "30年以上" ] と 業種 = 製造・建築 then 代弁者 ルール 21: 代弁者 (44, 0.182) if 業種 in [ "その他サービス" "マスコミ・出版" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 従業員数 in [ "100名以上" "10名以上" "10名未満" ] と 居住区分 in [ "その他" "家族持家" "本人持家" "社宅・寮" ] と 転職有無 = 無 と 職種 in [ "労務" "営業" "接客" ] と 勤続年数区分 in [ "10年以上" "20年以上" "2年以上" "5年以上" ] と 同居別居区分 in [ "別居" "欠損" ] then 代弁者 ルール 22: 代弁者 (191, 0.105) if 業種 in [ "その他サービス" "マスコミ・出版" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 従業員数 in [ "100名以上" "10名以上" "10名未満" ] と 居住区分 in [ "その他" "家族持家" "本人持家" "社宅・寮" ] と 転職有無 = 無 と 職種 in [ "労務" "営業" "接客" ] と 勤続年数区分 in [ "10年以上" "20年以上" "2年以上" "5年以上" ] と 同居別居区分 = 同居 と 従業員数 in [ "100名以上" "10名以上" ] と 資本金 in [ "1億以上" "1千万未満" "5千万以上" ] と 既婚独身区分 in [ "既婚" "欠損" "独身" ] then 代弁者 ルール 23: 代弁者 (113, 0.044) if 業種 in [ "その他サービス" "マスコミ・出版" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 従業員数 in [ "100名以上" "10名以上" "10名未満" ] と 居住区分 in [ "その他" "家族持家" "本人持家" "社宅・寮" ] と 転職有無 = 無 と 職種 in [ "労務" "営業" "接客" ] と 勤続年数区分 in [ "10年以上" "20年以上" "2年以上" "5年以上" ] と 同居別居区分 = 同居 と 従業員数 in [ "100名以上" "10名以上" ] と 資本金 = 1千万以上 then 代弁者 ルール 24: 代弁者 (223, 0.13) if 業種 in [ "その他サービス" "マスコミ・出版" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 従業員数 in [ "100名以上" "10名以上" "10名未満" ] と 居住区分 in [ "その他" "家族持家" "本人持家" "社宅・寮" ] と 転職有無 = 無 と 職種 in [ "労務" "営業" "接客" ] と 勤続年数区分 in [ "10年以上" "20年以上" "2年以上" "5年以上" ] と 同居別居区分 = 同居 と 従業員数 = 10名未満 then 代弁者 ルール 25: 代弁者 (79, 0.165) if 業種 in [ "その他サービス" "マスコミ・出版" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 従業員数 in [ "100名以上" "10名以上" "10名未満" ] と 居住区分 in [ "その他" "家族持家" "本人持家" "社宅・寮" ] と 転職有無 = 有 then 代弁者 ルール 26: 代弁者 (210, 0.086) if 業種 in [ "その他サービス" "マスコミ・出版" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 従業員数 in [ "100名以上" "10名以上" "10名未満" ] と 居住区分 = 借家・アパート と 業種 in [ "その他サービス" "小売" "旅館" "欠損" "製造・建築" ] と 勤続年数区分 in [ "0年" "1年" "2年以上" "30年以上" "5年以上" ] と 年齢 in [ "20-29歳" "30-39歳" ] と 資本金 in [ "1億以上" "1千万以上" "欠損" ] と 勤続年数区分 in [ "0年" "2年以上" "5年以上" ] と 職種 in [ "営業" "技術職" "接客" ] と 従業員数 in [ "100名以上" "10名以上" "10名未満" ] then 代弁者 ルール 27: 代弁者 (73, 0.151) if 業種 in [ "その他サービス" "マスコミ・出版" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 従業員数 in [ "100名以上" "10名以上" "10名未満" ] と 居住区分 = 借家・アパート と 業種 in [ "その他サービス" "小売" "旅館" "欠損" "製造・建築" ] と 勤続年数区分 in [ "0年" "1年" "2年以上" "30年以上" "5年以上" ] と 年齢 in [ "20-29歳" "30-39歳" ] と 資本金 in [ "1億以上" "1千万以上" "欠損" ] と 勤続年数区分 in [ "1年" "30年以上" ] then 代弁者 ルール 28: 代弁者 (322, 0.134) if 業種 in [ "その他サービス" "マスコミ・出版" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 従業員数 in [ "100名以上" "10名以上" "10名未満" ] と 居住区分 = 借家・アパート と 業種 in [ "その他サービス" "小売" "旅館" "欠損" "製造・建築" ] と 勤続年数区分 in [ "0年" "1年" "2年以上" "30年以上" "5年以上" ] と 年齢 in [ "20-29歳" "30-39歳" ] と 資本金 in [ "1千万未満" "5千万以上" ] then 代弁者 ルール 29: 代弁者 (133, 0.158) if 業種 in [ "その他サービス" "マスコミ・出版" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 従業員数 in [ "100名以上" "10名以上" "10名未満" ] と 居住区分 = 借家・アパート と 業種 in [ "その他サービス" "小売" "旅館" "欠損" "製造・建築" ] と 勤続年数区分 in [ "0年" "1年" "2年以上" "30年以上" "5年以上" ] と 年齢 in [ "40-49歳" "50-59歳" ] then 代弁者 ルール 30: 代弁者 (102, 0.118) if 業種 in [ "その他サービス" "マスコミ・出版" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 従業員数 in [ "100名以上" "10名以上" "10名未満" ] と 居住区分 = 借家・アパート と 業種 in [ "その他サービス" "小売" "旅館" "欠損" "製造・建築" ] と 勤続年数区分 in [ "10年以上" "20年以上" ] と 職種 in [ "技術職" "接客" ] と 年齢 in [ "30-39歳" "40-49歳" "50-59歳" "60-65歳" ] then 代弁者 ルール 31: 代弁者 (92, 0.217) if 業種 in [ "その他サービス" "マスコミ・出版" "不動産業" "小売" "旅館" "欠損" "製造・建築" "農林水産" "運輸" ] と 従業員数 in [ "100名以上" "10名以上" "10名未満" ] と 居住区分 = 借家・アパート と 業種 in [ "不動産業" "運輸" ] と 年収 in [ "200万≦" "300万≦" "400万≦" "500万≦" ] then 代弁者 ルール 32: 代弁者 (28, 0.143) if 業種 in [ "公的機関" "医療機関" "金融機関" ] と 職種 in [ "労務" "営業" "技術職" "欠損" ] と 年収 in [ "0万≦" "200万≦" "300万≦" "400万≦" "500万≦" "700万≦" ] と 勤続年数区分 in [ "10年以上" "1年" "20年以上" "2年以上" "5年以上" ] と 居住区分 = その他 then 代弁者 ルール 33: 代弁者 (61, 0.098) if 業種 in [ "公的機関" "医療機関" "金融機関" ] と 職種 in [ "労務" "営業" "技術職" "欠損" ] と 年収 in [ "0万≦" "200万≦" "300万≦" "400万≦" "500万≦" "700万≦" ] と 勤続年数区分 in [ "10年以上" "1年" "20年以上" "2年以上" "5年以上" ] と 居住区分 in [ "借家・アパート" "家族持家" "社宅・寮" ] と 年収 in [ "0万≦" "200万≦" "300万≦" "500万≦" "700万≦" ] と 従業員数 in [ "1000名以上" "100名以上" "10名以上" "300名以上" "欠損" ] と 年収 in [ "200万≦" "300万≦" "500万≦" ] と 職種 in [ "労務" "営業" "技術職" ] と 勤続年数区分 = 5年以上 then 代弁者 ルール 34: 代弁者 (93, 0.075) if 業種 in [ "公的機関" "医療機関" "金融機関" ] と 職種 in [ "労務" "営業" "技術職" "欠損" ] と 年収 in [ "0万≦" "200万≦" "300万≦" "400万≦" "500万≦" "700万≦" ] と 勤続年数区分 in [ "10年以上" "1年" "20年以上" "2年以上" "5年以上" ] と 居住区分 in [ "借家・アパート" "家族持家" "社宅・寮" ] と 年収 in [ "0万≦" "200万≦" "300万≦" "500万≦" "700万≦" ] と 従業員数 in [ "1000名以上" "100名以上" "10名以上" "300名以上" "欠損" ] と 年収 in [ "200万≦" "300万≦" "500万≦" ] と 職種 = 欠損 then 代弁者 ルール 35: 代弁者 (108, 0.111) if 業種 in [ "公的機関" "医療機関" "金融機関" ] と 職種 in [ "労務" "営業" "技術職" "欠損" ] と 年収 in [ "0万≦" "200万≦" "300万≦" "400万≦" "500万≦" "700万≦" ] と 勤続年数区分 in [ "10年以上" "1年" "20年以上" "2年以上" "5年以上" ] と 居住区分 in [ "借家・アパート" "家族持家" "社宅・寮" ] と 年収 in [ "0万≦" "200万≦" "300万≦" "500万≦" "700万≦" ] と 従業員数 = 10名未満 と 居住区分 in [ "借家・アパート" "家族持家" ] then 代弁者 ルール 36: 代弁者 (9, 0.222) if 業種 in [ "公的機関" "医療機関" "金融機関" ] と 職種 = 接客 then 代弁者 ----------------------------------------------------------------------------------------------------------------  これでリスクの高いグループの属性がC5.0によって予測されたわけですが、審 査モデルの構築はこれで終わりではありません。なぜなら、リスクの高いグルー プの中でも属性によってそのリスクの大小には格差がありますし、審査を行う趣 旨として「承認・拝辞」の前提条件は「リスクが高いか低いか」だけではなく「 収益が上げられるか」だからです。つまり、リスクの高いグループでもそれはあ くまでも「過去の同様の属性から予測したところその可能性が高い」というだけ であり、実際の収益性を見てみないとすべて拝辞とすることはできないのです。  そこで、ここで求められたルールを元のデータに追加します(表の最終列参照)。 ===== ID 正常代弁区分 年齢 性別 既婚独身区分 居住区分 同居別居区分 勤続年数区分 職種 業種 転職有無 資本金 従業員数 年収 年間収益額 代弁金額 rule 6208 正常者 40-49歳 男性 独身 本人持家 同居 20年以上 技術職 欠損 無 5千万以上 10名未満 500万≦ 64533 0 正常者_17 4416 正常者 50-59歳 男性 既婚 本人持家 同居 30年以上 営業 製造・建築 無 1千万以上 10名以上 1000万≦ 64284 0 代弁者_20 8421 正常者 40-49歳 男性 既婚 本人持家 同居 1年 事務職 公的機関 無 1千万未満 10名未満 700万≦ 63470 0 正常者_37 1574 正常者 60-65歳 女性 既婚 本人持家 同居 0年 欠損 欠損 無 5千万以上 10名未満 200万≦ 63142 0 正常者_17 571 正常者 30-39歳 男性 既婚 借家・アパート 同居 2年以上 技術職 製造・建築 無 5千万以上 10名以上 400万≦ 60492 0 代弁者_28 4703 正常者 40-49歳 男性 独身 家族持家 同居 10年以上 技術職 欠損 無 欠損 欠損 1000万≦ 60151 0 正常者_15 2225 正常者 50-59歳 男性 既婚 本人持家 同居 20年以上 欠損 小売 無 1千万未満 10名以上 1000万≦ 59840 0 正常者_17 5376 正常者 50-59歳 男性 既婚 本人持家 同居 30年以上 技術職 製造・建築 無 欠損 10名未満 500万≦ 59815 0 正常者_20 9809 正常者 30-39歳 女性 既婚 家族持家 同居 5年以上 事務職 不動産業 無 1千万未満 10名未満 300万≦ 59101 0 代弁者_18 7210 正常者 50-59歳 男性 独身 本人持家 同居 10年以上 技術職 製造・建築 無 1千万未満 10名以上 500万≦ 57592 0 正常者_25 5114 正常者 30-39歳 男性 既婚 家族持家 同居 5年以上 接客 小売 無 1千万未満 10名以上 400万≦ 57217 0 代弁者_22 3984 正常者 20-29歳 女性 既婚 借家・アパート 同居 5年以上 技術職 製造・建築 無 1千万未満 10名未満 400万≦ 56769 0 代弁者_28 8756 正常者 40-49歳 男性 既婚 本人持家 同居 20年以上 事務職 小売 無 1千万未満 10名以上 1000万≦ 56535 0 正常者_17 4341 正常者 20-29歳 男性 独身 借家・アパート 別居 10年以上 技術職 運輸 無 1億以上 300名以上 400万≦ 56425 0 正常者_4 -------------------------------------------------------------------------------------------------------------------  このデータを元に、正常者と代弁者を分けて集計し、再度データを結合します。 =================================================================================================================== rule 人数 tmp年間収益額合計 tmp正常者人数 tmpデフォルト金額合計 tmpデフォルト人数 正常者_7 231 770563 227 1200000 4 正常者_8 175 793549 170 700000 5 正常者_9 6 3634 6 代弁者_1 53 211940 50 1100000 3 代弁者_10 63 148911 55 2400000 8 代弁者_11 125 422787 116 2500000 9 -------------------------------------------------------------------------------------------------------------------  一番上の行、正常者_7を例としてデータの意味を解説します。 ・rule  先ほどのモデリングで抽出されたC5.0のルールセットです。 ・人数  全体のうち、ルールセットに適合した人数です。 ・tmp年間収益額合計  正常者の年間収益額です。 ・tmp正常者人数  ルールセットに適合した人のうちの正常者数です。 ・tmpデフォルト金額合計  代弁金額の集計です。 ・tmpデフォルト人数  代弁者に人数です。  よって、上の表の 正常者_7 のルールセットに適合した人数は231人であり、 そのうち227人が正常者で年間770,563円の収益を上げています。また231人のうち 4人は代弁者が含まれており、1,200,000円の代弁が発生したことになります。  ちなみに、空白の部分はnull値です。  上記の結果をさらに加工します。ルールごとの人数やデフォルト率、収益額、 損失額(デフォルト金額)、リスク調整後収益額(収益額−損失額)を計算しフ ィールドを追加していきます。 ============================================================================================================================================================================================================================================================================================ rule 年間収益額合計 正常者人数 デフォルト金額合計 デフォルト人数 合計人数 デフォルト率 リスク調整後収益額 リスク調整後収益額/人 合計人数累積構成比 人数構成比 累積デフォルト率 累積リスク調整後収益額 Node_ID(収益順) 正常者_22 1562200 110 0 0 110 0.0 1562200 14201.818 0.11 0.11 0.0 1562200 1 正常者_26 383840 30 0 0 30 0.0 383840 12794.66 0.14 0.03 0.0 1946040 2 正常者_36 1324970 170 0 0 170 0.0 1324970 7793.94 0.32 0.17 0.0 3271010 3 正常者_24 1398520 200 0 0 200 0.0 1398520 6992.6 0.53 0.20 0.0 4669530 4 正常者_34 1044060 170 0 0 170 0.0 1044060 6141.52 0.71 0.17 0.0 5713590 5 正常者_30 1728160 290 0 0 290 0.0 1728160 5959.17 1.01 0.30 0.0 7441750 6 ============================= 中 略 ============================== 正常者_9 36340 60 0 0 60 0.0 36340 605.66 87.66 0.06 0.38 221961130 63 代弁者_30 4145730 900 3600000 12 912 1.31 545730 598.38 88.62 0.95 0.39 222506860 64 代弁者_12 2948070 760 2500000 9 769 1.17 448070 582.66 89.42 0.80 0.40 222954930 65 代弁者_17 8480470 1620 7600000 26 1646 1.57 880470 534.91 91.14 1.72 0.42 223835400 66 代弁者_34 2348970 860 1900000 7 867 0.80 448970 517.84 92.05 0.90 0.42 224284370 67 代弁者_18 3887190 1170 3400000 10 1180 0.84 487190 412.87 93.29 1.23 0.43 224771560 68 代弁者_4 905740 290 800000 4 294 1.36 105740 359.65 93.60 0.30 0.43 224877300 69 代弁者_35 3558100 960 3400000 12 972 1.23 158100 162.65 94.61 1.01 0.44 225035400 70 代弁者_25 3351620 660 3700000 13 673 1.93 -348380 -517.65 95.32 0.70 0.45 224687020 71 代弁者_8 1521340 520 2200000 6 526 1.14 -678660 -1290.22 95.87 0.55 0.45 224008360 72 代弁者_27 2549550 620 3500000 11 631 1.74 -950450 -1506.25 96.53 0.66 0.46 223057910 73 代弁者_10 1489110 550 2400000 8 558 1.43 -910890 -1632.41 97.11 0.58 0.47 222147020 74 代弁者_29 5325350 1120 7300000 21 1141 1.84 -1974650 -1730.63 98.31 1.19 0.48 220172370 75 代弁者_32 687580 240 1400000 4 244 1.63 -712420 -2919.75 98.56 0.25 0.49 219459950 76 代弁者_19 952700 250 2300000 7 257 2.72 -1347300 -5242.41 98.83 0.26 0.49 218112650 77 代弁者_31 3326550 720 8000000 20 740 2.70 -4673450 -6315.47 99.61 0.77 0.51 213439200 78 代弁者_21 1001500 360 3600000 8 368 2.17 -2598500 -7061.14 99.99 0.38 0.52 210840700 79 代弁者_16 0 0 300000 1 1 100.0 -300000 -300000.0 100.0 0.001 0.52 210540700 80 ============================================================================================================================================================================================================================================================================================  加工された上のデータを参照してみると、Node_IDが70のところで累積リスク調 整後収益額が極大点となっていることがわかります。ここを審査基準とした場合、 全体を承認したときと比べると収益額が6.9%増加することがわかりました。 全体を承認したときの収益額:210540700 収益額の極大点で承認した場合の収益額:225035400  このときの合計人数累積構成比は94.61%となりますので、承認率を94.61%で設 定します。つまり5.4%の申込者にご遠慮いただくことになりました。この5.4%の リスクグループは以下のルールセットとなります。 代弁者_25 代弁者_8 代弁者_27 代弁者_10 代弁者_29 代弁者_32 代弁者_19 代弁者_31 代弁者_21 代弁者_16  以上で審査モデルの構築が終了しました。  今回抽出されたルールセットを用いて実際の申し込み情報を照会しデータを流 して初期審査のジャッジメントを行います。この作業は通常全自動で行われます ので審査担当者の思惑が入り込む余地はありません。  従って、誰が審査をしても(極端な話し今日入社したアルバイトでも)アプリ ケーションの操作だけ覚えれば審査が行えると言うことになります。 ■0x07.) 途上与信  さて、初期審査モデルが構築し、仮承認を得た申込者は本審査へと進みます。  本審査については個人信用情報などを属性に加えるだけで通常初期審査と流れ は同じだと思われます。本審査を通過し、申し込み者の入会意思を確認できれば 晴れてカードが発行されます。しかし、ここで承認・発行となっても、予測され た収益と言うのはあくまで期待値であり、実際の収益、利用状況などは想定通り に行かないこともあります。従って、「途上与信」というものが行われます。  途上与信は、個人信用情報に加えて、実際の利用率や利用金額などを属性とし て加えたり、審査モデル作成時との比較や時系列比較、マクロ統計情報(人口統 計や破産情報)などを加味されて行われることが多く、より高精度な審査が可能 になります。従って、途上与信の段階で利用状況が芳しくなかったり、審査基準 を見直さないとならないほど社会情勢や会社の情勢が変動した場合は、途上与信 によって利用限度額を引き下げたり、場合によってはカード停止などの措置をと ることもありえます。「突然カードを止められた」と言う方がたまにいらっしゃ いますが、突然止まるなどということは絶対にありえません。必ず見に覚えがあ るはずです。所有カード枚数が増えた、他社で大きな借金(無担保)をした、延 滞を続けてしてしまったなどがそうです。  これらの項目は定期的に行われる途上与信用モデルの構築で、入会審査時より 高精度にルール算出された審査モデルによって、限度額引き下げやカード停止の 措置が発動されたと考えられます。また途上与信についてはこれらの負の側面で はなく、入会キャンペーンの為のマーケティング用や、よりゴールドカードなど のよりグレードの高いカードへの変更促進などでも活用されます。それだけでは ありません。過去3年間スーパーの食料品やちょっとした買い物など一回につき多 くても1万円程度しか買い物をしなかった顧客が突然大きな買い物、例えばパソコ ンやカメラや高級腕時計などを続けて行った場合、多くの場合レジで承認が下り ずに電話確認となる場合があります。これらの顧客の特異な行動は常にモニタリ ングされており、Kohonenなどのクラスター分析を行いデータをセグメント化して おくことでいつもと違う購買履歴は瞬時にアラートを出すことができます。これ は主にカード偽造などの不正の発見で行われる手法で、たまたま本当に新生活準 備などでカードを使う必要があっても偽造カードの利用状況とパターンが酷似し たり過去の利用状況と照らしてその顧客のパターンから大きくアウトした場合に 電話承認となるケースが発生します。正規の顧客にとっては面倒なことこの上な いわけですが、万が一カードが偽造された時の防衛策にもなりえますのでセキュ リティ強化の点から見ると多少の不便さは仕方がないかもしれません。最近、特 に厳しくなっている気がしますが…。もちろんこの基準もカード会社によってそ れぞれです。例えば筆者の場合、A社のカードはPowerMacG5の新規購入の直後に2 3インチシネマディスプレイの購入に使用しても何の問題も無く利用できましたが、 同じ程度の普段の利用履歴があるB社については某有名PC量販店で10万円程度の買 い物でさえ電話承認となりました。限度額は100万円以上空いているのにです。  いずれのモデルについても一度決めたら終りというわけではなく、日次の夜間 バッチ処理などで審査モデルを作るデータなどを更新し、常に最新のデータでモ デリングされることが多いと思われます。従って審査基準はモデリングをするた びに一定の範囲内で上下する可能性はあります。ただし、通常の承認率と大きく 乖離したモデルを使うと現場サイドで混乱する可能性がありますので、モデルの 見直しは基準値としてのある程度アバウトな承認率を考慮した上で決定されるこ とが多いと思います。  また、今回は割愛しますが、債権回収についても実は同様の手法で分析され、 前例から「取立てのしやすい属性の客(回収確率高い)」から優先的に回収して いることはあまり知られていない事実です。債権者はどのような債務であっても 同じように回収努力を行う事が求められますが、実際問題として見込みの少ない 顧客と延々と禅問答するより、回収可能性の高い顧客から優先的に処理したほう が効率がいいのも事実です。 ■0x08.) おまけ:実際の買い物時の話や承認システムなど。  余談になりますが、クレジットカードを店舗で使う場合、POSレジやレジの横に 設置された小型の端末(G-CATなど)にカードを通すところをよく見かけると思い ます。あれは伝票を発行する用途以外に、一定額以上の買い物をする場合にカー ド会社に対して承認(信用照会)を取ることが義務付けられているため、電話回 線を使って承認番号を要求するためのものです。この作業をオーソライゼーショ ンといい、略してオーソリと呼ばれます。  また、承認先のカード会社の事をオーソリセンター、オーソリ端末などと呼ぶ こともあります。オーソリセンターにはカードの利用可能限度額、一回限度額、 月額限度額また、不正使用カード、偽造カードなどのデータが登録されています。 これらの与信情報(特に限度額に関すること)はフロアミットと呼ばれ、フロア ミットオーバーだと承認が出ずにその買い物ができません。  一定額以上と書きましたが、これは信用照会の端末が店舗にない場合(手書き のカード明細を切るお店)には金額3万円以上で照会するように定められているだ けで、通常ほとんどの店舗には電話回線で繋がった端末がありますのでその場合 は全件照会されます。  店舗からCAT端末を通して電文で送られたカード顧客情報は、電話回線を通じて オーソリセンターで照会され、商品の金額が利用限度内であれば承認番号が電文 で送達されます。偽造カード等の照会も同時になされる為、最近では偽造カード で信用照会を行うとオーソリセンターから即時に電話がかかってきます。内容は おおむね以下の通りです。 「今〜(レジ番号などの場所)で使ったカードは偽造です。車両ナンバーや人相 を記憶してください。監視カメラがある場合は記録データの保管をお願いします」  偽造団の方は、最近カード会社の手配が早いのでさぞ困っていることでしょう。  これらのカード信用照会システムをCAFIS(Credit And Finance Information Switching System)と呼び、承認に使用する端末で代表的なものはCAT(Credit Authorization Terminal)などがあります。最近の店舗ではG-CATが良く使われて います。POSレジ内蔵型ではなくレジ横に設置するスタンドアロンタイプの端末は カードの明細には端末名(システム名)が大体表示されていることが多いので次 回使用する際はチェックしてみてください。  また、不正使用の可能性により電話承認となることがあると先ほどの項で書き ましたが、この場合端末の使用によって大きく違いますが、多くは「保留」と表 示されます。レジ担当者のマニュアルでは保留が出た場合はカード会社のオーソ リセンターへ電話することになっています。この場合何も問題なければ無事承認 が下りますので、時間がかかるだけで特に不利益は無いのですが、レジの種類に よっては一律で「このカードは使用できません」と表示するタイプがあり、アン ちゃんのアルバイト店員などが不用意に「限度額超えてませんか?」などと顧客 にいってしまい(実際には保留や通信トラブルだったりすることも多い)激怒し た顧客が「恥をかかされた!」などと店長に土下座を要求するなんて事態に発展 することもあります。  カードが使えない理由は本来カード会社しかわからないわけで、某C社製のよう にご丁寧にレジに「限度額オーバー」を表示する機種があるためにカードの限度 額オーバー=個人信用情報 をアンちゃん店員に知られる羽目になる事もありま す。そのようなレジを使っている企業でも、例え限度額オーバーの表示がされた 場合でも「理由はわかりかねますがご使用できません。お客様自身でカード会社 にご確認ください」と受け応えするよう教育がされるはずですが、中には前述の ような対応をするアンちゃんもいるのです。万が一そのような場合はぜひ店舗管 理者に抗議してくださって結構かと思います。 ■0x09.) 注意して欲しいこと  今回は一例として代弁者の率(業界ではデフォルト率と言います)を基準とし てモデリングを行う例を簡単に示しましたが、何を基準として審査モデルを構築 するかは企業や発行カードの性格、収益性への考え方で大きく異なるでしょう。 また、途上与信についてもどの属性をモニタリングするかは同じような理由で様 々です。従って、今回の例はあくまでカード審査の流れを説明することに主眼を 置き、使用する属性の正確性については考慮していないことに注意してください。 ■0x0A.) まとめ  今回紹介したように、カード審査は極めて数理的な方法で標準化されたワーク フローの枠組みとして行われていることがご理解いただけたかと思います。  また、その基準は「こいつは危ないかどうか?」と言うよりも「こいつはいく ら稼ぐか、飛んだときの被害はどれくらい?」という観点であくまでリスクコン トロールの一環として審査を行うと言うことです。カード会社は一定の保証料を 払って保証会社の、いわゆる保険のようなものに加入しているため、会員が支払 い延滞をしたり、破産したりしても実はあまり痛くありません。しかし、承認を 乱発し、焦げ付きが多ければ当然保証料の引き上げなどカード会社の信用にも関 わります。従って、保証会社へ債権を委託するのは最後の手段と言うことになり、 それまでは一生懸命督促を行って、債務の回収を計ります。債権回収には非常な コストがかかり、企業の収益に影響してきますので、直接的には痛くないとはい え、やはり承認は慎重に行う必要があるのです。  ゆえに、じめに書きました通り、A社は承認だったのにB社はダメだったという ことは当然起こりうるべきことです。特異な例では3年前に破産したのに新規カー ドを作れてしまったということも現実に起こりうるということです。なお、通常 7年は作れないとされています。  このようにカードの審査というのは最新のデータマイニング技術用いて非常に 統計学的・数理的に算出されています。今回は本筋を見誤らないために注意して 執筆しましたので、ディシジョンツリーによるルール算出などは多くの技術的部 分を割愛しました。ルール算出やニューラルネット、アソシエーションルールや クラスター化などのデータマイニング理論は企業レベルの裏方ではよく使われる ようになってきたとはいえ、現在ではまだあまり一般化されていません。  しかし、無限の可能性を秘めた技術として今後あらゆる分野で活躍の場を広め そうな分野であることは間違いありません。  次回、また機会があればさらに深く紹介したいと思います。稚拙な文章を最後 まで読んでいただきありがとうございました。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第16章: ソーシャルネットワーキングサイトmixiをハクる --- 著者:Zer0real x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) ハクる前に  ミクシィはここのところ、はまちたんのおかげでかなりセキュリティが甘いこ とで有名になってしまったので、俺もついでにミクシィをハクってみた。今回は その経緯を書くことにする。  ミクシィ管理局に直接いってもいいが、まーどうせアカ剥奪されるのがオチだ ろうからこっちに書くことにする。  さてと、で、さっそくだがミクシィアカウント持ってないやつはこれ読んでも わからないだろうからここでお別れだ。力になってあげられなくて残念だ。あと 最低でもHTMLくらいはちゃんとわかるやつが読んでくれないとこっちも困るので その辺はよろしく。 ■0x02.) はまちたんのハック http://simon.tmn.net/wiki/index.php?mixi%2F%A4%DC%A4%AF%A4%CF%A4%DE%A4%C1%A4%C1%A4%E3%A4%F3%A1%AA  一躍有名人になったはまちたんのハックは上のURLを見てくれ。かなり詳しく書 いてあるからこっちで俺が説明するまでもないだろう。  はまちたんのハックを簡単にいうならば、ミクシィ以外のサーバーに投稿フォー ムを置いておき、そのページを読み込んだら強制的にミクシィ投稿するようにし ていたわけだ。そのリンクをミクシィ内に書いておいたらブラウザはミクシィに ログインしている状態でリンクを踏むことになり投稿が完了するということ。  これを防ぐにはサーバーサイドプログラミングでいろいろとややこしいことをし なければならない。リファラがなんたらPOSTやGETがどうこうという話をどこかで 見たが、そんなのは結局ほとんど役に立たないのが現状だろう。まーしないに越 したことはないがね。 ■0x03.) ヤフーも取り上げたはまちたん http://headlines.yahoo.co.jp/hl?a=20050423-00000012-zdn_ep-sci  あのはまちたんはヤフーでも取り上げられるほど有名になった。が、ちょっと 上の記事を読んでみてくれ。もしかしたらリンク切れになってるかもしれないが、 そのときはネタ元にいけばよい。 ネタ元 http://www.itmedia.co.jp/enterprise/articles/0504/23/news005.html ----- サービスを提供しているイー・マーキュリーでは、この現象について一応の対処 は取った模様だ。ただ、技術的な詳細については「ハッキングでもなく、サーバー 攻撃やウイルスでもない。ID盗難などの被害は発生していない」という回答のみ で、「それ以上はコメントできない」と述べるにとどまっている。 -----  あれだけ大騒がせしたあのはまちたんのハックをイー・マーキュリーは「ハッ キングでもなく、サーバー攻撃やウイルスでもない。ID盗難などの被害は発生して いない」という一言でまとめている。  あれだけやられておいてその言い草はどうかと思うが、まー否定はしない。確 かにハッキングでもなければ、サーバー攻撃でもなく、ウイルスでもない。ID盗難 の意味が分からないが、IDをセッションIDと考えればそうだしね。  要するにお前のやったことは大したことないと言っているわけだ。あれだけや られておいて何をいってんだとも思うが、気持ちはわからんでもない。 ■0x04.) はまちたんができたこと  じゃあ、はまちたんはいったい何ができたのか、それを考えてみる。  はまちたんは他人にリンクをクリックさせることによって、クリックした人物 の日記を更新させたわけだが、他にどんなことができたのか。このことについて はまちたんはこういっている。 ----- 踏んだ人がmixi内でできる「すべてのこと」をやらせられる。 たとえば 踏んだ人に、無限に日記やコメントを書かせたり 踏んだ人のメッセージ送受信箱の中身をゲットしたり さらにそれをどこぞの掲示板に(その人自らが)晒したり とか、込み入ったこともできるとかなんとか。物騒だね。 -----  とりあえずこの言葉には間違いがひとつある。それは、踏んだ人がmixi内でで きる「すべてのこと」をやらせられるという一文。確かにほぼすべてのことがで きるが、残念ながら強制的に退会させることはできない。退会時にはパスワード が必要だからだ。  そのことについては、あとになってはまちたん自身も述べている。まーだとし ても危険なことができることに変わりはないがね。 ■0x05.) はまちたんができなかったこと  俺のミクシィハックの経緯を書くとか言っておきながら、始まってすぐからは まちたんのことばかりだが、もう少し読み進めて欲しい。  じゃあ、はまちたんができなかったことは何か。それはイー・マーキュリーの 解答から読み取れる。 「ID盗難などの被害は発生していない」  まさにこれだ。仮にサーバー攻撃やウイルスだったらその攻撃者あるいは作成者 の目的はひとつだ。セッションIDやパスワードを盗むこと。しかし、はまちたん はその運営側がもっとも嫌がることをやっていない。なぜか。それはできなかっ たからだ。  踏んだ人がmixi内でできる「すべてのこと」をやらせられるが、セッションID やパスワードを盗むことはできなかったのである。  イー・マーキュリーからのコメントにある「ハッキングではない」の一言。一 理ある。はまちたんのやったことはハッキングよりもむしろ荒らし行為に近かっ た。そしてセキュリティホールが修正された現在はまちたんに残ったものはアカ 剥奪という現実だったわけだ。 ■0x06.) 本当のハック  運営側にバレないようにセッションIDやパスワードを盗むこと、これが本当の ハックってもんじゃないの?  つーわけで、ここからが俺のハック話だ。なるべくわかりやすく解説するつも りだが、技術的な観点よりもむしろセキュリティホールを探しあてるまでの過程 を楽しんでくれ。実際それが一番難しい作業だからな。  スキルもまー大事ではあるが、実戦では「勘」ってやつの方が重要だ。それを 身につけるためには努力よりも才能がものをいうが、実戦を積むことである程度 磨かれることは確かだぜ。じゃあスタートだ。  こういったCGIの穴を探す手っ取り早い方法はライティングを行うプログラムを 狙うことだ。ライティングってのは要するにサーバー側にあるファイルへ書き込む 処理を担当しているプログラムってこと。ミクシィ内で代表的なものは日記やメ ッセージだが、プロフィールやコミュニティなどいろいろあるだろう。  そして通常とは違う処理をしている部分を探すんだ。例えば、日記は2ch型のB BSと大して変わらない。よってここ(view_diary.pl)には穴がある確率は低いと いうことだ。すでに成熟した技術が使われていることは間違いないからな。  さらにいい忘れたが、ミクシィのプログラムはすべてPerl製だ。拡張子で一目 瞭然。だからPerlによくありそうな穴を探すんだ。  それで10分ほどミクシィ内を徘徊する。勘を頼りによく使われるCGIと違う処 理をしている部分を探すんだ。この辺は経験がものをいうからこれから数をこな していけばいいさ。とりあえず俺はもう見つけたぜ。普段よく使われるCGIとは 違う処理をしている部分だ。  俺が目をつけたのは確認画面だ。メッセージを送信するとき、日記を更新する とき、ミクシィは様々なところでその確認画面を表示する。これはすこしクドイ な。だが、少なくともこれはちょっと普段のBBSなどでは見ない光景だ。2chでさ え確認は最初の投稿だけで、その後クッキーをゲットしてしまえば確認画面はな い。  さて日記のレスを管理しているのはadd_comment.plのようだな。ご丁寧に「下 記のコメントを書き込みますか?」と確認してくれる。じゃあそこでHTMLをみて みようか。 -----
-----  inputタグのcomment_bodyに入力したデータが入っているのが分かる。ふーん、 ならそこにタグや「"」をいれられるのか試してみようぜ。 -----
-----  なるほどね。タグは入れられるけど「"」は「"」に変換されているな。こ れじゃ、この部分にHTMLコードを埋め込むのは難しそうだ。一応いろいろと試し てみたが「"」が使えないならどんなにコードを書いてもcomment_bodyのデータと しか見られない。そもそも"に変換しているということは、以前ここになん らかの穴があってそれに対応した感じだ。もう修正済みというわけか。ちっ。  だが、真のハッカーってのはここで勘ってやつを働かせるわけさ。プログラマ はcomment_bodyに対しては完全に対処している。なぜかって? ユーザーが入力 データを挿入できる部分がここしかないからさ。ここさえ抑えてれば問題ない。 プログラマはそう考えているわけだ。だったら裏をかいてこんなページを用意し てみようか。 -----
-----  よーくみてくれよ。特にformタグのaction属性をな。testが有効になる かどうかをみてみることにするぜ。 [[picture]] 動作確認画像 http://akademeia.info/wizardbible/17/image/m1.png  フン。testが有効になっちまったよ。つまりこれはどんなコードでも実 行してくれるってことだろ。だったら実行するコードはひとつだよ。そう、セッ ションIDを盗むってことだな。  つまりlocation.hrefとdocument.cookieを使って、適当なサーバーへ投げてやれ ばそれで盗聴完了ってわけだ。おいおい、ミクシィのプログラマは何やってんだ ろうねぇ。数分もしないうちにハクられるようなアプリよく作れるなぁ。ミクシ ィ管理者のスキルのほどが知れるってわけだ。  んじゃ最後に俺が作ったページを晒して終わりにするとしようか。 -----
-----  こんなところだ。確認にはセキュリティアカデメイアのENVチェッカーを利用さ せてもらった。注意するとこは「+」や「;」をURLエンコードしてやらないといけ ないってとこくらいか。つか読めば分かるな。あとサンプルページを次に示す。 ミクシィにログインした状態のブラウザで試してくれよ。 サンプルページ http://ruffnex.oc.to/exp4.html [[picture]] 動作確認画像 http://akademeia.info/wizardbible/17/image/m2.png ■0x07.) パスワードを盗む  ここまで読んだ賢明な読者なら、はまちたんなんてここで紹介した方法に比べ ればゴミみたいなもんだとわかるだろう。メッセージを送ったり、日記を勝手に 書いたり、そんなのはイタズラ好きの屑がやることだ。俺が紹介した方法は、セ ッションハイジャックだ。つまり、他人になりすますことができるんだな。これ がどんなことかわかるだろうか? 勝手にログインされていることにやられた側 はほとんど気が付かないわけだ。真のハッカーは、いや俺は職業クラッカーだけ ど(ワラ)、侵入したことを相手に悟られてはダメなんだ。悟られてしまったら、 何らかのセキュリティを施されたり、管理人に通報されて、おいしい情報を奪え ないからな。  何? なりすましができたとしても、パスワードはわからないではないかって ? それは早計だ。よく考えてほしい。プロフィールの変更画面があるだろ。他 人になりすまして、そのアカウントでプロフィールの変更画面にアクセスする。 そこにはパスワードを変更という入力フィールドがあるが、ここで変更してしま ってはならない。正規のユーザーがアクセスできなくなってしまい、不振がって しまう。それではどうするか。よくそのページを見て欲しい。メール変更のため のフィールドがあるだろ。そこを俺のメールアドレスに変更する。そして、ログ アウトして、パスワードを忘れたというリンクを押して、パスワードをメール送 信させてしまうのだ。そして、パスワードを入手して、ログインしたら、再びプ ロフィールの変更画面にアクセス。メールを最初のメールアドレス(正規のユー ザーのもの)に戻しておく。これで完璧である。  このセッションハイジャックから身を守るには、不用意にリンクをクリックし ないことだ。怪しいURLはもちろんだが、怪しい人物の発言のURLにも気をつけな ければならない。さらに、信頼しているマイミクシィの友人の発言のURLであって も、すぐにクリックするのは止めたほうがよい。なぜなら、その友人がすでにの っとられている可能性もあるからだ。つーか、誰も信用しちゃだめだってことだ な。ミクシィ崩壊も近いか?(編注) 【編注】残念ながら(?)、このセキュリティホールは28日の正午過ぎ辺りに閉 じられてしまったようです。リリースが間に合わなくて申し訳ありませんでした …。 ■0x08.) 感想  大したことはないだろうとは思ってたが、これほどまでとはちょっと予想外だ ったよ。つっても一応俺もコレで飯食ってる人間なんでミクシィみたいな脆弱な プログラムがたくさん出回ってくれた方が仕事もやりやすいわけだがな。  毎日、堅牢なサーバー相手にアタックしてる俺みたいなやつにとってはミクシ ィなんて格好の餌食なんだが、逆にこの程度じゃ依頼が来ないってのがこの業界 の実情だ。今回は、IPUSIRONにおもしろいネタ投稿してくれといわれたことから やったって感じだ。といいつつ、ミクシィ内のバグ関連のコミュの連中がむかつ いたというのが大きな動機だけどな(ワラ)。自称フルディスクロージャーとか、 自称ホワイトハットの連中はうんざりだ。本物のフルディスクロージャーとして の思考なら、何でもありだろ。本当のフルディスクロージャーの思想を否定する わけじゃない。そんな中、一応バグを一般公開する前に管理者に報告したほうが 好ましいというだけであって、義務じゃない。俺は報告したくないから、報告し ない。報告したい人は報告すればいいだけだ。まあ、一番むかつくのは、報告し たら報告したで逆切れする連中だな。あいつらファシストだろ(ワラ)。自分の 都合で思想の定義を勝手にゆがめてるだけ。まあ愚痴のこのぐらいにしておこう。  さてと、これで終わりだ。もう二度と会うこともないだろうけど、お互いハッ キングを楽しもうぜ。んじゃな。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第17章: 最近のアセンブリ言語本事情 --- 著者:eagle0wl x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) はじめに  アセンブリ言語・機械語解説本が人気のようで、最近のコンピュータ書籍界隈 ではアセンブリ言語・機械語・CPUの仕組みなどコンピュータの本質を解説した書 籍が数多く出ており、もはや一大ムーブメントといって良いほどの盛り上がりを 見せている模様。  しかし、なぜ今になってこのような書籍が増えているのでしょうか。昔は自分 でプログラムを作るものであったことに加え、CPUの性能が非常に低かったことか らその性能を100%引き出せるアセンブリ言語の知識は必要不可欠でした。そのた め当時は「コンピュータを使える」と自称するにはコンピュータの動作原理を熟 知する必要がありましたが、現在では既存のソフトウェアが使いこなせれば「コ ンピュータを使える」といった意味に成り下がっています。  この傾向をコピープロテクト破りに当てはめると、昔はとにかくプログラムを 逆アセンブルし、場合によってはコピーのためにデバイスドライバを自作すると いった「スキルの蓄積を必要とするテクニック」を駆使してプロテクトを破って いました。ところが今はというと「このドライブとこのライティングソフトを組 み合わせれば焼ける」といった方法が主流で、これにはスキルを一切必要としま せん。それを悪用厳禁とか言って煽っているアホな雑誌が巷に溢れているわけで すが。  これを受けて「今のユーザーは軟弱になった」と切り捨てるのはたやすいです が、OSなどが大規模複雑化したことで個人の理解を超えるものとなってしまった ことと、わざわざコンピュータの動作原理を学習しなくても使えるようになった ことも原因のひとつとして考えられます。高性能なパソコンが身近になったから といって、エンジニアのスキルもそれに合わせて上がらない(それどころか落ち ているという指摘もある)のが実情です。  こうした傾向から「なぜプログラムは動くのか」といった疑問に応える基礎技 術を見直そうという動きが起こるのは自然な流れであり、これが現在の出版ブー ムに繋がっているといえます。  筆者ならば、近年発売された書籍からは以下の3冊を推薦します(敬称略)。 ・『プログラムはなぜ動くのか』(矢沢久雄、日経BP) ・『はじめて読むPentium マシン語入門』(蒲地輝尚・水越康博、アスキー) ・『CPUの創りかた』(渡波郁、毎日コミュニケーションズ) ■0x02.) あの本の続編が性懲りもなく出た!  この類の本が売れるとわかると悪書も出回るのが世の常であります。今回ご紹 介するのは『いまどきのアセンブラの教科書』(毎日コミュニケーションズ)。 この本は『いまどきのアセンブラプログラミング』(毎日コミュニケーションズ) の続編にあたりますが、前作はタイトルに「プログラミング」の名を冠しておき ながら、その実体はゲーム改造の解説本というコンピュータ書籍における新たな スタイルを提案。Amazon.comのブックレビューでも「書くのに3日もかかってない と思われる内容」「開いた口が塞がらなくなる事請け合い」「こういう本が売り に出されること自体悲しい」「4半世紀の間買ったPCの本の中でここまでひどく はずしたのは初めて」「読むに値しません」「こんな詐欺まがいな商品は買う価 値もない」といった賞賛の声で溢れかえっています。これは筆者が属するソフト クラック界隈でも話題になり、この本をチェックした人の書き込みを見ると、こ こでも「作者はスタックの構造すら理解していない」「でじたるとらべしあのパ クリ」「パクリじゃない部分はデタラメ過ぎて読むに値しない」と大絶賛。 ○でじたるとらべしあ  ゲーム改造ツール「うさみみハリケーン」の作者であるうさぴょん氏のゲーム 改造情報サイト。 → http://gamereverserz.cjb.net/  そのような前作の期待を背負って『いまどきのアセンブラの教科書』が世に出 されたわけでありますが、前作の評判を聞いていた私はこの本を軽やかにスルー するつもりでした。しかし、筆者が運営するウェブサイト『どーもeagle0wlです (仮)』の掲示板に、私が作成したcrackme(ソフトクラック練習用プログラム) が無断掲載されている疑惑のタレコミが書き込まれ(これについては後述)、さ すがにこの目で確認するべく購入・読了。 ■0x03.) わからないのにパクるとこうなる  いやはや実に香ばしい。『いまどきのアセンブラの教科書』は、今まで読んだ 技術本の中でランクをつけるならばダントツのワースト。本書の元ネタと思われ るものは以下の通り。 ・『クラッカー・プログラム大全』(Kracker's & BEAMZ、データハウス) ・『解析魔法少女美咲ちゃん マジカル・オープン!』(やねう解析チーム、秀和 システム) ・「でじたるとらべしあ」(http://gamereverserz.cjb.net/)  ここで筆者の「パクり」に対する認識を表明しておくと、ソフトクラックに関 してはニッチな分野であり文献も少ないため若干のパクりは仕方ないものと考え ています。その元ネタをかみ砕いて自らの知識として取り込み、それに対し何ら かのアドバンテージを付加することができるかが重要であると考えています。  この視点に立って読み進めていくと、著者はアセンブリ言語・ソフトクラック の知識を全く持ち合わせていないのではないかと思いたくなるほどの支離滅裂っ ぷりが本書全体に広がっており、ひとつのワールドの形成を確認できます。まる で某ランナーで中途半端な知識を得た教えたがりが、無垢な初心者に穴だらけの 説教を垂れるような。  それでは本題に入りましょう。まずは本書の前書きに相当する「この本の使い 方」をチェック(初版第一刷を参考)。 ●[p3 この本の使い方] >この本を利用して、解析しているうちに、次第に言語は身につき、 >あなたはアセンブラを組めるようになっていると信じています。  アセンブラ、アセンブリ言語、アセンブル、以上3つの用語は区別して用いられ るべきです。アセンブリ言語の意味で「アセンブラ」と呼ぶこともありますが、 これは英単語としては間違いであり、通常は区別して用いられます。  ここでの引用では、「アセンブリ言語を用いてプログラムを組めるようになる」 のか、「ml.exe(MASMの場合)のようなものが組めるようになる」のかどちらなの かという点で誤解が生じています。これは別章でも散見され、OllyDbgを「アセン ブラデバッガー」と解説。それだけならまだしも…。 ●[p198 デバッグとはそもそも何なのか?] >アセンブラデバッガーとは文字通りアセンブラでデバッグを行うツール  の記述を見つけたときは脳みそトロトロになりました。この時点で本書の程度 が知れていますね。しばらく読み進めていると驚きの記述が。 ●[p26 低級言語と高級言語] > 低級言語と高級言語の違いは、「マルチスレッド」に対応している >言語かということ。マルチスレッドとは…(以下略)  これを見たとき私は目を疑った。しかも直後にマルチスレッドについて解説し ていたため、もしかしてそういう解釈をする場合もあるのでは…とパラレルワー ルドの存在を疑ってしまった。しかもその直後では、 ●[p26 低級言語と高級言語] >マルチスレッドに対応していない「Basic」やアセンブラなどは >低級言語に分類される。  Basicを低級言語に認定。これは本物だ。その舌の根の乾かない4ページ後には ●[p30 高級言語と比べてのアセンブラの欠点] > アセンブラの持つ欠点も「C/C++」や「Basic」などの高級言語の >持つ欠点も、どちらも一長一短な部分だ。  と、今度は高級言語に認定。一体どっちなのよ。  第三章では、プロセスメモリエディタTSearchを用いてメモリパッチの方法と、 メモリパッチャのプログラム作成の解説がある。が、ここでの使用言語はなぜか Visual Basic。「アセンブラの教科書」なんだからせめてC言語で書き直すぐら いのことはして欲しかったと思ったが、この時点で諦観に変わる。もうここから は面倒くさいのでどんどん羅列していきます。 ●[出版社からのコメント] >本書は「解析可」なGNUプログラムを例にアセンブラ、 >Windowsプログラミングを学び、  とあるが、「解析可」なGNUプログラムはどこにも見あたらない。第二章の「実 践!Resource Hackerで海外ツールを日本語化する」で日本語化対象として取り上 げている『Family KeyLogger』は、Symantecがスパイウェア認定しているソフト ウェアであるから恐れ入ります。 http://www.symantec.com/region/jp/avcenter/venc/data/spyware.familykeylog.html  初心者向けの「教科書」で用いられる題材とは思えないですね。しかも『Fami ly KeyLogger』はGNUプログラムでもオープンソースになっているわけでもなく、 フリーソフトウェアでもない。本書のキャプチャをよく見ると、メニューに「Re gistration」の文字列が…。そう、シェアウェアであります。  プログラム書き換えを伴う日本語化の例として用いられている「SuperScan 3. 0」(p69)もGNUライセンスでは配布されていません。 http://www.snapfiles.com/get/superscan.html  第五章「プログラム改造のためにデバッガーを活用する」では、OllyDbgの持つ 「各機能の使い方」の解説に終始しており、実際にソフトウェアを解析する例は ないというヘタレっぷり。もう完全にヤケクソですね。  第六章「解析に行き詰まった時のTips」では、2ページほどのTipsが30種挙げら れていますが、まさにパクリの見本市状態。前述した『クラッカー・プログラム 大全』『解析魔法少女美咲ちゃん』に依拠している箇所が多数見られました。読 み進めてみると、元ネタをまったく理解していないうえ具体的な操作方法がまっ たく示されておらず、まったくもって意味不明であり理解不能であり実践不能。  その最たる例をひとつ示します。p244の「No.02 解析したいソフトを作成した ソフトを探る」では『クラッカー・プログラム大全』を下敷きにしていると思わ れるいわゆる「VBセオリー」も紹介されています。しかし、 ●[p244 No.02 解析したいソフトを作成したソフトを探る] > 「VBセオリー」はVB4からVB6で活用されていて、各バージョン >のVBのDLLで用いられる文字列の比較命令を利用している。命令を >バイナリエディタで見ると、バージョンが同じなら常に同じ形をしている。 >バイナリエディタ上から検索を行って命令を行っている箇所を >見つけることができるため、解析の手間を大幅に省くことができる。 (中略) >文字列比較を行っている箇所を見つけ出すことができれば、そのまま >バイナリエディタ上で命令をNOPに書き替えるなどして、文字列比較を >行わない状態にすることが出来る。  他のプログラムと共用することを前提としているDLLを、バイナリエディタで書 き替えるとマズイということぐらい分からないのだろうか…。それに「VBセオリ ー」でNOP命令に置き換えるような操作は行いません。 ●[p294 No.25 圧縮された実行ファイルの圧縮を解除する]  ここでは「ダンプしたファイルはIATの再構築を行う必要がある」との記述があ ります。ここで前触れもなくIATという略称が登場しているが、正式名称・解説は 一切無し。  ちなみに、IATはImport Address Tableの略。詳しくはケンジさんがWizard Bi bleに書いたvol.15の第5章「リバースエンジニアリング」を参照して下さい。 >IATの再構築は「Revirgin」「Importe REConstrucotr」といったツールを >使えば自動で行えるので難しいことはない (綴りは原文ママ)  との記述もあるが、上記2つのツールの解説はない。  ここまでずらずらっと気になる点を列挙しましたが、下手すると公式サイトの 誤植表よりも詳しくなってしまったかもしれません。すでに買ってしまった方は、 参考にしてみてはどうでしょうか。 ■0x04.) crackmeの無断掲載疑惑について  さて、本書を読んだきっかけは前述したとおり、私が作成したcrackmeが無断掲 載されている疑惑のタレコミを受けたことに端を発しています。  実は以前、ア○キーから本が出るということでcrackmeの収録許可依頼が来たの ですが、その時は「あのア○キーがクラック本出すのかよ!」と驚いたモノです。 ア○キーが出すならということで許可メールを返信しましたが、この時点で気づ くべきだったのです。他人が作ったcrackmeに頼ったクラック本ってどうなのよ、 ということに。  適当に月日が流れたところで飛び込んできたのが前述のタレコミであり、その 本の奥付を見ると、許可依頼のメールを出した方の名前がある。な〜んだそうい うことか〜、ってふざけんな。そんなこと聞いてないぞ。  とまあ、どういうことだメールを送信したところ、その返事はすぐに返ってき ました。要約すると「一度許可くれたんだからOKと解釈」「再配布は自由とい う記載があったから」だそうな。ちなみに私のマニュアルの注意書きにはこう書 いています。 ----- ●再配布 ご自由にどうぞ。事後報告でもかまいません。 -----  crackmeを出した当時は、雑誌や書籍に収録されるとは思ってもいなかったので 簡潔に書きましたが、雑誌への収録って再配布なんだろうか。まあ、フリーで配 布している以上私に実害が生じるわけでもないので(著作権法に触れているかも 知れないが)別にどーってことないのですが、なんか腑に落ちませんね。ただ、 コレに関して管を巻いても何も始まらないので、そういうもんかと割り切るよう にしています。実害がない以上声を張り上げてもどうしようもないのが実情です。 そういうもんです。で、他のライターから聞いたのですが、この本の著者の一人 は某ランナーのライターでもあるとのこと。なるほど納得。 ■0x05.) 最後に  以上、非常にキツイレビューとなってしまいましたが、決して嫌がらせの意図 はありません。私と致しましては、某ランナーで厨房を煽りつつ一から知りたい 一般の読者はスルーできても、ゲーム改造・クラック系住民が総出でドン引きす るような、そういう格調の高い本を出し続けていってほしいと思うわけなんです よ。ネタになるし。  しかし、売れ筋ランキングを見るとどうやら売れている模様。私の近所の書店 でも前作と合わせて平積みになっていたし、そのマーケッティングのセンスには 素直に感心します。ホントに。しかし、そうやって無垢な初心者に間違った知識 を植え付けるということには罪悪感を感じないのでしょうか。これだけは如何と もし難いですが、素晴らしい本を出してイット業界の発展に寄与することも大事 だけど、やっぱり金儲けが肝心だよねと割り切るように、是非行き着くところま で行ってみて欲しいと思います。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第18章: 音の本質 --- 著者:IPUSIRON x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) はじめに  最近、シンセサイザーに興味があって、まどさんに色々教えてもらったり、本 やWebサイトで調べまくっています。元々、シンセサイザーを含む音楽機器に興味 を持ったのは、電子回路という意味でのハードウェアと音がどのように作り出さ れるかという理論的な部分を知りたいと思ったからです。前から、数学や物理学 を学習することによって、音についてなんとなくは知っていましたが、今回色々 調べてみると奥が深いことが判明したので、それをまとめてみたいと思います。 ■0x02.) 音とは何か?  音とは、簡単にいえば空気の振動です。本などによく載っている波の波形は、 上下に揺れる横波のように表現されていますが、実際に空気中を振動している音 は縦波です。これをきちんと理解するには横波と縦波の定義をしっかり把握して おく必要があります。横波は上下に揺れる波です。例えば、池に石を投げ入れた ときに発生する波がそうです。一方、縦波は疎密の現れる波です。  例えば、長いスプリングの端を押し出すと、密の部分が伝導されていきます。 これが縦波です。音は空気を媒体として伝達されるので、空気中の分子(酸素分 子、窒素分子、二酸化炭素分子など全部含めて)の密度(気圧)の高低によって 起こるわけです。  縦波の密度が高いところが横波の振幅(上下の部分)の高いところに対応され て、縦波を横波として表現します。コンピューター上でデジタル録音とシーケン サーを統合させた音楽製作ソフトをDAWソフトと呼びますが、このDAWソフトも音 をユーザーにわかりやすいように横波で表現しています。これはDAWソフトが特殊 というわけではなく、普通の本とかでもそうやって表現されています。実際に物 理の本などを開いてみてもわかるでしょう。 ■0x03.) 音の3つの要素  音は縦波で、一般的にわかりやすいように横波で表現されるということは解説 しました。横波には、時間軸に沿って波形が変化していきます。また、波形の最 大値・最小値の大きさ(振幅という)、一定時間における波の繰り返しパターン (周期という)の違いがあります。この3つの要素が横波の本質です。このとき、 一般的な横波の要素と音の要素の対応は次のようになります。 ・波形→音色 ・周期→音の高さ ・振幅→音量  つまり、音は音色、音の高さ、音量という3つの要素によって成り立っています。  では、それぞれについて少し詳しく解説します。 ●波形  波形とは、波の形そのものです。凸凹の波もあれば、きれいにカーブしながら 続く波もあり、時間が経つにつれて減衰していく波もあります。楽器が奏でる音 は同じラであっても、波形が異なります。ギターとピアノでまったく同じメロデ ィ、かつまったく同じ添付で演奏したとしても、どちらがギターでどちらがピア ノかを聴き分けることができます。これは音色が違うからです。 ●周期  周期とは同じパターンが何回現れるかということを意味します。一般的に周波 数という単位で表されます。周波数とは、1秒間に何回同一の波形のパターンが表 示されるかという数値です。  例えば、1秒間に凸凹というパターンが1回だけあれば、それは周波数1です。ま た、1秒間に凸凹凸凹と凸凹パターンが2回あれば、それは周波数2となります。周 波数はHz(ヘルツ)という記号が使われるので、前者の例は1Hz、後者の例は2Hz となります。  楽器を演奏したことがある人は知っていると思いますが、音の世界では440Hz( 1秒間に同一パターンが440回出る)が基準となります。なお、ここでは波形は無 視して、周波数だけに着目してください。440Hzを2倍した結果の880Hzは、1オク ターブ上がります。また、440Hzを1/2倍した結果の220Hzは、1オクターブ下がり ます。つまり、音の性質として、周波数の値が大きければ高音、小さければ低音 となるわけです。ただし、音量が大きくなったり・小さくなったりしているわけ ではないので注意してください。例えば、同じドでもオクターブの高いドとオク ターブの低いドなどがあるわけです。さらに、音量によって大きさも変わるわけ です。よって、人間の耳に聞こえる大きさの変化の要素は、基本的に周波数と音 量ということになります。 ●振幅  これは単に波の上下の大きさのことです。振幅が大きいほど音量は大きく、振 幅が小さいほど音量は小さく感じられます。横波をグラフにしたときの縦軸の伸 びだと考えればよいでしょう。  元々音圧の単位としてPa(パスカル)という圧力の単位で表していました。し かし、これで人間が普段聴いている音圧を表そうとすると、100万倍くらいの範囲 に渡ってしまいます。これでは計算が非常に大変なので、もっと簡単にできない かと考えられたのが、対数を使ったdB(デシベル)という単位です。  dBは音や電気の変化量を表す単位であり、それを対数によって計算したもので す。人間の感覚は物理量の対数に比例するので、何dB増加したというとその数字 は感覚と一致します。  また、dBの計算は、次のように掛け算・割り算がそれぞれ足し算・引き算に対 応します。 ・A×Bを対数計算で考えれば、log(A×B)=logA+logB ・A÷Bを対数計算で考えれば、log(A/B)=logA-logB  この性質により、元の計算が困難であっても、対数計算にすることで計算が簡 単になります。  dBによる音量の表示は、次のような大雑把なとらえ方でOKです。 0dB=1倍 6dB=(0dBの)2倍 10dB=3倍 20dB=10倍  逆にマイナスは次のようになります。 -6dB=1/2倍 -10dB=1/3倍 -20dB=1/10倍 -40dB=1/100倍  大体これぐらいを覚えていれば問題ありません。これは電圧の場合で、0dBを基 準にしています。  他にも電力の表現があって、この場合も電圧の場合と同じく0dBを基準にするが 倍率が異なります。 0dB=1倍 3dB=(0dBの)2倍 10dB=10倍 20dB=100倍 40dB=10,000倍(∵20dB+20dB=100倍×100倍)  そして、マイナスは逆数になります。  例えば、「6dBのゲインを稼げ」といわれたら、電圧を意味して「電圧を2倍に する」ということです。一方、「音量を2倍にしろ」といわれたら、電力を意味し て「3dBをアップさせる」ということになります。  dBの後ろにuが付いてdBuとなったら、0dBuの単位を決めていることを表してい ます。0dBuが775mVなので、-40dBuといったら、-40dBが1/100倍なので7.75mVとい うことになります。マイクロフォンの出力電圧は大体このぐらいです。  また、0dBVは1Vを表し、コンシューマー機器ではこのdBVという単位がよく使わ れています。  複雑と思ってしまうかもしれませんが、それほど難しいことはいっていません。 計算が苦手なら、何dBが何倍を意味するのかその度に表で確認すればよいだけです。 ■0x04.) 音量と距離の関係  音圧は面で広がっていきます。そのため、距離に対する音量の変化は、距離の2 乗に反比例します。例えば、距離が2倍になれば音量は1/4、距離が4倍になれば音 量は1/16になります。 ■0x05.) sin波  波の中で、もっともイメージしやすいのは正弦波(サインカーブ。以後、sin波 と略する)でしょう。これは、高校の数学(私立ならば中学?)の三角関数とい う分野において、登場する波です。単振動という物理的現象において登場する波 であり、もっとも基本的な波です。音楽の世界でも基準の音であり、基音(fund amental)と呼ばれます。  次のような数式で表されます。 y=sin(θ)  変数はyとθ(ギリシャ文字の「シータ」)の2つだけで、「sin」というのはs in波を表すことを意味します。つまり、θに何か代入すると、yが出力される、関 数ということです。  sinの値は次のようになります。30度、45度などの加算した値をθに代入したと きのsinの値は単振動という原理を考えると暗算(またはちょっとした計算)で求 めることができます。次のリストでは、sin(20度)といったものは計算していませ んが、関数電卓(単純なものなら加法定理で十分)使えばきちんと表示されます。 ただし、きれいな値ではないので、ここでは省略されているだけです。 sin(0度)=1 sin(30度)=√3/2 sin(45度)=1/√2=√2/2 sin(60度)=1/2 sin(90度)=0 sin(120度)=-1/2 sin(135度)=-1/√2=-√2/2 sin(150度)=-√3/2 sin(180度)=-1 sin(210度)=-√3/2 sin(225度)=-1/√2=-√2/2 sin(240度)=-1/2 sin(270度)=0 sin(300度)=1/2 sin(315度)=1/√2=√2/2 sin(330度)=√3/2 sin(360度)=sin(0度)=1 sin(390度)=sin(360度+30度)=sin(0度+30度)=√3/2 …繰り返す  何度に対して、sinの値がどう変化するかは単振動という概念ですぐに求めるこ とができますが、今覚える必要はないので、最低限知っておくべきsinの性質を把 握しておいてください。 ○sin(θ+360n)=sin(θ) ただし、nは任意の整数。  角度を度数で表すと不便なので、数学では一般的にラジアン表記が使われます。 ラジアン表記では、π=90度となるので、30度はπ/3、45度はπ/2、180度は2π といったようになります。これで前のリストを書き換えてみます。 sin(0)=1 sin(π/3)=√3/2 sin(π/2)=1/√2=√2/2 sin(2π/3)=1/2 sin(π)=0 sin(4π/3)=-1/2 sin(3π/2)=-1/√2=-√2/2 sin(5π/3)=-√3/2 sin(2π)=-1 sin(7π/3)=-√3/2 sin(5π/2)=-1/√2=-√2/2 sin(8π/3)=-1/2 sin(3π)=0 sin(10π/3)=1/2 sin(7π/2)=1/√2=√2/2 sin(11π/3)=√3/2 sin(4π)=sin(0)=1 sin(13π/3)=sin(360度+30度)=sin(0度+30度)=√3/2 …繰り返す  θを使って解説しましたが、時間依存なので、timeの略のtに置き換えて考えて いきます。  横軸をt、縦軸をyとして、これらの値をプロットします。そして、この点をゆ るやかにつなぎます。それの図は次のようになるはずです。ちなみに、この図は Mathematica(数学ソフトの一種)のPlot関数で表示させたものです。 ----- Plot[Sin[ 2 π t],{t,0,1}] ----- (図)http://akademeia.info/wizardbible/17/image/sin.gif  ところで、440Hzのsin波が音楽の世界の基準、即ち基音ということはすでに触 れました。それとは別に倍音(over-tone)というものがあります。倍音とは、周 波数440Hzを整数で割ったsin波の総称です。周波数を2倍、即ち880Hzのsin波を倍 音に含まれる2倍音ということになります。ただし、2倍音とは一般的に使われず に、第2高調波と呼びます。3倍になれば第3高調波、4倍になれば第4高調波といっ た具合です。  まとめると、次のような関係になります。 440Hz:基音 440Hz×2=880Hz:第2高調波 440Hz×3=1,320Hz:第3高調波 …  なぜsin波がこれほどまで重要視されるのかというと、実は数学理論の中にフー リエ展開という分野があり、驚くべき定理が存在するからです。その定理とは、 「任意の周期関数は三角関数の和として表せる」、即ち「任意の周期関数はsin波 とcos波の和として表せる」ということです。cos波は、sin波の位相(y軸の0の出 発ポイントのずれ)を90度ずらしたものとまったく同じなので、本質は変わりま せん。つまり、sin波をたくさん重ねあわせれば、どんな周期関数でも作れるとい うことです。どんなとうことは、凸凹というカクカクした波形であっても作れる ということです。そんなばかなと思うかもしれませんが、本当です。  実際に、ノコギリ波と矩形波【くけいは】を作ってみます。 ●ノコギリ波  ノコギリ波とは、次のような三角形のような関数です。Mathematicaでは次のよ うにすることで、プロットできます。 ----- f[t_]:=-t+π Plot[f[t],{t,0,2π}] ----- (図)http://akademeia.info/wizardbible/17/image/nokogiri.gif  それではこの矩形波をsin波の重ね合わせで本当に作ることができるのかを調べ てみます。  まず、次のSnという関数をMathematicaで定義します。 Sn=Σ[i=0;n]{sin(i+1)x}/(i+1)  sinの中が「i+1」となっているのは正の整数(1,2,3,4,…)の高調波の重ね合 わせをするためです。Mathematicaの書式として、nが変数なので[]内で「n_」と し、関数の定義なので「:=」を用います。テキストで表すことができないので図 で示します。 (図)http://akademeia.info/wizardbible/17/image/nokogiri1.gif  それでは、第2高調波を足し合わせてみます。そのためには、n=1でOKなので、 次のようにプロットします。 ----- Plot[Sn[1],{t,0,2π}] -----  すると、次のような波形になります。 (図)http://akademeia.info/wizardbible/17/image/nokogiri2.gif  次に、第3高調波を足し合わせるために、n=2としてみます。 ----- Plot[Sn[2],{t,0,2π}] ----- (図))http://akademeia.info/wizardbible/17/image/nokogiri3.gif  いっきに、n=10を見てみましょう。 ----- Plot[Sn[10],{t,0,2π}] ----- (図))http://akademeia.info/wizardbible/17/image/nokogiri4.gif  だいぶそれらしくなってきました。n=100を見てみます。 ----- Plot[Sn[100],{t,0,2π}] -----  ほとんど、最初に示したノコギリ波に近い波形となりました。 (図))http://akademeia.info/wizardbible/17/image/nokogiri5.gif ●矩形波  矩形波とは、次のような凸凹関数です。Mathematicaでは次のようにすることで、 プロットできます。 ----- Plot[Sign[Sin[x]],{x,0,2π}] ----- (図)http://akademeia.info/wizardbible/17/image/kukei.gif  それではこの矩形波をsin波の重ね合わせで本当に作ることができるのかを調べ てみます。  まず、次のSnという関数をMathematicaで定義します。 Sn=Σ[i=0;n]{sin(2i+1)x}/(2i+1)  sinの中が「2i+1」となっているのは正の奇数(1,3,5,7,…)の高調波の重ね合 わせをするためです。Mathematicaの書式として、nが変数なので[]内で「n_」と し、関数の定義なので「:=」を用います。テキストで表すことができないので図 で示します。 (図)http://akademeia.info/wizardbible/17/image/kukei1.gif  それでは、第3高調波を足し合わせてみます。そのためには、n=1でOKなので、 次のようにプロットします。 ----- Plot[Sn[1],{t,0,2π}] -----  すると、次のような波形になります。 (図)http://akademeia.info/wizardbible/17/image/kukei2.gif  これはまさしく、基音(基本波)と第3高調波を重ね合わせた波形です。  次に、第5高調波を足し合わせてみます。そのためには、n=2とします。 ----- Plot[Sn[2],{t,0,2π}] -----  すると、次のような波形になります。 (図)http://akademeia.info/wizardbible/17/image/kukei3.gif  まだまだ波形が滑らか過ぎます。どんどん増やしていってみましょう。とりあ えず、n=10、即ち第21高調波まで足し合わせてみました。 ----- Plot[Sn[10],{t,0,2π}] -----  すると、次のような波形になります。 (図)http://akademeia.info/wizardbible/17/image/kukei4.gif  だいぶ形が見えてきました。さらにnの値を大きくしてみます。n=100、即ち第 201高調波まで足し合わせてみました。 ----- Plot[Sn[100],{t,0,2π}] -----  すると、次のような波形になります。 (図)http://akademeia.info/wizardbible/17/image/kukei5.gif  ほとんど完全な矩形波に近くなっていることがわかります。 ■0x06.) ギブスの現象  0x05で作ったノコギリ波と矩形波をよく見ると、端がトゲのように突き出た部 分が確認できるはずです。このトゲの高さはnをいくら大きくしても低くなりませ ん。しかしトゲの幅(高さと幅を使いわけている点に注意)は0に収束していきま す。よって、n=∞にすると、トゲの幅は0となり、実質トゲは消滅することにな ります。したがって、トゲが消滅したら、完全なるノコギリ波や矩形波となるわ けです。  このようなトゲが生じる現象をギブスの現象といいます。 ■0x07.) 人間の耳と音  人間は耳で音を聴いています。 1:まず、音の振動は空気中を伝わって、耳の穴(外耳道)を通り、鼓膜へと到達 します。 2:この鼓膜が振動すると、耳小骨と呼ばれる3つの骨が動いて内耳にある蝸牛へ と振動を伝えていきます。ここで、耳小骨がテコのような構造になっていて、鼓 膜の微細な振動を増幅します。しかも、鼓膜に比べると耳小骨が蝸牛と接する部 分は面積も狭いため、効率よく振動を伝えることができます。 3:蝸牛は渦巻状の器官でその内部はリンパ液で満たされています。耳小骨から伝 わった振動はこのリンパ液を揺らし、それに伴って蝸牛内にある基底膜という膜 をも揺らします。この基底膜には、有毛細胞という特殊な神経細胞が密生してい て、これが振動を読み取り、聴覚神経を通じて脳へと神経信号を伝えていきます。  この有毛細胞はとても重要な役割を果たします。鼓膜は何らかのダメージを受 けても可能ですが、有毛細胞の回復は困難です。  また、人間は一般的に年齢を経るにつれて、高い音を聴き取りづらくなるとい われています。大体30〜40歳台で低下し始めますが、これも有毛細胞が正常に機 能しなくなるからだといわれています。  基底膜は周波数によって振動する場所が異なります。つまり、人間はこの基底 膜で周波数を分析しています。一種のフィルターの役目といえるでしょう。高い 音は蝸牛の入り口付近、低い音は奥の方が振動します。  人間の聴覚と音は奇妙に関係でつながっているので、それを紹介します。 ●ハース効果  2つの耳に到達する音の時間と音量差を感じることで、人間は音が鳴っている方 向を感知することができます。  音はダイレクトに音源から耳に入ってくるだけではなく、壁などにも反射して 聴こえてきます。その場合でももっとも早く届いた音の方奥に音源があると感じ ることができます。これをハース効果と呼びます。  ただし、人間が音の方向をある程度はっきりと感知できるのは、前方の水平方 向がほとんどで、後方や上下方向に対してはかなりあいまいです。それでも、後 ろからの音は耳の出っ張り(耳介)がフィルターの役割を果たすため、前方から の音とはスペクトルに違いが生じます。それで、後方からの音と認識します。  また、顔の形そのものも一種のフィルターといえるので、上から来た音のスペ クトル、下から来た音のスペクトルといったものも考えられます。しかし、その スペクトルの差は先ほどの時間差などと比べると非常に微妙なので、聞き間違え ることもよくあります。特に、低音はその性質上、障害物があってもその背後に 回りこみやすいので(回折という現象)、より方向がわかりづらくなります。  ドイツのイェンス・ブラウエルトの研究によれば、ある周波数地愛器の音が方 向を感じさせることもあるようです。例えば、8kHzくらいの音は上から聴こえて くるように感じるそうです。 ●腹話術効果  逆に、目の前に複数の音源となるようなものがあった場合、実際に音が出てい る音源とは別の、音が出ていない音源から音が出ているように錯覚することもあ ります。この場合は視覚が関係してきます。  例えば、映画館などがそうです。大抵の映画館ではスクリーンの後ろにセリフ 用のセンター・スピーカーを置いて、常にそこから登場人物の声を出しています。 しかし、スクリーンで動いている人物の口から声が発せられているように錯覚し てしまいます。これは腹話術効果と呼ばれます。この現象は大体5〜10度くらいま での範囲で起きるものであり、それ以上の角度が開くと正しい方向を感知できる ようになります。 ●カクテル・パーティー効果  マイクで音を拾うとノイズに埋もれて聴こえない音でも、人間はその音源に注 意を向けることで聴き取ることができるという現象のことをカクテル・パーティ ー効果といいます。 ●マスキング  ある音が別の音を聞こえなくしてしまう効果をマスキングといいます。人間の 耳は、周波数大域によって感じ取る部分が違うわけですが、同じ周波数大域であ れば同じところが振動するので、レベルの大きい方が小さい方をかき消してしま います。しかも、近い周波数大域の2つの音があった場合、低い音の方が高い音の 方をマスキングするといいます。似たような大域の楽器が2つあった場合は、低い 方が高い方を聴こえなくしてしまう可能性が高いわけでありmさう。ただし、こ れは2つの周波数がごく近い場合に起こる現象です。 ■0x08.) まとめ  今回の記事はどうだったでしょうか? 数式が入っていて読む気がしなかった 人もいるかもしれません。ただ、どうして数式を使うのかというと、数式を使っ た方が間違いが起こりにくく、一度理解してしまえば応用ができるからです。と いっても、数式や定理を暗記しようとしても意味はありません。定理を覚えるの ではなく、定理をその定義から導く過程を理解するのです。そのためには、記号 は何を意味しているのかということを覚える必要があります。特に、Σ(足し合 わせを意味する)、Π(掛け合わせを意味する)、dx(微分)、∫(積分)など はあらゆる場面で登場する数学記号です。これらをしっかり使いこなせなければ、 理解などはるか先になってしまいます。  少し脱線しますが、数学記号というものは適当に決められているようで、そう ではありません。新しい拡張が容易に推測できる記号こそが、本当の意味で精錬 された数学記号です。例えば、積分ならば∫[-∞;+∞]といった拡張がすぐ考え ることができます。ここから新しい数学理論が生まれます(この例では広義積分)。  また、こんな話もあります。文学部の教授の部屋にはたくさんの本があって、 数学科の教授の部屋には少数の本しか存在しなかったという風刺話もあります。 これの意味するところは、1行の数式や定理には情報量がたくさん詰め込まれてい るということです。それの積み重ねとして、ページ数、最終的には本の数に差が 出るということです。アインシュタインが導いた法則である「E=mc^2」というた った1行の数式を、何らかの言語(日本語でも何でもよい)で解説しようとしたら 何十行必要なことでしょう…。短い法則だからこそ、美しい法則・定理だとわか るわけですが、何十行もだらだらに言語で書かれていたら正直読む気がしません。 といっても、数式が絶対ではなく、その論理背景が一番重要ということは忘れて はなりません。  以上の例から、記号の重要さがわかってもらえたらと思います。  今回は音の本質はsin波であることを実験しました。次回はシンセサイザーでの 音作りを解説したいと思います。もちろん、波形からアプローチするので、sin波 であらゆる周期関数が作ることができるということだけは必ず理解しておいてく ださい。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第19章: ハッカーの教科書【完全版】 編集後(悔)記 --- 著者:まど x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ■0x01.) はじめに  2001年11月30日に発売された「ハッカーの教科書(IPUSIRON著)」は、第8刷り まで増刷を重ねたベストセラーとなりましたが、いくつかの情報が古くなったと 感じたことと、著者と編集の意向として、ハッキングの基本となるアプローチを 網羅した「真の意味でのハッキングの教科書」を作りたいという理想を追った結 果、全688ページにもおよぶ、データハウス始まって以来の大作となりました。  データハウスでは、一冊の単行本を作る場合、基本的に224ページが基準となり ます。これを基準として単純に考えたならば、3倍を越えるページ数となりまし た。  しかし、上がってきた原稿を見て、書いた著者も編集も大慌て。前回のような 組みで入稿すると約1000ページ、単行本でいえば4冊分の情報量と膨れ上がってい ました。結果として、予想を越えまくる情報量となったため、文字の大きさを少 し下げ、行間も少し縮め、ブロック単位での改ページもおこなわずギシギシに詰 め込んでも3冊分のページ数に収めるのが限界で、実質的には単行本4冊分の情報 量となっています。もちろん、上がってきた原稿を、ただ単純に右から左に流す といった入稿でもなく、前作同様に、つまらないネタは削除という方針で削りに 削った結果としての情報量ということです。  今回はこの「ハッカーの教科書 完全版」の発売を記念して、著者と編集の修 羅場を振り返りながら、発注から編集、入稿作業、そして、出版までの全行程を レポートしたいと思います。 ■0x02.) 序章 まど「もしもし、ハカーの教科書を改定するんだけど、今回はUNYUN以来のハードカ    バーになるってことで、よかったね。あと、前回、掲載できなかった情報    や新ネタを加えて、もう少し分厚くして濃い内容の完全版にしようと思っ    ているから3月末までに全部の原稿を頼むね」 いぷ「はい、わかりました。ケンジ氏もいるので面白い内容になると思います」  ——3月・原稿送信。 まど「原稿の進行はどう?」 いぷ「少し膨らみました。先に完成分をメールで送ります。残りは、あと少しな    ので後で送ります」  ——3月・原稿受信。 まど「けっこう増えたね。厚くなるけど、まぁ、いいか。レイアウトを詰めれば    お得感もでるしで……」 いぷ「はい。でも、残りもけっこうありますよ。完成したら送りますけど……」 まど「わかった。社長には、少し値段を上げるという方向で話をしておく。こっ    ちは入稿始めておくんで、残りを頑張って仕上げてね」 いぷ「はい。でわ」 ■0x03.) 事件発生  ——メール受信・最終原稿到着。 まど「……あのぉ。文字数が全部で514,811文字あるけど、なんかの間違い?」 いぷ「……はぁ。そうなりますか? けっこう増えましたね」 まど「そうなるとかではなくて、単純に流すと単行本5冊は作れる量だよ」 いぷ「……はぁ。それで全部です」 まど「いや、だーかーらー! どうすんのさ! これ入れたら、凄いことになる    わけよ! 算数できる? たし算からちゃんと教えたろか?」 いぷ「……はぁ。数学的には単行本5冊の量となりますね」 まど「だーかーらー! どこをどうすりゃいいのさ!ヽ(`Д´)ノ」 いぷ「……はぁ。でも、削るところはありませんよ(微笑)」 まど「おのれはアフォか!! ヴォケか!!!(マジギレ+ブチギレ×オオアバレ)」 いぷ「じゃぁ、東京に行って、ぼくも手伝いますよ」 まど「あたりまえやろが! 社長にどない報告するねん! 知らんぞ。漏れは1    冊分の原稿でも文字見ると吐き気がして、目まいがクラクラする人間や!    それが5冊分やど! 殺す気かい!」 いぷ「……はぁ。だーかーら! そっちで考えながら進めましょう。まどさんの    部屋にゴキブリいなくなったっていうのは本当ですよね(汗)」 まど「いない。バルサン焚いたし」 いぷ「でわ」 ■0x04.) 修羅場の悪寒  ——3月末・いぷろん上京。 まど「さぁ、どうすんねん? どうやって文字を減らすわけ?」 いぷ「そのままでいいですよ。前・後巻の2冊にするとかどうですかね?」 まど「君の脳には、引き算ちゅう概念がないのか?(´・ω・`)」 社長「とにかく減らすという方向で進めてみよう」 いぷ「はぁ。わかりました」  ——4月初旬・入稿完了前。 社長「どうしてもページが減らないというなら、そのまま出すというのはどうだ    ろう? まぁ、500ページあたりで収まるならそれでいいよ」 まど「……マジですか? 癖になりますよ。算数できないし、体重も重いしで、    このまま放置すると腐りますよ」 社長「原稿の内容的には、どんなもんなの?」 まど「ハッキングで基本となる手法を網羅しています。これまで、ありそうでな    かった大作となりますね。ハードカバーに堪えうる内容です」 社長「書き口や文体などは、どんなもんなの?」 まど「真面目な書き口で、ですます調ですね。これも適しています。相変わらず    『厳密には』『次に示します』『列挙します』とかウダウダと金魚のうん    こみたいな能書きがダラダラありますけど問題なしです。ぼくなら、その    部分を真っ先に破って捨てるか、マジックで真っ黒に塗りますけど」 社長「よし、化粧箱に入れよう! 本体も銀インクを使って豪華にしよう!」 まど「なるほど、権威を示すタイプの路線ですね! いいかもしれない!」 いぷ「はぁ。わかりました」 まど「わからいましたじゃねーだろ! あるがとうございますだ!」 いぷ「はぁ。ありがとうございます」 ■0x05.) 地獄への旅立ち  ——4月初旬・入稿完了。  今回の詐欺事件、その経緯を簡単にまとめると、このような動機から、その犯 行がおこなわれたわけです。  しかし、捜査を進めるにつれ、その犯行は、卑劣極まりないものとなっている ことが判明していきました。  ——デザイナー、焦る。 業者「入稿の件なんだけど、どう詰めても600ページは軽く越えるよ」 まど「うーん、そこをどうにか!」 業者「無理。絶対無理!」 まど「わかりました。では、600ページを目指して、余分と思える部分を削除し    入稿しますので、それで進めてください」  ——まどさん、余分なところを削除。  ——いぷろん、行間を詰める。  ——4月中旬・ゲラ上がる。 業者「ようやく600ページは越えたけど、どうにかなったよヽ(;´Д`)ノ」 まど「ありがとうございます!」 業者「これが初稿ゲラね」 いぷ「あれ? まどさん、どこか原稿を削除してませんか?」 まど「うっせーな! 糞なところはデリデリ。どうでもいいとこだしね」 いぷ「それはマズイ。抜けると整合性がとれなくなります!(`Д´)」 まど「おいおい! マジかよぉ〜ヽ(;´Д`)ノ」 いぷ「とにかく入れなければ!」  ——編集部に冷たい空気が歩く。 まど「……まぁ、大先生がそうおっしゃってますので、仕方ないかと」 業者「……まぁ、こっちは指示通りにやるしかないからやるけどね」 社長「……仕方ないな。少し手間はかかるが、そうしよう」 まど「本当にすんませんです(´Д`)」 ■0x06.) 地獄のずんどこだんす  ——再び、作業に入る。 まど「……ったくよぉ! それなら原稿取らなければよかったじゃんかよぉ!」 いぷ「勝手に原稿を削除したのは、まどさんですから」 まど「ばーか(`Д´)ばーか(`Д´)ばーか(`Д´)」 いぷ「とにかく赤字を入れます」  ——いぷろん、ゲラを相手に黙々と作業に入る。  ——まどさんはサイケをバックに踊り狂う。半拍遅れのタイミングが難しい。  ——4月下旬・最終ゲラ上がる。  ——いぷろん、ゲラを相手に黙々と作業に入る。  ——まどさんはサイケをバックに踊り狂う。半拍遅れをマスターしてきた。 いぷ「なんとか終わりました」 まど「おし! 苦しゅうない!」 いぷ「ところで、まどさんは全然仕事してないように思えますが……」 まど「おのれはアフォか! 漏れの仕事はサイケを踊って勢いをつけるところか    ら始めるわけよ。編集はぐる〜ぶが大事なんや。その勢いを、そのまま仕    事に反映させるのが、プロの編集者いうことや。覚えとけよ」 いぷ「はぁ。でも、一日中、ずっと踊っているじゃないですか?」 まど「だからぁ! 踊っていると時間が過ぎるやろ? ほんでタイムカード打っ    て家に帰って、ミックスするんや。それが編集いうもんや。それが都会で    生きるということや。まぁ、とにかく、なんでも勉強いうことや」 いぷ「はぁ。。。」 ■0x07.) 最終章  ——まどさん、最終ゲラをチェックする。 まど「な、な、なんじゃ、こりゃぁ! 『ブルートフォースタック』てなによ?    新しいテクニックか? ブルートにフォーでスタックでもするいうことか    いや〜〜〜〜〜〜〜!」 いぷ「あぁ、アタックの『ア』が抜けていますね(´・ω・`)」 まど「……てことはなにかい? そういう部分は直ってないということ?」 いぷ「厳密にいうと、そうなりますね」  ——まどさんプルプル! でも、踊る。 まど「明日、最後の戻しよ。688ページ全部を見ないといけないわけ?」 いぷ「そうなりますね」 まど「おのれは目の悪い身体障害者になにをさせる気じゃ! 688ページの赤や    ど! 明日までやど! できるかいや! 大体や、なんで、こんなキチガ    イみたいに一杯書かなあかんねや! このキチガイ! 変態!」 いぷ「いや、あらゆる可能性があるからです。数学的にいうならば……」 まど「やかましわ! わしが書いたらハッキングなんて数行で終わるぞ」    (1)バイダに潜り込む    (2)パスを貰う    (3)会社バックレで場末のネカフェに行く    (4)データベースをアウトプット    (5)謎 まど「わぁったか! 漏れのようなプロにいわせると、そんなもんや」 いぷ「はぁ。早く直さないと間に合いませんよ」 まど「うん。じゃ、まずはサイケで踊って勢いつけるか!」 いぷ「……(´・ω・`)」  ——ドッシカッシ〜ウニュウニュドッシカッシ〜グニャグニャ〜♪  (……永遠にループ) ■0x08.) まとめ  ——そんなわけで、688ページを一日で処理したのは初めての経験で、最後の日 はフラフラになりながら徹夜の赤字入れとなりましたが、なんとか完成しました。  最近は、コンピュータ・アンダーグラウンドという世界も崩壊してしまい、と くにハッキングというコミュニティは、「セキュアだ! インシデント!」だの と、ごたくを並べて白い方向に進み、弱体化している中、本書は一本筋の通った 自信を持てるドス黒い大作となりました。  そして、今回は、kenji aiko氏も参加ということで、完全匿名を追及したドス 黒いオリジナルメールクライアントや、スパムメール専用クライント、そして、 隠しディレクトリやファイルを探知する専用ソフトなども用意しています。  IPUSIRON氏が理想とするツール群を網羅したCD-ROM(一部ツールはネットより ダウンロード)も付属しています。  さらに、今回は、データハウス初の“化粧箱入り”の“ハードカバー”です。  その分、価格もお高くなりますが、著者の理想を徹底的に追及したため、入門 者はもちろん、セキュリティ関連からサーバー管理者にいたるまで幅広く対応す る、壮大なスケールの一冊となっています。 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x --- 第8章:お知らせ --- x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ○Wizard Bible(http://akademeia.info/wizardbible/)では随時、執筆ライタ ーを募集しています。  扱う内容のテーマは広義での「under ground」です。例えば、ハッキングから サリンガスの合成法などと幅広い内容を考えています。また、各種、特殊な職業 や趣味を持った方のレクチャーなども含まれます。  一回きりでも構いません。また、必ず、毎回連載する義務もありませんのでで きる範囲で構いません。気軽に声をかけてください。もちろん一回書いたことが ある人も気軽に声をかけてください(全く気にしていない性格なので)。 ○Kenji AikoさんがQ&Aを作ってくれました。初めて参加する人でもわかりやすく 書かれていますので、参考にしてください。 http://akademeia.info/wizardbible/wbQandA.html ○支援者、参加希望者用のスレッドを立てました。 http://ruffnex.oc.to/ipusiron/cgi/forum/patio.cgi?mode=view&no=17 x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x ---- 第9章:著者プロフィール --- x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x x0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0xx0xXx0x  今回は著者の皆さんに使用しているブラウザとその理由をお願いしました。 ■まひん ●Job:secret ●Web:N/A ●Mail:muffin-man@gmx.co.uk ●Team(Group):N/A ●Comment:  「数万もするソフトウェアが無料で使えるなんてイケてるぜ」と思ってクラッ クの勉強をはじめました。しかし、どれもこれもアセンブリ言語が分からないと さっぱり分からないチュートリアルばかりネットに転がっていて、自分でまとも にクラックできるものなんてカスみたいなシェアウェアばかりでした。しょうが ないのでマジメにアセンブリ言語を勉強しようと思い、本を探したりネットを探 したりしていろいろ読んでみましたが、DOSの話ばっかりでWindows時代にそのま ま適応できることはあまりありませんでした。そのうち、レアなWindowsでのアセ ンブリ言語の情報を探すために英語のサイトとかも見るようになりました。その 中でマトモにWindowsでアセンブリ言語プログラミングをしているのはウイルスの 世界しかないと思い、ウイルスに少しずつのめり込んでいくことになりました。 最初の目的であるクラックのことなんて全く忘れ、ひたすらウイルスの技術的な 面白さに惹かれ、ウイルスの世界と深くかかわり、さまざまな技術、知識を得る ことができました。今は中学生が片手間に作ったようなワームが幅を利かせる時 代で、そこに技術的、知的な面白さはまったくありません。最近ネットをはじめ た人ならウイルスとアセンブリ言語が深い関わりがあるということに驚く人も多 いかもしれません。  ウイルスのプログラミングはアセンブリ言語をはじめ、Windowsのこと、ドライ バのこと、ネットワークのこと、ソーシャル的な要素、解析(クラック)の要素、 さまざまなアルゴリズムなどいろいろな知識が必要となりました。私はウイルス にのめり込んでいたころに本当に多くの知識を得ることができました。このあと は、コンピュータ系のことに関しては何をやるにもすんなり理解できました。も ちろん最初の目的であるクラックの世界の話もすんなり理解できました。  というわけで、「クラッカープログラム大全」買ってください。続編も出ます ので買ってください。そのうちウイルス本も書きますので買ってください。  最近の趣味はDJ&DTMです。といってもエロ動画にエフェクトをかけ、喘ぎ声を MIXするのが専門です。 ●主に使用しているブラウザ:FireFox  タブブラウズだし、ブックマークもIEみたいな.urlじゃないから。IEより使っ てる人が少ないので安全。最近、使用人口が多くなってきて脆弱性を発見される ことが多くなってきたのが悩みです。 ■多変量解析 ●Job:学生(4粘性)。「就職できません、誰かスペースをください」 ●Web:「ありません、誰かスペースをください」 ●Mail:「変なメールが来たら怖いので、秘密」 ●Team(Group):「ありません、誰かスペースをください」 ●Comment:  うつ病、人格障害と診断された社会不適合者です。アルバイトの面接も落ちま す。向精神剤を飲んでなんとか生きています。生きているのがしんどいときがあ ります。身苦死ぃに居ます。是非、声をかけてください。HNで検索してみてくだ さい。 ●使用しているブラウザ:「Sleipnir Version 1.66」  これはタブブラウザで、極小カウンタ数のサイトを自動で回して遊べます。IP アドレスは同一になるため、同一IPアドレスのときはカウンターを回さないよう に設定されたCGIカウンタ等では出来ません。以下、方法。  タブを右クリック ->自動更新までカーソル移動 ->x秒ごとに自動更新 ->同じサイトをy個同時に開き、同様の操作をする(または、ジェスチャーでアク ティブなウィンドウのコピー)。 ->そのまま放置 ->カウンター回りまくり ->ニヤニヤ ->たぶん、怒られます(IPアドレスがわかるから)。 ■DokoDon ●Job:恐竜 ●Web:http://dd.x-eye.net/ ●Mail:dokodon@hotmail.com ●Team(Group):Team dok0don(UDAgentとかSETI@homeとか。メンバー一人だけ) ●Comment:  つい先日誕生日を迎えました。セルフプレゼントにmp3プレイヤーを購入。プレ ゼントは随時受付中です。数学、物理、生き物図鑑系の本が欲しいです。くださ い。 ●使用しているブラウザ:unDonut  Donut系ブラウザを使用しています。今現在はunDonutです。理由は、最初はDo nutが非常に軽かったからと、ソース公開されててWTLなんかを使ってて、その辺 の勉強をしたかったからです。できませんでしたけど。んで、その流れでunDonu tにたどりついたと。他のもいろいろ試しては、結局ここに落ち着いてます。 ■D ●Job:SE ●Web:N/A ●Mail:death_beasty@hotmail.com ●Team(Group):N/A ●Comment:  最近、VoIPのローカルネットワークにNIMDAやCodeRedを入れたら電話の交換装 置はどうなるのか試してみたいと思っています。次回は、今が旬の個人情報保護 法が導入されて企業がやっていることを書こうと思います。 ●使用しているブラウザ:IE  なんだかんだで昔から使ってますし、他の入れても結局こっちを使ってしまう ので。 ■金床 ●Job: プログラマー ●Web: http://guardian.jumperz.net/、http://www.jumperz.net/ ●Mail: anvil@jumperz.net ●Team(Group):JUMPERZ.NET ●Comment:  今回のWBはJavaマニアックプログラミングではなくちょっと別のネタにしてみ ました。最近はフィッシングがアツイですね。対策するソフトウェアもいくつか 出てきているようですが、どうにもしょぼそうなものが多いのが魅力的です(笑)。 私はネットバンクは使っていないので、フィッシング詐欺に遭う可能性は限りな く低かったりするんですよね。この不確定なIPネットワーク上に財産を乗せる気 にはなかなかなれませんです。 ●主に使用しているブラウザ:英語版FireFox  ずっとネットスケープを愛用していたのですが、試しに使ってみたFireFoxでブ ックマークの扱いの良さに一目惚れしてしまい、それ以来使い続けています。唯 一不満なのはHTTP-Networkingの設定がないことです。例えばプロキシに対しては HTTP/1.0を使用する、などの設定ができないのがちょっと不満ですね。ネットス ケープの8がFireFoxと同じような感じになりそうなので、こちらの正式版がリリ ースされたらまた乗り換えるかもしれません。 ■kn0wledge ●Job:読書(これはJobなのだろうか) ●Web:http://kn0wledge.x-eye.net/ ●Mail:kn0wledge@flashmail.com ●Team(Group):N/A ●Comment:  今回は、約9年間クラック関係を見てきた感想を書かせていただきました。 ●主に使用しているブラウザ:Mozilla Firefox  始めて使ったブラウザはNetscape Navigatorでした。当時やっとInternet Exp lorerがリリースされたのですがテーブル、フレームに未対応と全く使いものにな らない物だったのでNetscape Navigatorを使い続け、Netscape Communicatorにな り現在はMozilla Firefoxとなっています。昔から使ってきたということもありま すが、現在メインOSとしてGentoo Linuxを使っているためWindowsでも同じ感覚で 使えることにメリットを感じMozilla Firefoxをメインで使っています。 ■えいる ●Job:プログラマ ●Web:N/A ●Mail:mr_clifton@hotmail.com ●Team(Group):N/A ●Comment:  今回はじめて参加させていただきました。最近Ajaxのおかげで見直されている JavaScriptですが、それを利用した手法ということで自分の復習がてら書いてみ ました。いずれAjaxについてもやりたいところですが…、需要があるかは微妙で すね(汗。メールとかもらえたら嬉しいですヽ(´ー`)ノ ●使用ブラウザ:Sleipnir  スレイプニルを使っています。あまり他のブラウザと比べたことがないのです が、スクリプトやプラグインが充実してるのがいいところですねー。 ■dori ●Job:エセ解析家 ●Web:N/A ●Mail:N/A ●Team(Group):N/A ●Comment:  難しそうなことをやっているようなフリをしているだけで、実は結構簡単なこ とばかりやって人を騙くらかしているエセ解析家。私にできているということは 多分誰でもやれるはず。そんな世界にあなたも足を踏み入れてみる気はありませ んか? ●使用しているブラウザ:Sleipnir  色々使ってみた結果、個人的に気に入ってからずっとこれだけ使っている。現 在開発中の次期タブブラウザにも期待。 ■黒猫 ●Job:勉強インストラクター(塾講師) ●Web:知のくずかご。(http://d.hatena.ne.jp/EdgarPoe/) ●Mail:cherry_cherry_cherry@hotmail.com ●Team(Group):N/A ●Comment:  ロートルのためUGについていけれなくなり、現在は一般向けお笑いダイアリを 書くことと、その合間に小中学生と遊んでいる毎日。趣味は合気道(合気会二段) とウェイトトレーニング。2005年1月から合気道の稽古を再開し、やっと二段らし い動きが復活してきた。ウェイトトレーニングもベンチプレス65kg・フロントプ レス30kgまで回復。学生時代には及ばないものの、年齢よりは体力があると自分 では思っている。  精神に障害があり、ソウとウツを周期的に繰り返す。ウツがひどいときにはア ル中直前まで行ったが、現在は一日缶チューハイ1缶で何とかなる程度に酒量を節 制中。 ●主に使用しているブラウザ:Opera7.53とIE6.0.28  インターネットを始めた頃はNetscape4.7だったのが、「世界最速のブラウザ」 という謳い文句に惹かれてOperaに乗り換え。数回バージョンアップして現在に至 る。  自分のブログ「知のくずかご。」のアクセス解析を見てみると、圧倒的にIEが 多いことに気づいて自分でもレイアウト等を確認するためにIEを復活させる。複 数のブラウザを目的に併せて使い分けるのはめんどくさいため「普通はIE・特別 なときはOpera」というスタイルになって現在に至る。 ■山本洋介山 ●Job:編集ライター ●Web:bogus.jp(http://bogus.jp/) ●Mail:bogus@bogus.jp ●Team(Group):N/A ●Comment:  学校や会社のLANを覗いているとよくわからないいろいろなパケットが流れてい ます。そのあたりのよくわからないパケットの動きを解明しつつ混乱させるとい うのを想像するのが楽しいですね。実際にやると大変なことになることもあるの で注意したいものです。 ●主に使用しているブラウザ:Safari  最近Mac miniを買いました。MacOSXは気楽なUNIX+αなのでとても都合がいいで すね。 ■くろいみや ●Job:Student ●Web:Secret ●Mail:hyouja@1mg.jp ●Team(Group):N/A ●Comment:  高校一年の時、終わりかけたUGブームに巻き込まれアンチフォレンジックスの 知識を蓄える。  さらに高校三年の時夏キャンプと呼ばれるものに参加。以来一気にセキュリテ ィ界へのめり込む。  得意な分野は主にソーシャルエンジニアリングで、時々人格を変えていろんな 人に近づきに行きます。他にはmp3プレーヤ作りなど。 ●主に使用しているブラウザ:Firefox  なぜ使っているかというと、やはり軽いのと、初めて使ったときからあまり違 和感を覚えなかったからです。違和感がないっていうのが意外に人気の秘密にな っているかもしれないですね。 ■Will ●Job:Student ●Web:http://will.wbjapan.com/ ●Mail:Will_net@hotmail.co.jp ●Team(Group): Anti-WMAC ●Comment:  初めまして。時間がないゆえに、簡単な脆弱性について書かしてもらいました。 本当はMD5の元キーを解析するソフトの開発などを書くつもりでしたが、C#で作っ たらめっちゃくちゃ短いコードになって、しかも汚い…。ってなわけで、今回は ボツにしましたが、次回は何かプログラムについて書いてみたいです。Kenjiさん はC++、金床さんはJavaについて書かれているので、私はC#とVBについてでも書い てみるつもりです。 ●使用しているブラウザ:Opera8  今はOpera8を使用しています。先進的な機能があり、またバージョンが8になっ てから、FireFox並にレンダリングが早くなったので、今のところ手放せません。 広告はうざいのですが、使っているうちに気にならなくなってきました。みなさ んも一度使ってみてはどうでしょうか? ちなみに、前にFireFoxをインストール してみたのですが、起動が遅い、重い、extensionなどをいれないと機能が少ない などの理由ですぐにアンインストールしました。次のバージョンでは改善されて いるようなので、期待したいと思います。そういいながらも実はIE7の方が気にな ったりする今日この頃…。 ■理事長(Rudolph von Gartheimer) ●Job:執行統括理事長 ●Web:http://www.gartheimer.com/ ●Mail:gartheimer@hotmail.com ●Team(Group):理想推進機関 宗凶法人 愛連合 ●Comment:5/5のコミティアにて同人誌が出たりします。 詳細はこちら http://www.gartheimer.com/speziellesgeheimnis.html ●使用しているブラウザ:Sleipnir  MacOSのSafariをみてタブ型ブラウザに興味を持ちました。実際に使ってみると その便利さに驚愕。セキュリティの問題は気にしてません。気にしたところで、 もはやいたちごっこなので静観してます。 ■Kenji Aiko ●Job:Student ●Web:http://ruffnex.oc.to/kenji/ ●Mail:kenji@ruffnex.oc.to ●Team(Group):N/A ●Comment:  今回のネタは、「デバイスドライバなんて果たして読んでくれる人がいるんだ ろうか……」という不安を抱えながら書きました(^^;。読者層がいつになく狭ま りそうですが、読んでくれた方は感想とかをkenji@ruffnex.oc.to宛てに送っても らえると嬉しいです。 ●好きなブラウザ:「Mozilla Firefox」  私はいつもどおりIEでウェブサーフィンを楽しんでいた。IEのバージョンは6.0、 面倒くさいのでパッチは当てていなかった。そんなある日、突然不幸は訪れた。 某ウェブページを読み込んだIEは突然フリーズ。しかし私はあせらない。「ああ、 またブラクラか」と思い「Ctrl + Alt + Del」を押そうとしたその瞬間、一瞬だ けみえた我がPCのデスクトップにはなんと、みたこともない大量のEXEファイルが ………。「えっ?」という間もなく、ディスプレイは青くなり、キーボードは何 も受け付けない。そう「Ctrl + Alt + Del」さえも。  数秒ほど時間が流れ、ふと我に返った私は、すぐにLANケーブルをPCから抜いた。 何が起こった?………。とりあえず電源を抜き、再度Windowsを起動するが、やは りディスプレイは青いままだ。ブルースクリーンではない。ただ青いのだ。ある 程度状況を把握した私はまずデータのバックアップを最優先した。重要なファイ ルは数多くある。まずはそれを救出するのだ。すぐさまセーフモードでWindowsを 起動し、重要なファイルをまとめてネット上にアップロードする。さらに同じハ ードディスク内にあるLinuxからWindowsをマウントし、重要なファイルを救出。 万が一、これらのファイルにもなんらかのウイルスが感染されているかもしれな いので、Linux側からウイルスチェックを行った。とりあえずこれで最悪の事態は まぬがれた。  重要なファイルを救出できたことにより、ある程度の余裕がでてきた。そこで 私は考えた。一瞬みえたEXEファイルはだいたい10個弱。つまり数種類のウイルス もしくはトロイに感染していると考えた方がよい。ウイルスチェックソフトは入 れてなかったため、Windows自体は完全にアウトだろう。しかし、重要なファイル はもう救出済みだ。再インストールなんて毎度のことやっているので問題ない。 すでに瀕死のWindowsにこれ以上何かやられても、もう痛くも痒くもない。どうせ 再インストールするのだ。それよりも、どうせなら、どうやってこれが行われた のかを解析してやろう。新たなセキュリティホールだろうか。それとも既存のセ キュリティホールだろうか。ちょっとした興奮を胸に覚えながら、私は某ウェブ ページへ再度足を踏み入れることになった。「もう二度とIEを使うことはないだ ろう」という想いを抱きながら。(完) ■Aluminumovercast ●Job:Secret ●Web:Secret ●Mail:Secret ●Team(Group):Secret ■Zer0real ●Job:職業クラッカー ●Web:http://ezhack.com/ ●Mail:zer0real2000@yahoo.co.jp ●Team(Group):EZ Hackers Team ●Comment:  誘われて渋々書いてみたけどたまにはこういうのも悪くないね。  仕事の依頼などあれば、IPUSIRON宛にメール送っておいてくれ。俺の相場は、 200万〜。といってもどんな仕事でもやるわけじゃないけどな。 ■eagle0wl ●Job:Programmer ●Web:http://www.mysys.org/eagle0wl/ ●Mail:masm0wlあっとまーくhotmail.com ●Team(Group):N/A ●Comment:  WB初参加のeagle0wlです。データハウスから出ている『クラッカー・プログラ ム大全』の共著者として参加していたりします。ドゾよろしくお願いします。い ぷさんから何度かWB執筆のお誘いを頂いていながらも私の天性のサボり癖と忙し さもあって、しばらくシカトを決め続けていました。この場を借りてお詫びしま すm(_ _)m。  今回書いたネタは以前私のサイトの日記に書いたものの再利用でありますが、 WBへの寄稿にあたって娯楽的要素を加味して過激な表現を含んでいます。若干見 苦しい点も見受けられるとは思いますがご勘弁ください。  私のウェブサイト『ど〜もeagle0wlです(仮)』では、ソフトクラック技術・ アセンブリ言語関連のコンテンツを微妙に公開しています。ここしばらくは放置 気味ですが、時間に余裕が出てきたためそろそろ本腰を入れてコンテンツを拡充 していきたい所存であります。 ●使用しているブラウザ:DonutRapt  今はDonutRaptを使っていますが、その理由は単に昔から使い続けているため乗 り換えに躊躇しているというだけです。現状にとりあえず満足していれば特に新 しいツールを導入しようという気にはならないのですが、今のご時世を見るにつ れてFireFoxあたりに乗り換えようと考えています。 ■まど(MaD) ●Job:DATA HOUSE ●Web:http://www.data-house.co.jp/ ●Mail:mad@data-house.co.jp ●Team(Group):h@cksection,ruffnex ●Comment:  6月にBackSectionが復活するそうです。メンバー募集に応募したら「イケてる 精鋭部隊にするので、スキルがないとダメ」ということではじかれました(´・ω・`)。 ●お気に入りのWebブラウザ  しらん。動いたらなんでもええやん。 ■IPUSIRON ●Job:サイト更新 ●Web:http://akademeia.info/ ●Mail:ipusiron@ruffnex.oc.to ●Team(Group):h@cksection,ruffnex ●Comment:  今回は多くの人に参加してもらい、とても嬉しいです。本当に皆お疲れ様でし た。Wizard Bibleのひとつのターニングポイントになったと思います。今後とも よろしくお願いします。  『ハッカーの教科書・完全版』が5月15日あたりに発売されます。値段は高いか もしれませんが、ページ数・内容・ツール共に充実したつもりです。興味ある方 は、是非http://akademeia.info/main/books/10/を確認してみてください。 ●使用しているブラウザ:IE  セキュリティで何かと話題になるIEですが、今までずっと使ってきたこともあ って、愛用してます。本のためにスクリーンショット撮るときはデフォルトのブ ラウザであるIEでなければならないわけなので、それも影響していると思います。  ただ今回WBを編集していると、結構皆Firefoxを使っているみたいなので、イン ストールして使ってみたいと思っています。アカデメイア内の調査によると、閲 覧しているうちの74%がIE、次にFirefoxが7.1%、Netscapeが3.1%という結果にな っています。この統計情報を見た限り、Firefoxのシェアがどんどん拡大している ようですね。