●実践クラッキングを行いながら読める
クラッキングの解説の大半には、クラックされることを前提として作成された本書特製の練習用プログラムCrackMe(クラックミー)を用いています。実際に体験しながらクラッカーの視点を学び、必要な知識が自然に身に付くように制作されています。
●Windows以外のOSでのクラッキング
環境構築から実践クラッキングまで、かつて情報がなかった分野においても詳細に解説を行っています。
・MacOS Xクラッキング
・PalmOSクラッキング
●リバースエンジニアリング
パスワードを探すだけがクラッキングではありません。
これぞクラッキングの真髄と言える、実践的なリバースエンジニアリングを詳細に解説しています。
・アプリケーションに機能を追加
・Winnyの解析
●内容など詳細については、上記リンクを参考にしてください、目次は制作の関係上、一部異なる箇所もありますのでご了承ください。
●内容や各種情報は随時、追加していきます。サイト掲載情報は予告なく変更、削除する場合がありますのでご了承ください。
【目次】
1章◇Windowsクラック基本
1.1◆ソフトウェアクラックで用いられるツール(TEXT◎eagle0wl)
■はじめに
■バイナリエディタ
■デバッガ
■逆アセンブラ
■デコンパイラ
■リソースエディタ
■モニタリングツール
■ファイルスキャナ
■アンパッカー
■パッチャー
■その他のツール
1.2◆クラックに必要なアセンブリ言語の基礎知識(TEXT◎muffin)
●アセンブリ言語とは
●2進数と16進数
●ビットとバイト
●正の数と負の数
●レジスタとフラグ
●OllyDbgを使用しながら命令の詳細を知る
●終わりに
1.3◆実践ソフトクラック初級編・その1(TEXT◎eagle0wl)
■はじめに
■ソフトクラックを始める前に
■OllyDbgを用いてクラッキング
■チェックルーチンを探す
■チェックルーチンをトレースする
■最後に
1.4◆Ollyのプラグイン紹介(TEXT◎DokoDon)
■j10n
■OllyDump
■CommandBar
■CleanupEx
■HideCaption
■Labeler
■WatchMan
■OllyScript
■OllyMachine
■WindowJuggler
■OllyDbg PE Dumper
■LabelMaster
■IsDebuggerPresent
■MapConv
1.5◆実践ソフトクラック初級編・その2(TEXT◎eagle0wl)
■試用期限型プロテクション
■現在時刻をどのように取得しているのか?
■OllyDbgからAPI関数呼び出しを捕捉する
■チェックルーチンをトレースする
■クラックパッチを作成する
■手軽かつ強力なエラーメッセージ参照
1.6◆OllyDbgのプラグイン作成(TEXT◎DokoDon)
■Plugin Development Kit(PDK)
■コンパイル時の注意
■コールバック関数
●ODBG_Plugindata
●ODBG_Plugininit
●ODBG_Pluginmainloop
●ODBG_Pluginsaveudd
●ODBG_Pluginuddrecord
●ODBG_Pluginmenu
●ODBG_Pluginaction
●ODBG_Pluginshortcut
●ODBG_Pluginreset
●ODBG_Pluginclose
●ODBG_Plugindestroy
●ODBG_Paused
●ODBG_Pausedex
●ODBG_Plugincmd
■プラグインサンプル
1.7◆実践ソフトクラック初級編・その3(TEXT◎eagle0wl)
■ID・パスワード型プロテクション
■シリアルナンバーを割り出す
■キージェネレータを作成する
■まとめ
■きれいなビットの並び(TEXT◎muffin)
1.8◆アセンブリ言語の理解を深める(TEXT◎muffin)
●ADDとSUBを使用するときの即値
●レジスタの値を0にする
●レジスタに-1(0FFFFFFFFh)を入れる
●0かどうかをチェックして条件ジャンプをする
●-1(FFFFFFFFh)かどうかをチェックして条件ジャンプ
●MOVZX命令を理解する
●数値をレジスタに入れる
●メモリからメモリへの代入
●IMUL命令を理解する
●LODSx命令を理解する
●文字列の終端を取得する方法
●EDXをゼロにする
●2のn乗での割り算と掛け算
●LOOP命令の書き換え
●おわりに
1.9◆SoftICE環境構築(TEXT kn0wledge)
■SoftICE環境構築
●SoftICEのインストール
■SoftICEのマクロ
■SoftICEに機能追加
●SoftICEチェック回避
●メモリダンプ機能を強化
■最後に ◆OllyDbgのよく使うショートカットリスト(TEXT◎DokoDon)
■グローバルなショートカット
●トレース系
●ウィンドウ表示系
●その他
■ディスアセンブリウィンドウのショートカット
●ブレークポイント系
●編集系
●検索・移動系
●その他
■レジスタウィンドウのショートカット
2章◇Windowsクラック応用
2.1◆VBクラック(TEXT◎Qma)
■はじめに
■ソフトクラックを始める前に
■クラッキング環境の構築
●WTKVBDEの入手とインストール
●P-Codeデコンパイラ
■WTKVBDEの使用方法
●P-Codeリスト表示部分
●スタック表示部分
●メッセージ情報部分
●各種ボタン
■WTKVBDEでのクラッキング
●ナグ表示消し
●試用期限の解除
●シリアル解析(倍直)
■さいごに
2.2◆Javaクラッキング 〜デコンパイラを使おう〜(TEXT◎eagle0wl)
■猫も杓子もJava…でしたが今は?
■通常の解析ツールが通用しない!?
■『DJ Java Decompiler』を使ってみる
■まずは下準備から
●表示フォントの変更
●デコンパイルの設定
■デコンパイラでソースを復元
■ソースを解読しよう!
■クラスファイルにパッチを当てよう
■バイトコードをスピード学習!
●何もしない命令
●int型に対する比較分岐命令
●long型の値の比較命令
●浮動小数点数の比較命令
●参照に対する比較分岐命令
■クラックパッチを作成する
■なぜJavaアプリケーションはデコンパイルされやすいのか
■最後に
2.3◆英語版ソフトの日本語化(TEXT◎Qma)
■必要なツールの準備
●リソースエディタ
●差分作成ツール
●テキストエディタ
●バイナリエディタ
●アンパッカ
■リソースの日本語化
●リソース
●リソースの変更
●差分パッチの作成
●日本語化での問題解決方法
2.4◆真のリバースエンジニアリング 〜独自機能の追加〜(TEXT◎eagle0wl)
■独自機能の追加とは?
■QuickBeに表示色のカスタマイズ機能を追加する
■まずは下準備から
■空き領域を確保する
●不要なコードやデータを削って領域を確保する
●セクションの追加による領域の確保
■面倒な処理は自作DLLに丸投げする
●MySetBkColor
●MySetTextColor
●ReadColorTable
●WriteColorTable
●ShowColorConfigWindow
■実行可能ファイルに機能追加コードを実装する
●データ領域の割り当て
●インポートテーブルを改変する
●読み込み属性の付加
●追加コードを実装する
■最後に
2.5◆Winnyのキャッシュファイルの暗号化ロジック(TEXT◎流花)
■Winnyに関する基礎知識
●Winnyの暗号に関するいくつかの記事
●解析の動機
●情報収集
●暗号とハッシュ
■下準備
●Winny2b71.zipを展開する
●Winnyの初回起動
■OllyDbgによる解析
●tElockによるコード圧縮を解除
●OllyDbgにWinny.exeを読み込む
●IsDebuggerPresentによるデバッグの防止チェックをはずす
■暗号処理がおこなわれているアドレスを探す
●興味深いASCII文字列
●ブレークポイントの設定
●推理によるブレークポイントの選別
■Winnyキャッシュファイルの構造
●しかけたブレークポイントでの値の変化の意味
●OllyDbgで見るキャッシュファイルの情報
●終わりに
2.6◆PEファイルフォーマット(TEXT◎DokoDon)
■PEファイルフォーマットの概要
■PEファイルフォーマットの構造
■MZヘッダ
■PEヘッダ
●Signature
●FileHeader
●OptionalHeader
■PEファイルのヘッダを調べる
●OllyDbgで調べる
●Stirlingで調べる
●PEToolsで調べる
■セクションテーブル(セクションヘッダ)
■セクション
●OriginalFirstThunk
●Name
●FirstThunk
●Name
●Base
●NumberOfFunction
●NumberOfNames
●AddressOfFunctions
●AddressOfNames
●AddressOfNameOrdinals
●リソースディレクトリ
●リソースディレクトリエントリ
●リソースデータエントリ
■おわりに
2.7◆アンパック(TEXT◎DokoDon)
■はじめに
■パッカーとは
■パッカーはなにをするのか
■アンパック
●ステップ1:オリジナルエントリポイントを探す
●ステップ2:メモリイメージをダンプする
●ステップ3:インポートアドレステーブルを再構築する
■実践アンパッキング
●UPX
●FSG
●tElock
■最後に
2.8◆エクセルのパスワード(TEXT◎dori)
■始めに
■エクセルの各種保護機能
■前準備
■実践(ブック形式)
●マクロのないブック
●マクロが記述されているブック
●起動後にメニューを表示しないもの
●メニューなどを変更するマクロがあるソフトの危険性と簡単な対処法
●ダイアログベースのソフト
●デバッグの方法
■VBAProjectのパスワード解除(デバッガ使用)
●VBAProjectのパスワード解除(ツール使用)
●VBAProjectのパスワード変更(DBGとGCの上書き)
●Excel97で保存されたファイルの場合
●Excel2000以降で保存されたファイルの場合
●VBAProjectのパスワード解除(0D0A→0000)
●VBAProjectのパスワード解除(その他)
2.9◆耐タンパー・難読化技術(TEXT◎eagle0wl)
■はじめに
■なぜリバースエンジニアリングを防ぐ技術が必要か
■耐タンパー化技術とは
■耐タンパー化技術で最も熱い「難読化」とは?
●関数名・変数名の置き換え
●ダミーコードの挿入
●制御フローの複雑化
■耐タンパー化・難読化は悪の技術か
3章◇Macクラック
3.1◆Mac OS Xのクラッキング(TEXT◎Qma)
■クラッキング環境の構築
■開発環境の入手とインストール
●Developer Toolsの入手
●Developer Toolsのインストール
●Developer Toolsのツール
●フリーで使えるクラッキングツール関係
■Crack Meの作成
●プロジェクトの作成
●ユーザーインターフェースの作成
●Crack Meソースコードの作成
●Crack Meのビルド
●Crack Meのローカライズ化
●プロジェクトの作成
●ユーザーインターフェースの作成
●Crack Meソースコードの作成
●Crack Meのビルド
■Crack Meの解析
●単純文字列比較Crack Meの解析
●演算シリアルCrack Meの解析
■さいごに
4章◇Palmクラック
4.1◆Palm解析(TEXT◎dori)
■始めに
●Palm OS Simulatorのダウンロード
●Palm OS Simulatorの使用方法
●Palm OS Simulatorでの文字入力
●Palm OS Simulatorの終了方法
●Palm OS Simulatorの使用方法の補足
●Palm OS Emulatorの説明
●Palm OS Emulatorのダウンロード
●Palm OS EmulatorのROMイメージ
●Palm OS Emulatorの使用方法
●Palm OS Emulatorの使用方法の補足
●ソニー クリエ(CLIE)のエミュレータ
●2進と16進
●バイトとビット
●エンディアン
●レジスタ
●レジスタのサイズ
●レジスタへのアクセス
●負の値の扱い方
●プログラム命令
●主要な命令
●アドレッシングモード
4.2◆crackme_1の解析(TEXT◎dori)
●逆アセンブラによる解析
●デバッガによる解析
●southDebuggerを用いての解析
●Palm Debuggerを用いての解析
4.3◆crackme_2の解析(TEXT◎dori)
●パッチの当て方
●シリアル解析
●倍直
4.4◆crackme_3の解析(TEXT◎dori)
4.5◆crackme_4の解析(TEXT◎dori)
●日付制限
●補足
4.6◆crackme_5の解析(TEXT◎dori)
4.7◆PWCPP(パッチャー)の使い方(TEXT◎dori)
4.8◆解析の補足(TEXT◎dori)
●Palm大手サイト
●解析豆知識
4.9◆デバッガ(TEXT◎dori)
●Palm OS Emulator
●Palm OS Simulator
●デバッガリファレンス
●Palm Debuggerの使い方
●Palm Debufferの使い方
●SouthDebuggerの使い方
4.10◆開発環境の構築(TEXT◎dori)
●コンパイルのテスト
●別バージョンのPalm OS SDKを使用する場合
●Palm OS SDKの過去のバージョン
●過去のソースをコンパイルする場合の注意点
●CLIE Programing
5章◇リファレンス
5.1◆x86アセンブリ言語リファレンス(TEXT◎muffin)
■このリファレンスの読み方
●略語
●その他の表現方法
■フラグ
●CF
●PF
●ZF
●OF
●DF
■x86命令リファレンス
●ADD - 加算
●AND - 論理積
●BSWAP - バイトスワップ
●CALL - サブルーチンの呼び出し
●CLC - キャリーフラグのクリア
●CLD - ディレクションフラグのクリア
●CMP - 比較
●DEC - 1を減算する
●DIV - 符号なし除算
●ENTER - スタックフレームの作成
●IDIV - 符号付き除算
●IMUL - 符号付き乗算
●INC - 1を加算する
●INT - 割り込み命令
●Jcc - 条件ジャンプ
●JMP - 無条件ジャンプ
●LEA - 実効アドレスの取得
●LEAVE - スタックフレームの解除
●LODSB/W/D - 文字列のロード
●LOOP - ループ
●MOV - 転送命令
●MOVSB/W/D - 文字列の移動
●MUL - 符号なし乗算
●NEG - 2の補数(符号の反転)
●NOP - No Operation(何もしない)
●NOT - 否定演算
●OR - 論理和演算
●POP - スタックから値をロードする
●POPAD - スタックからすべての汎用レジスタの値をロードする
●PUSH - スタックに値をストアする
●PUSHAD - スタックにすべての汎用レジスタの値をストアする
●REP/REPE/REPNE/REPZ/REPNZ - ストリング命令の繰り返し
●RET - プロシージャからの復帰
●RCL - キャリーを含めた左回転
●RCR - キャリーを含めた右回転
●ROL - 左回転
●ROR - 右回転
●SAL - 算術的左シフト
●SAR - 算術的右シフト
●SHL - 論理的左シフト
●SHR - 論理的右シフト
●STC - キャリーフラグをセットする
●STD - ディレクションフラグをセットする
●STOSB/W/D - 文字列のストア
●SUB - 減算
●TEST - 論理的比較
●XCHG - 値の交換
●XOR - 排他的論理和
5.2◆10進数、2進数、16進数の対応表(TEXT◎muffin)
5.3◆5.3:きれいなビットの並び(TEXT◎muffin)
5.4◆Win32API関数リファレンス(TEXT◎eagle0wl)
■注意
●CreateFile(A/W)
●CreateMutex(A/W)
●CreateThread
●DialogBoxParam(A/W)
●EnableWindow
●EnumWindows
●FindWindow(A/W)
●GetClassName(A/W)
●GetDlgItemInt
●GetDlgItemText(A/W)
●GetDriveType(A/W)
●GetFileSize
●GetLocalTime
●GetLogicalDrives
●GetLogicalDriveStrings(A/W)
●GetPrivateProfileInt(A/W)
●GetPrivateProfileString(A/W)
●GetProcAddress
●GetSystemTime
●GetVersionEx(A/W)
●GetVolumeInformation(A/W)
●GetWindowText(A/W)
●GlobalAlloc
●IsDebuggerPresent
●LoadLibrary(A/W)
●lstrcat(A/W)
●lstrcmp(A/W)
●lstrcpyn(A/W)
●lstrlen(A/W)
●MessageBeep
●MessageBox(A/W)
●ReadFileEx(A/W)
●RegOpenKeyEx(A/W)
●RegQueryValueEx(A/W)
●ResumeThread
●Sleep
●VirtualAlloc
●wsprintf(A/W)
5.5◆OllyDbgのよく使うショートカットリスト(TEXT@DokoDon)
5.6◆CP932コード表(TEXT@流花)
■CP932コード
5.7◆MacsBug Plugin コマンド一覧(TEXT◎Qma)
■B
■D
■F
■G
■I
■M
■S
■T
5.8◆クラッカー用語集(TEXT◎eagle0wl)
■記号
■アルファベット
■あ行
■か行
■さ行
■た行
■な行
■は行
■ま行
■ら行
>>TOP
|