@port139 Blog

基本的にはデジタル・フォレンジックの技術について取り扱っていますが、記載内容には高確率で誤りが含まれる可能性があります。

Android で LINE のバックアップを作成する(1)

adb backup でアプリケーションのバックアップを取るのではなく、アプリケーションが個別に持っているバックアップ機能によりバックアップを取ることも出来ます。

例えば LINE であれば、指定したトークルームのメッセージをバックアップする事が出来ます。

トーク履歴をバックアップ(保存)するには?
http://help.line.me/line/android/categoryId/10000336/pc?lang=ja

各トークルーム毎にバックアップを指示する必要がある点がやや面倒ですが、バックアップの種類としては以下の二種類がある事が上記HELPで解説されています。

※[すべてバックアップ]を行うとトークルームでトーク履歴を復元することができます。
※[テキストでバックアップ]を行った場合、画像は保存・復元されません。

普通に考えると、リストア可能な[すべてバックアップ]を選択する事になると思います。

実際に Android 端末上で操作を行うと、バックアップの選択肢として上記 2つのメニューが表示されます。テキストでバックアップが上に表示されていますので先にテキストでバックアップを試してみます。

[テキストでバックアップ]を開始すると、処理が実行され完了するとアプリケーションの選択画面が表示されます。例えば GMAIL を選択すると、トーク内容のテキストファイルをメールに添付して指定アドレス宛に送ることができます。(ちなみにテキストファイルの文字コードは UTF-8 ですが、文字によっては󾭛になるケースもあるようですね)

手元のAndroid 4.4 ではアプリケーションの選択肢として、 SD カードへ保存する項目の表示がありませんでした。この部分は Android のバージョンに依存する項目かもしれません。Android 4.4 からは SD カードへの書き込みが制限されてますので、それ以前のバージョンでは SD カードの項目が表示されたりするかもしれませんが、未確認です。

テキストでバックアップを選択した場合、バックアップされるトークメッセージのテキストは下記のような形になります。(遡れる範囲は端末上に残っているデータに依存)

2014/06/07(土)
18:02 hoge いま新宿これから帰るよー
18:02 fuga [スタンプ]
18:03 fuga [画像]
18:03 hoge お疲れちゃん

スタンプや画像は文字列だけになりますので、実際にどのようなスタンプや画像だったのかはこれでは分からなくなりますね。

Android端末を MTP モードで PC に接続し、内蔵ストレージに自動的に作成されている「LINE_Backup」フォルダを確認してみましたが、テキストでバックアップを行ってもこのフォルダ配下にはデータは残らない状況です。

このため、テキストでバックアップを実行し、作成したテキストデータをどのアプリケーションに行わせるかの選択画面でキャンセルしてしまうとバックアップは何も残ってない状況になりますね。

 

adb backup で Android 端末のバックアップを作成する(14)

adb backup では個別のファイルを指定してバックアップを取ることはできません。adb コマンドには pull コマンドがありますので、個別ファイルは adb pull コマンドを使うことで取得できます。

しかし、コマンドラインから対象ファイルのフルパスを指定する必要があり、あまり使い勝手が良いとは言えない印象が個人的にはあります。*1

 

エクスプローラのような GUI ベースでファイルを閲覧してファイルをコピーできると便利だと思いその様なツールを探してみたところ、これが意外に厄介である事に気が付きました。

まず、SDK のToolsフォルダにある DDMS を呼び出し、File explorer を使う方法があるかと思います。File Exploere を使うと GUI ベースでツリー構造を表示してくれます。アクセス権が無いフォルダ配下にあるファイルは表示されません。Root 権限が無い状況では、かなり限定された範囲でのみアクセス可能です。

DDMS の File Exploere には、ファイルのコピー機能があり、フォルダを指定すれば一括してそのフォルダ配下にあるファイルをWindows 上の指定フォルダ配下にコピーする事が可能です。ただし、問題が一つあり日本語文字列を含むファイル名が対象フォルダ配下に存在すると、そのファイルのコピー時点でコピー処理が中断・終了されてしまいます。

