『リバースエンジニアリングツールGhidra実践ガイド』サポートページ
![](/files/user/support/9784839973773/Ghidra_Cover_S.jpg)
ここは、『リバースエンジニアリングツールGhidra実践ガイド』(ISBN978-4-8399-7377-3)のサポートページです。
紙版
電子版
2020年8月26日 初版第1刷発行・電子版 ver1.00
●サンプルファイル
こちらから、「注意書きを確認しましたか」にチェックして「同意してダウンロードする」ボタンを押してダウンロードしてください。このサンプルファイルは、実行したとしても実行端末や外部の端末に影響を与えないような対策がとられていますが、できる限り、専用に構築した仮想環境上で実行してください。また、このサンプルファイルの実行や本書の内容を用いた解析などで、何らかの不具合が出たとしても、当社および執筆者は一切の責任を負いません。●訂正情報(2021/03/5更新)
第1刷
009ページ リスト1-4-4 2行目
誤:MessageBoxA(NULL, lpText, lpCaption, MB_OK);g
正:MessageBoxA(NULL, lpText, lpCaption, MB_OK);
025ページ 4行目
誤:コンパイルした日時を示すNumberOfSections
正:コンパイルした日時を示すTimeDateStamp
029ページ 表1-6-1 表タイトル
誤:Mirosoft x64 呼び出し規約のレジスタ使用規則
正:Microsoft x64 呼び出し規約のレジスタ使用規則
043ページ 13行目
誤:
・ Display EOL comments
・ Display POST comments
正:
・ Display EOL comments
・ Display Plate comments
・ Display POST comments
047ページ 下から4行目
誤:[Toggles overviw margin displays.]ボタン
正:[Toggles overview margin displays.]ボタン
048ページ 4行目
誤:[Toggles overviw margin displays.]ボタン
正:[Toggles overview margin displays.]ボタン
052ページ 6行目
誤:「Plate Comment」と「Pre Comment」だけです。
正:「Pre Comment」だけです。
052ページ 9行目
誤:[Foramt]の[String]は文字列の部分
正:[Format]の[String]は文字列の部分
056ページ 5行目
誤:Defined Stingsウィンドウ
正:Defined Stringsウィンドウ
060ページ 3行目
誤:[Post-Commnet]を追加します。
正:[Post-Commnet]を追加します。
066ページ 7行目
誤:[Format Option]が設定可能です。
正:[Format Options]が設定可能です。
067ページ 4行目
誤:[Search Strings Preview]と呼びます。
正:[Search String Preview]と呼びます。
069ページ 6行目
誤:文字列の[Strings View]、[Strings Type]、
正:文字列の[String View]、[String Type]、
070ページ 表2-5-8 表タイトル
誤:表2-5-8
正:表2-5-9
073ページ
誤:●downloader.exeの解析を終えて
正:●3-5 downloader.exeの解析を終えて
075ページ 下から2行目
誤:[Search]→[Search Memory]を開き、
正:[Search]→[Memory]を開き、
078ページ 下から3行目
誤:[Imports]ツリー配下の[URLMONDLL]をダブルクリックすると、
正:[Imports]ツリー配下の[URLMON.DLL]をダブルクリックすると、
082ページ リスト3-3-1 4行目
誤:while ((*local_8 != (undefined *)0x0 && (HVar1 = FUN_004010e0((int)local_8,local_164), HVar1 != 0)
正:while ((*local_8 != (undefined *)0x0 && (HVar1 = download_file((int)local_8,local_164), HVar1 != 0)
083ページ 8行目
誤:Listingウィンドウで表示されるコード内のlocal_8に対して
正:Decompileウィンドウで表示されるコード内のlocal_8に対して
083ページ リスト3-3-2 015行目
誤:(HVar1 = FUN_004010e0((int)local_8,local_164), HVar1 != 0))) {
正:(HVar1 = download_file((int)local_8,local_164), HVar1 != 0))) {
084ページ リスト3-3-3
誤:
HRESULT __cdecl download_file(astruct *param_1,wchar_t *param_2)
{
BOOL BVar1;
HRESULT HVar2;
FUN_004010a0(param_2,param_1->field_0x8);
BVar1 = PathFileExistsA((LPCSTR)param_2);
if (BVar1 == 1) {
HVar2 = 0;
}
else {
HVar2 = URLDownloadToFileA((LPUNKNOWN)0x0,param_1->field_0x4,(LPCSTR)param_2,0,
(LPBINDSTATUSCALLBACK)0x0);
}
return HVar2;
}
正:
HRESULT __cdecl download_file(int param_1,wchar_t *param_2)
{
BOOL BVar1;
HRESULT HVar2;
FUN_004010a0(param_2,*(int *)(param_1 + 8));
BVar1 = PathFileExistsA((LPCSTR)param_2);
if (BVar1 == 1) {
HVar2 = 0;
}
else {
HVar2 = URLDownloadToFileA((LPUNKNOWN)0x0,*(LPCSTR *)(param_1 + 4),(LPCSTR)param_2,0,
(LPBINDSTATUSCALLBACK)0x0);
}
return HVar2;
}
085ページ 5行目
誤:DataTypeは、カラムをダブルクリッック、
正:DataTypeは、カラムをダブルクリッック、
087ページ 7行目
誤:[Equate Strings]にcsidlと入力します。
正:[Equate String]にcsidlと入力します。
089ページ 下から5行目
誤:関数の引数を編集を編集していきます。
正:関数の引数を編集していきます。
090ページ 下から5行目
誤:FUN_00401140関数の呼び出し以前には、
正:FUN_004010a0関数の呼び出し以前には、
093ページ 図3-4-3 図タイトル
誤:Parse C Fileウィンドウでヘッダファイルを指定して読み込み
正:Parse C Source ウィンドウでヘッダファイルを指定して読み込み
130ページ コマンド4-3-9
誤:
>>> def get_instructions_in_func(func):
... inst = getFirstInstruction(func)
... while inst is not None:
... if getFunctionContaining(inst.getAddress()) is func:
... yield inst
... entry_func = getFirstFunction()
... insts = get_instruction_in_func(entry_func)
... for inst in insts:
... print('{} {}'.format(inst.getAddressString(True, True), inst))
正:
>>> def get_instructions_in_func(func):
... inst = getFirstInstruction(func)
... while inst is not None:
... if getFunctionContaining(inst.getAddress()) is func:
... yield inst
... inst = getInstructionAfter(inst)
... entry_func = getFirstFunction()
... insts = get_instruction_in_func(entry_func)
... for inst in insts:
... print('{} {}'.format(inst.getAddressString(True, True), inst))
133ページ 下から10行目
誤:Flat APIとGhidra APIを分けて解説していますが
正:Flat APIとScript APIを分けて解説していますが
133ページ 下から9行目
誤:Ghidra APIはFlat APIを継承しているものなので、
正:Script APIはFlat APIを継承しているものなので、
137ページ 2つ目のコマンドライン
誤:
C:¥Ghidra>cd %GHIDRA_INSTALL_DIR%¥Ghidra¥Features¥Python¥lib
C:¥tools¥ghidra_9.1.2¥Ghidra¥Features¥Python¥lib>java --illegal-access=deny -jar jython-standalone-
2.7.1.jar -m ensurepip
Collecting setuptools
Collecting pip
Installing collected packages: setuptools, pip
Successfully installed pip-9.0.1 setuptools-28.8.0
C:¥tools¥ghidra_9.1.2¥Ghidra¥Features¥Python¥lib>java --illegal-access=deny -jar jython-standalone-
2.7.1.jar -m pip --version
pip 9.0.1 from C:¥tools¥ghidra_9.1.2¥Ghidra¥Features¥Python¥lib¥Lib¥site-packages (python 2.7)
正:
C:¥Ghidra>cd %GHIDRA_INSTALL_DIR%¥Ghidra¥Features¥Python¥lib
C:¥ghidra_9.1.2¥Ghidra¥Features¥Python¥lib>java --illegal-access=deny -jar jython-standalone-
2.7.1.jar -m ensurepip
Collecting setuptools
Collecting pip
Installing collected packages: setuptools, pip
Successfully installed pip-9.0.1 setuptools-28.8.0
C:¥ghidra_9.1.2¥Ghidra¥Features¥Python¥lib>java --illegal-access=deny -jar jython-standalone-
2.7.1.jar -m pip --version
pip 9.0.1 from C:¥tools¥ghidra_9.1.2¥Ghidra¥Features¥Python¥lib¥Lib¥site-packages (python 2.7)
137ページ 3つ目のコマンドライン
誤:
C:¥tools¥ghidra_9.1.2¥Ghidra¥Features¥Python¥lib>java -jar jython-standalone-2.7.1.jar -m pip install
graphviz
...
正:
C:¥ghidra_9.1.2¥Ghidra¥Features¥Python¥lib>java -jar jython-standalone-2.7.1.jar -m pip install
graphviz
...
139ページ コマンド4-4-1
誤:
> %GHIDRA_INSTALL_DIR%¥support¥analyzeHeadless.bat C:¥Ghidra headless_project -import C:¥Ghidra¥ch02¥download
er.exe.gzf
...
INFO HEADLESS Script Paths:
C:¥Users¥john¥ghidra_scripts
C:¥tools¥ghidra_9.1.2¥Ghidra¥Features¥Base¥ghidra_scripts
(中略)
C:¥tools¥ghidra_9.1.2¥Ghidra¥Processors¥PIC¥ghidra_scripts (HeadlessAnalyzer)
INFO HEADLESS: execution starts (HeadlessAnalyzer)
INFO Creating project: C:¥Ghidra¥headless_project (HeadlessAnalyzer)
INFO Creating project: C:¥Ghidra¥headless_project (DefaultProject)
INFO REPORT: Processing input files: (HeadlessAnalyzer)
INFO project: C:¥Ghidra¥headless_project (HeadlessAnalyzer)
INFO IMPORTING: C:¥Ghidra¥ch02¥downloader.exe.gzf (HeadlessAnalyzer)
INFO REPORT: Import succeeded with language "x86:LE:32:default" and cspec "windows" for file: C:¥Ghidra¥ch02
¥downloader.exe.gzf (HeadlessAnalyzer)
INFO ANALYZING all memory and code: C:¥Ghidra¥ch02¥downloader.exe.gzf (HeadlessAnalyzer)
INFO Packed database cache: C:¥Users¥john¥AppData¥Local¥Ghidra¥packed-db-cache (PackedDatabaseCache)
INFO Windows x86 PE RTTI Analyzer> Couldn't find type info structure.
(AutoAnalysisManager)
INFO -----------------------------------------------------
ASCII Strings 0.724 secs
(中略)
x86 Constant Reference Analyzer 1.833 secs
-----------------------------------------------------
Total Time 14 secs
-----------------------------------------------------
(AutoAnalysisManager)
INFO REPORT: Analysis succeeded for file: C:¥Ghidra¥ch02¥downloader.exe.gzf (HeadlessAnalyzer)
INFO REPORT: Save succeeded for file: /downloader.exe (HeadlessAnalyzer)
正:
> %GHIDRA_INSTALL_DIR%¥support¥analyzeHeadless.bat C:¥Ghidra headless_project -import C:¥Ghidra¥ch02¥download
er.exe.gzf
...
INFO HEADLESS Script Paths:
C:¥Users¥john¥ghidra_scripts
C:¥tools¥ghidra_9.1.2¥Ghidra¥Features¥Base¥ghidra_scripts
(中略)
C:¥tools¥ghidra_9.1.2¥Ghidra¥Processors¥PIC¥ghidra_scripts (HeadlessAnalyzer)
INFO HEADLESS: execution starts (HeadlessAnalyzer)
INFO Creating project: C:¥Ghidra¥headless_project (HeadlessAnalyzer)
INFO Creating project: C:¥Ghidra¥headless_project (DefaultProject)
INFO REPORT: Processing input files: (HeadlessAnalyzer)
INFO project: C:¥Ghidra¥headless_project (HeadlessAnalyzer)
INFO IMPORTING: C:¥Ghidra¥ch02¥downloader.exe (HeadlessAnalyzer)
INFO REPORT: Import succeeded with language "x86:LE:32:default" and cspec "windows" for file: C:¥Ghidra¥ch02
¥downloader.exe.gzf (HeadlessAnalyzer)
INFO ANALYZING all memory and code: C:¥Ghidra¥ch02¥downloader.exe (HeadlessAnalyzer)
INFO Packed database cache: C:¥Users¥john¥AppData¥Local¥Ghidra¥packed-db-cache (PackedDatabaseCache)
INFO Windows x86 PE RTTI Analyzer> Couldn't find type info structure.
(AutoAnalysisManager)
INFO -----------------------------------------------------
ASCII Strings 0.724 secs
(中略)
x86 Constant Reference Analyzer 1.833 secs
-----------------------------------------------------
Total Time 14 secs
-----------------------------------------------------
(AutoAnalysisManager)
INFO REPORT: Analysis succeeded for file: C:¥Ghidra¥ch02¥downloader.exe (HeadlessAnalyzer)
INFO REPORT: Save succeeded for file: /downloader.exe (HeadlessAnalyzer)
151ページ コマンド4-4-8
誤:
(前略)
# save to file
with open(output, 'w') as fw:
fw.write(psuedo_c)
print('[*] success. save to -> {}'.format(output))
(後略)
正:
(前略)
# save to file
with open(output, 'wb') as fw:
fw.write(psuedo_c)
print('[*] success. save to -> {}'.format(output))
(後略)
175ページ 1行目
誤:11行目でencode_custom_base64関数を呼び出し、
正:10行目でencode_custom_base64関数を呼び出し、
カバー 裏表紙
誤:解析スプリプト開発など
正:解析スクリプト開発など