対象フォルダ配下に日本語を含むファイルがなければ、フォルダ構造を維持してコピーする事ができるので便利ですが、途中で終了したのか、正常に全てコピーが終わって終了したのかを判断することが確認できません。(コピー途中に日本語ファイル名があると、そこでコピー操作が終了し特にエラーなどは表示されません)

これは、日本語文字列を含むファイルを個別に指定してコピーを取ろうとした場合にも発生するので、気になる方は簡単に試せるかと思います。コピー先として指定したフォルダに何もファイルが出来ないはずです。

 

また、Facebook のタイムラインで知ったのですが、Windows 上で adb pull コマンドを使い日本語文字列を含むファイルをコピーしようとした場合、ファイル名部分が文字化けするようですね。

Android では UTF-8 でファイル名が管理されているようですが、Windows 側のコンソールを CHCP コマンドで UTF-8(65001)に切り替え、日本語を含むファイル名を正しく表示できたとしても、出力先のファイルシステム側は UTF-16LE ですので、文字コードが一致せずに化けることになるようです。

Googleで少し検索してみたところ、ドイツ語でもウムラウトを含む文字列では問題になるようで似たような話題が出ていました。残念ながらこの部分については解決策を発見する事ができず、UTF-8 でそのまま扱える環境で操作した方が簡単そうです。(adb backup の対象範囲であれば adb backup した方が早い気もしますが)

 

さて、他に GUI ベースで adb コマンドを操作できるツールがないかGoogleで検索してみたところ、QtADB というツールを発見し早速使ってみました、結果としては、残念ながら手元では肝心のファイルリストを表示することが出来ませんでした。

QtADB
http://qtadb.wordpress.com/

今のところ発見できていませんが、文字コードを意識して UTF-8 のファイル名を適切に Windows 上で扱ってくれるツールがあれば、ファイル名が化けずにコピーできるようになるので嬉しいですね。

 

*1:Windowsにデバイスを接続し MTP 経由でアクセス可能なファイルであれば問題ありませんが、それ以外でアクセス可能な範囲にあるファイルの場合には pull コマンドを使う事になりますね。

adb backup で Android 端末のバックアップを作成する(13)

Androidデバイスの内蔵ストレージとSDカードのデータをバックするのに、adb backup -shared オプションを使わずとも、PC に USB ケーブルで MTP(Media Transfer Protocol) モードで接続すれば Windows 上のエクスプローラから簡単にアクセスすることができます。

USBデバイスの接続モードには幾つか種類がありますが、Mass Storage Class で接続すると内蔵ストレージにはアクセスできません。SDカードについて論理ドライブが割り当てられてアクセスできます。

Wikiの記述によると、Android は API Level 12 から MTP がサポートされているようで、手元の 4.4.2 でも(もちろん)MTP での接続が可能です。*1

 

MTPモードで接続した場合、エクスプローラからはアクセス可能になりますが、論理ドライブを割り当てて robocopy などコマンドプロンプト経由でコピーするというのは難しそうです。少し検索してみたところでは、MTPモードで接続したデバイスを論理ドライブにマッピングする方法は発見できませんでした。 

下記 SANS の資料によると、MTP デバイス上のファイルを直接開いた場合、Windows 7 では Temp フォルダ配下に  WPDNSE フォルダが作成され、そこにファイルが一時的に置かれるようですが、手元の Windows 8.1 ではこの資料のような動作になっていませんでした。

USB Devices and Media Transfer Protocol

https://digital-forensics.sans.org/summit-archives/dfir14/USB_Devices_and_Media_Transfer_Protocol_Nicole_Ibrahim.pdf

 例えば PDF を開いた場合には下記フォルダに一時的なファイルが作成されていました。

C:\Users\port139\AppData\Local\Microsoft\Windows\INetCache\IE\PLO0Q839\1401.6444v1[1].pdf

いずれにしても、バックアップを取るという目的の場合には、直接ファイルを開くのではなく、ローカルへコピーを取ってから操作を行う事になるかとは思います。

エクスプローラ経由でファイルをコピーした場合、作成日時はコピーした日時になりますが、ファイルの最終更新日時は元ファイルの日付が維持されてコピーされます。(秒レベルまでの精度で、仮にそれ以下の精度のタイムスタンプ値がコピー元ファイルシステム側にはあったとしても、取ってこないと思いますが)

 

*1:デバイス側でUSBデバッグモードは事前に切っておく必要があります。

adb backup で Android 端末のバックアップを作成する(12)

Content Provider 経由でアクセス可能な標準的なデータのバックアップを取る方法として、アプリケーションをインストールし、アプリケーション経由でデータをコピーする方法も案としてはあります。

HOWTO: Use AFLogical OSE for Logical Forensics of an Android Device
https://santoku-linux.com/howto/howto-use-aflogical-ose-logical-forensics-android

Santoku Linux に含まれている AFLogical OSE は、個別にも APK 形式で提供されているもので、対象デバイスにインストールして使う事が出来、MMS, SMS, Contacts, Call Logs をコピーする事ができます。とはいえ、最終更新が 2011年12月のアプリケーションですので、4.4.2 環境でどこまで使えるのか?という懸念点もありますので、試してみたいと思います。(SDカードへの出力で制限されないの?という素朴な疑問)

AFLogical-OSE_1.5.2.zip — Build v1.5.2 of AFLogical Open Source Edition
https://github.com/viaforensics/android-forensics/downloads

ZIPファイルをダウンロードし、展開すると APK ファイルを確認できます。

adb install コマンドを使ってアプリケーションをインストールします。

>adb install AFLogical-OSE_1.5.2.apk
1974 KB/s (28794 bytes in 0.014s)
pkg: /data/local/tmp/AFLogical-OSE_1.5.2.apk
Success

提供元不明のアプリ、の設定はチェックしていませんがインストールはそのまま可能でした。

アプリケーションの一覧に AFlogical OSE のアイコンが出来ていますので、これをタップして実行します、コピー対象の項目一覧が出ます。デフォルトでCallLog Calls、Contacts Phones、MMS、MMSParts、SMSがチェックされた状態です。

Capture を実行すれば開始され、「Data extraction completed」という表示が出て完了とかなりシンプルな作りです。

データは /sdcard/forensics/フォルダ配下に日時でフォルダが作成され、ファイルが出力されます。

-rw-rw---- root sdcard_r 230 2014-07-10 09:21 CallLog Calls.csv
-rw-rw---- root sdcard_r 338 2014-07-10 09:21 Contacts Phones.csv
-rw-rw---- root sdcard_r 247 2014-07-10 09:21 MMS.csv
-rw-rw---- root sdcard_r 62 2014-07-10 09:21 MMSParts.csv
-rw-rw---- root sdcard_r 758 2014-07-10 09:21 SMS.csv
-rw-rw---- root sdcard_r 255082 2014-07-10 09:21 info.xml

手元の Xperia Ultra Z ではこの forensics フォルダは SD カードではなく、内蔵ストレージに作られていましたので、この辺りは注意が必要なのかもしれません。

 設計の古さによるものかとは思いますが、取得できるデータ範囲もかなり限定的ですので、adb shell content コマンド経由でアクセスする方がよさそうですね。

 

 

adb backup で Android 端末のバックアップを作成する(11)

adb backup で取れないデータについても、Content Provider 経由でデータをバックアップする事ができる場合があります。

Facebook のほうで知ったのですが、adb shell conetnt コマンドというものがあり、このコマンド経由でアクセスする事が出来るようです。

Android:contentコマンドでContentProviderを呼び出す

http://yuki312.blogspot.jp/2013/02/androidcontentcontentproviderdb.html

adb shell content コマンドを使うには、対象としている ContentURI を指定する必要があります。

Content URIs
http://developer.android.com/guide/topics/providers/content-provider-basics.html#ContentURIs

上記のWeb では例として content://user_dictionary/words が書かれていますが、この場合 Words の部分がテーブルになります。対象に複数のテーブルがあるようなケースでは、それぞれ毎に URI が決まってくるという仕組みのようです。

例えば、カレンダーのeventsテーブルに対するクエリは以下の構文になります。

adb shell content query --uri content://com.android.calendar/events

adb backup で取得しているSQLite のデータベースファイルを確認してみると、events テーブルの内容が読み込まれている事が分かります。カレンダーは adb backup 経由でバックアップされ、apps\com.android.providers.calendar\db 配下にファイルがあるのでこの方法を取る必要はないと思いますが、動きを確認するには便利なデータだと思います。上記の URI では com.android.calendar ですが、DB 自体のパスは com.android.providers.calendar と異なる点も興味深いところです。

他にもカレンダー関連のテーブルは複数ありますが、下記もクエリを実行することが出来ます。

adb shell content query --uri content://com.android.calendar/attendees
adb shell content query --uri content://com.android.calendar/calendar_alerts
adb shell content query --uri content://com.android.calendar/event_entities
adb shell content query --uri content://com.android.calendar/reminders

どの様なコンテントプロバイダーがあるか、使えそうかを判断するのに、下記のアプリケーションを使うと便利です。検索機能もあります。

Content Provider Helper
https://play.google.com/store/apps/details?id=com.jensdriller.contentproviderhelper&hl=ja

デフォルトで提供されている URI についても同じく Content Provider Helper のプロジェクトページに記載があります。 

Content Provider Helper
https://github.com/jenzz/ContentProviderHelper
The following content providers are provided by default:

content://browser/bookmarks
content://browser/searches
content://call_log/calls
content://com.android.calendar/attendees
content://com.android.calendar/calendar_alerts
content://com.android.calendar/calendars
content://com.android.calendar/event_entities
content://com.android.calendar/events
content://com.android.calendar/reminders
content://com.android.contacts/aggregation_exceptions
content://com.android.contacts/contacts
content://com.android.contacts/data
content://com.android.contacts/groups
content://com.android.contacts/raw_contact_entities
content://com.android.contacts/raw_contacts
content://com.android.contacts/settings
content://com.android.contacts/status_updates
content://com.android.contacts/syncstate
content://drm/audio
content://drm/images
content://icc/adn
content://icc/fdn
content://icc/sdn
content://media/external/audio/albums
content://media/external/audio/artists
content://media/external/audio/genres
content://media/external/audio/media
content://media/external/audio/playlists
content://media/external/images/media
content://media/external/images/thumbnails
content://media/external/video/media
content://media/external/video/thumbnails
content://media/internal/audio/albums
content://media/internal/audio/artists
content://media/internal/audio/genres
content://media/internal/audio/media
content://media/internal/audio/playlists
content://media/internal/images/media
content://media/internal/images/thumbnails
content://media/internal/video/media
content://media/internal/video/thumbnails
content://mms
content://mms/inbox
content://mms/outbox
content://mms/part
content://mms/sent
content://mms-sms/conversations
content://mms-sms/draft
content://mms-sms/locked
content://mms-sms/search
content://settings/secure
content://settings/system
content://sms/conversations
content://sms/draft
content://sms/inbox
content://sms/outbox
content://sms/sent
content://telephony/carriers
content://user_dictionary/words

これら以外に、アプリケーションが独自に持っているものは個別に調べていく必要がありますが、指定してもエラーになる事が多いので、実際に対象アプリケーションからデータを取り出してバックアップできるかはアプリケーション次第でしょうか。 

 

Get a list of available Content Providers
http://stackoverflow.com/questions/2001590/get-a-list-of-available-content-providers

 

 

adb backup で Android 端末のバックアップを作成する(10)

adb backup コマンドによるバックアップでは、root を取得しているわけではありませんので、バックアップされていないデータも存在するようです。基本的な部分として、SMSやカレンダー、コンタクトが含まれてこないと下記では注記があります。

Full Backup of non-rooted devices
http://android.stackexchange.com/questions/28296/full-backup-of-non-rooted-devices
NOTE: This solution will not back up and restore contact, SMS or calendar information

 試しに、adb backup -apk -system -all でバックアップを作成し、その内容を確認してみたいと思います。

まず、SMS ですが、デバイス内では下記に SMS の DB ファイルがあります。

/data/data/com.android.providers.telephony/databases/mmssms.db

バックアップファイルを tar に変換・展開して確認してみたところ、バックアップ内にcom.android.providers.telephonyフォルダがあり、DBファイルも確認できました。SQLite Manager で DB を開いて確認した範囲ではメッセージも確認できましたので、4.4.2 の段階では取れているように見えますね。(Kitkatからデフォルトのパスが変更になったようですね)*1

 

次に Calendar を確認してみます。バックアップの tar ファイルを展開して確認してみたところ、apps\com.android.providers.calendar\db フォルダ配下に DB ファイルがありました。こちらもDBファイルの内容を確認したところEventsテーブルで内容を確認する事ができました。

 

最後に連絡先(Contacts)ですが、これはバックアップ内には無いようです。パッケージのパスを確認したところ、 priv-app 配下ですのでバックアップ対象外になっていますね。

package:/system/priv-app/SemcContactsProvider.apk=com.android.providers.contacts

 

 

 

adb backup で Android 端末のバックアップを作成する(9)

adb backup の -shared オプションですが、内蔵ストレージ、SDカード含めストレージのバックアップを取る事ができる点は便利なのですが、古いバージョンでは不具合があったり少し注意が必要なオプションです。

十分確認できていないのですが、Andrillerの作者がTwitterでAB経由でサイズの問題があったので修正したってコメントを書いてましたので、このあたりは使うツールによっても色々とあるのかもしれません。

また、Android 4 系では、SDカードへのアプリケーションのインストール自体が制限されているようですので、アプリケーションのバックアップという点だけで見た場合にはそれほど大きな意味はないかもしれません。

次に Android 4.4.x(KitKat)では、SDカードへのアプリケーションからの書き込みも制限という事のようですね。

KitKat端末では今後アプリからMicro SDカードへの書き込みができくなる模様
http://juggly.cn/archives/106598.html

Android 4.4でSDカードにファイルを書き込む
http://qiita.com/ariarijp/items/aa365ff47b6e572be3d4

試しに、手元の Android 4.4.2 で写真を撮り保存先としては内蔵ストレージを指定しておきます。次にSDカードへの移動またはコピーをしようとして写真を使って従来の共有のメニューから SD カードを指定する方法は取れないように見えます。

手元の Android は 4.4.2 ですので、標準でインストールされている File Commander を使った場合には、コピー&ペーストにより SD カード上のメディアにコピーする事ができました。

SDカードに写真データがある状態で、adb backup -shared -all コマンドを実行し、作成できた .ad ファイルを tar へ変換・展開して中身を確認してみます。

手元の Android は Xperia Ultra Z ですが、tar を展開すると shared フォルダ配下に 0 と 1 の二つのフォルダが作成されています。

フォルダ 0 が内蔵ストレージで、フォルダ 1 が SD カードという事になります。

保存しているデータ容量に依存しますが、例えば手元では(暗号化なしの状態)約 6GBのバックアップファイルが作成されました。

残念ながら手元の Experia Ultra Z ではマルチユーザーモードが使えない為、マルチユーザーモードでのストレージのバックアップがどうなるかは未確認です。

 

 

adb backup で Android 端末のバックアップを作成する(8)

adb backup のオプションには -shared | -noshared があり、SDカード内データのバックアップを指定できます。

Android Backup Extractor の Readme.txt には下記記述があり、どうやら古いバージョン?のバックアップには問題があるようです。

Creating a backup with -shared flag has know issues (corruption)

具体的にどのバージョン段階でのお話か記述がないのですが、Googleで検索してみたところ下記のツールがありました。このツールではバージョン 4.0.4/4.0.4 では破損状況になる(データは大丈夫)という事のようですね。

rebuild-adb-backup
https://github.com/rmgrimm/rebuild-adb-backup

This program aims to rebuild ADB backup files that were corrupted by --shared on Android versions 4.0.3 / 4.0.4.

The corrupt ADB backup files are still fully usable and contain no data loss. Instead, the problem is that an uncompressed chunk of data is written to the file directly -- bypassing any encryption and all compression. Additionally, this happens before the encryption/compression are able to finish writing out the compressed data which causes decryption and inflation routines to fail.

 他にも Google で adb backup shared issues などで検索すると、4.2 段階でも既知の不具合があるといった情報があったりしますので、古いバージョンの 4 系を使っているケースでは、shared オプションの指定は避けた方が無難かもしれませんね。

もしくは、展開できるのを確認した上でオプションを付与するかですが。。。

 

adb backup で Android 端末のバックアップを作成する(7)

adb backup のオプションで パッケージ名を指定する事で、個別アプリケーションのバックアップを行う事ができます。

デバイス内のアプリケーションを確認するには、adb shell pm list packages コマンドを使うことが出来ます。下記では -3オプションによりサードパーティのアプリケーションにリストを絞っています。

c:\adt-bundle-windows-x86_64-20140624\sdk\platform-tools>adb shell pm list packages -3
package:com.linkedin.android
package:com.sonymobile.comicpirate
package:com.akazoo.music
package:jp.co.netvision.WifiConnectWI2
package:com.qoowaa.act
package:com.sonyericsson.trackid
package:jp.co.yahoo.android.yjtop
package:com.sonyericsson.androidapp.recorder
package:com.apalon.calculator.gp
package:com.evernote
package:la.droid.qr
package:com.hulu.plus.jp
package:jp.naver.line.android
package:de.gavitec.semc
package:jp.co.yahoo.android.apps.transit
package:com.sonymobile.androidapp.diagnostics
package:com.pixlr.express
package:com.ntt.voip.android.com050plus
package:jp.radiko.Player
package:com.mobisystems.office
package:com.whatsapp
package:wni.WeathernewsTouch.jp
package:com.twitter.android
package:jp.ad.iij.couponswitch
package:com.box.android
package:Unyverse.sony
package:com.facebook.orca
package:com.sony.gsmguxmk.xperiaprivilege2012
package:com.sony.playmemories.mobile
package:com.sony.tvsideview.phone

バックアップしたいアプリケーションを確認した後、adb backup コマンドでパッケージを指定してバックアップします。(Protectedの場合には、この方法ではバックアップは取れませんが)

例えば以下のようにパッケージ名を指定して実行します。

c:\adt-bundle-windows-x86_64-20140624\sdk\platform-tools>adb backup -apk -obb jp.naver.line.android
Now unlock your device and confirm the backup operation.

作成されたバックアップファイルを android backup extractor で tar 形式データに変換・展開すると、該当パッケージのフォルダのみが出力されている事を確認できます。

 

android backup extractor にはバックアップファイルを分割する sh スクリプトも含まれています。adb-split.sh を使うことでバックアップファイルをパッケージ毎に分割して出力してくれます。(先にCygwin環境にstar.exeをコピーしておく必要があります)

adb backup -apk -obb -all

バックアップを作成して、スクリプトを実行してみますがstarコマンドでこけました。

$ sh adb-split.sh backup.ab
Extracting ab archive...
Strong AES encryption allowed
Magic: ANDROID BACKUP
Version: 1
Compressed: 1
Algorithm: none
747075584 bytes written to backup.ab.tar.
Done
Extracting tar archive...
Done
Checking for apps folder...
Done
Checking if apps folder is not empty...
Done
Generating list of contents for each app...
Done
Creating individual tar archives...
star compression failed at android. Aborting.

 手元ではCygwin64 を使っていたのですが、32bit 版に変更してから実行してみたところ、問題なくパッケージ毎に分割されたバックアップファイルが作成できました。

$ sh adb-split.sh backup.ab
Extracting ab archive...
Strong AES encryption allowed
Magic: ANDROID BACKUP
Version: 1
Compressed: 1
Algorithm: none
747075584 bytes written to backup.ab.tar.
Done
Extracting tar archive...
cygwin warning:
MS-DOS style path detected: /cygdrive/c/backup/apps/com.google.android.apps.plus/sp/mm_utils\0.xml
Preferred POSIX equivalent is: /cygdrive/c/backup/apps/com.google.android.apps.plus/sp/mm_utils/0.xml
CYGWIN environment variable option "nodosfilewarning" turns off this warning.
Consult the user's guide for more details about POSIX paths:
http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
Done
Checking for apps folder...
Done
Checking if apps folder is not empty...
Done
Generating list of contents for each app...
Done
Creating individual tar archives...
Done
Creating individual adb backups...
Done
Checking for apk existence...
Warning: apk not found in android
Warning: apk not found in com.android.apps.tag

Warning: apk not found in com.sonymobile.twitter.account
Warning: apk not found in com.svox.pico
Warning: apk not found in com.vmware.mvp.enabled
There are one or more apk missing. Generating apk-missing.html
Cleaning temporal files...
Done
Backup splitting complete.

 APKファイルが無いパッケージについては、apk-missing.html というファイルが生成されていますので、そちらで確認する事ができます。

 

雑談: 週末読書 7/20

今週は「シャーロック・ホームズの思考術」を図書館で借りてきて読んでいました。この本も残念ながらKindle版がないのですが、内容的にはブラックスワンと同じく何度も読み返し、よく考える必要がある本ですね。 

シャーロック・ホームズの思考術

シャーロック・ホームズの思考術

 

 内容としては、シャーロックホームズを題材に、脳における追認バイアスをどう扱うべきか、どう観察し考えるか?という点をかなり詳細に説明しています。最初は謎解きの説明かと思って読み始めたのですが、そうではなくむしろブラックスワンの内容に近いと感じますし、実際タレブ氏の名前も出てきます。

この本が面白いのは、追認バイアスを避けて考える為にはどうすればよいのか?といった点について色々と解説されている点でしょうか。ホームズを題材としてはいますが、脳が勝手に考える間違いにどう対抗すべきか?ということが主題のようにも思えます。

この書籍では「ワトスン・システム」と「ホームズ・システム」という二つの考え方について解説しており、章によっては練習問題?みたいなものが出てきます。

自分がやった練習問題はどれも間違えて「ワトスン・システム」による考え方になってしまいました。なかなかホームズのように考えることは出来ない、ということが良く分かります(笑)

シャーロック・ホームズの物語からの引用部分もかなりあり、ついついそちらのお話を再度読み直したくなります。この本を読み進めては正典を読んで楽しみ、再びこの本に戻るという読み方になってしまいましたが、久しぶりに読むシャーロック・ホームズはやはり面白いですね。

 この本で正典として参照している内容としては以下などがありますので、手元に置いておくとこの本は読み進めやすいと思います。個人的には新潮文庫のを揃えていますが、いまだと青空文庫ふくめ色々と種類がありますね。

緋色の研究 (新潮文庫)

緋色の研究 (新潮文庫)

 

   

四つの署名 (新潮文庫)

四つの署名 (新潮文庫)

 

  

バスカヴィル家の犬 (新潮文庫)

バスカヴィル家の犬 (新潮文庫)

 

  

シャーロック・ホームズ最後の挨拶 (新潮文庫)

シャーロック・ホームズ最後の挨拶 (新潮文庫)

 

  

シャーロック・ホームズの冒険 (新潮文庫)

シャーロック・ホームズの冒険 (新潮文庫)

 

  

シャーロック・ホームズの帰還 (新潮文庫)

シャーロック・ホームズの帰還 (新潮文庫)

 

  

恐怖の谷 (新潮文庫)

恐怖の谷 (新潮文庫)