タグ: Jessie
Xperia Pro(MK16a)をBootloader Unlock してみた
Xperia Pro(MK16a)を持っているのですが,OSが古いし標準アプリも多くてストレージもいっぱいで使いたいアプリもなかなか入れることが出来ません.
最近はこの端末にMVNOのSIMを刺してモバイルルータ and GPSロガー的に使っていますがbluetooth tethering も使えずWi-Fi tethering だとバッテリの減りも早いです.ということでカスタムROMやCyanogenMod11か12あたりに入れ替えたいのですがブートローダーにロックがかかっているのでまずはこれを解除しないといけません.Test Point を使ったりするのは面倒だなと思っていたのですが,現在は公式でアンロックコードを手に入れることができるのでこちらで行うことに.
※保証がきかなくなります.SEUSなどが利用できなくなります.公式アップデートも利用できなくなるそうです.(まあこれからOTAとか来ることはないと思いますが)
本体の他に以下のものが必要です.ここでは開発環境の説明はしません.
- Android 開発環境の動作するPC(今回はDebian Jessie)
- Android 開発環境の中のfastboot コマンド(sdk/platform-tools 以下)
- USB A-microB ケーブル
アンロックコードの入手
アンロックコードは以下のページから入手できます.
機種を選択して,メールアドレスを入力すると確認メールが届くので,そのメールのURL をクリックするとIMEIの入力画面になって,そこでIMEI を入力することでCodeが入手できます.
アンロック
Xperia Pro の電源を切ります.
USBケーブルはPCのみに接続する
電源Off 状態からメニューボタンを押しながらUSBケーブルを接続する
右上側面のHDMIコネクタ横のLEDが青くなるとFastbootモードになっている
Fastboot モードの時のdmesgはこんな感じでした.
[78677.917985] usb 1-1.1: new high-speed USB device number 30 using ehci-pci
[78678.013776] usb 1-1.1: unable to get BOS descriptor
[78678.025756] usb 1-1.1: New USB device found, idVendor=0fce, idProduct=0dde
[78678.025764] usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[78678.025769] usb 1-1.1: Product: S1Boot Fastboot
[78678.025774] usb 1-1.1: Manufacturer: Sony Ericsson Mobile Communications AB
[78678.025778] usb 1-1.1: SerialNumber: CB5A1G45XXXXXX
fastboot devices コマンドで接続を確認します.
% ./fastboot devices
CB5A1G45XXXXXX fastboot
% ./fastboot -i 0x0fce getvar version
version: 0.3
finished. total time: 0.001s
もしここでno permissions fastboot
というエラーが出る場合はadb server
を起動しなおしてみるとうまく行くようです.それでもうまく行かない場合root権限で起動し直す(sudo command
)とうまく行ったことも.
% ./fastboot devices
no permissions fastboot
% ./adb kill-server
% ./adb start-server
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
% ./fastboot devices
CB5A1G45XXXXXX fastboot
問題ないようなら以下のコマンドでアンロックコードを指定してアンロックします.
% ./fastboot -i 0x0fce oem unlock 0xC3BA1080A6XXXXXX
...
(bootloader) Unlock phone requested
(bootloader) Erasing block 0x00001300
(bootloader) Erasing block 0x00001400
(bootloader) Erasing block 0x00001500
(bootloader) Erasing block 0x00001600
(bootloader) Erasing block 0x00001700
(bootloader) Erasing block 0x00001800
(bootloader) Erasing block 0x00001900
(bootloader) Erasing block 0x00001a00
(bootloader) Erasing block 0x00001b00
(bootloader) Erasing block 0x00001c00
(bootloader) Erasing block 0x00001d00
(bootloader) Erasing block 0x00001e00
(bootloader) Erasing block 0x00001f00
OKAY [ 4.587s]
finished. total time: 4.587s
これでアンロック完了です.
次はOSを入れ替えてみます.
端末で動くTwitterClient Rainbowstream
確かOSSJで見かけて知ったのだと思うのですが,
端末上で動作するTwitterのRainbowstreamというソフトウェアを知りました.
ユーザーストリーム対応で端末上にユーザストリームや検索結果リストなどが表示できます.画像をアスキーアートで表示する機能もあります.
導入
pipで入る
$ sudo apt-get install python-pip python-dev
$ sudo pip install rainbowstream PySocks Pillow
初回起動時に認証のためブラウザが起動する.認証ご表示されたpinを端末に貼り付ける.認証情報は ~/.rainbow_oauth
に保存されるので要らなくなったら消す.
無くても動くけど無いと設定変更が出来ないので設定ファイルの用意をする.
% wget https://raw.githubusercontent.com/DTVD/rainbowstream/master/rainbowstream/colorset/config -O /tmp/config
% mv /tmp/config ~/.rainbow_config.json
GNU Screen のウィンドウ分割モードだと崩れてしまうので,小さめのウィンドウに表示するといい感じです.以下の画像はawesome で端末を2つ表示してRainbowstreamを実行した端末を小さくしているところです.
画像のアスキーアート表示は楽しいのですが,一気にログが流れてしまうのでoffにしちゃいました.
自作のPerl Script で昔作ったものがあるのですが,Rainbowstreamのほうがカラフルで見た目がいい感じです.
NEXUS5 を落っことしてしまいISAI LGL22 を買った(Linux環境でのroot取得とカメラ無音化)
Nexus5 をどこかに落っことしてしまい(体調が悪い時で記憶があやふや.桜島港から家の間のどこかに多分落ちている)不便なので代替機を探して中古のISAI LGL22 を入手した.兄弟機で面白みはあまりないが,LTE でmineo が使えるのとUnLock が安価&安易でDocomo の電波も掴みそこそこ安いということで….
とりあえず初期化してroot 取ってカメラ無音化までした.root 取得の手順は確立されているけれどWindows向けでバッチファイルを叩くものしか見当たらなかったのでLinux 向けにメモ.(WinでもMacでも同じだけど)
- 初期化
- OS Update
TAO で 4.4.2 に. - 画面のロックをパスワードに
- 所有者情報設定
- mineo 設定
- 暗号化
※充電が80%以上になってから出ないと実行できない. root取得
isai_rootkit_kk_only.rar を以下から入手して利用した.https://mega.co.nz/#!h5EAmY7K!rrM2jZlCnRGc-EzhPhrxQ8gfPtGAcuv_mPPH8lYo7_Msha1sum 0a048c7be86ca64dc755a31a3c3a8d32455a3361 sha256sum 67b3481f15e5f597e60397b9294074354877cd283ecede5bd8ba171e14392cd2
前準備としてUSBデバッグを有効にしてPCと接続しUSBデバッグを有効にしておく.
isai_rootkit_kk_only.rar を展開して install.bat を見ながら以下のような感じでコマンドを叩く.
※要開発環境.cd isai_rootkit_kk_only adb wait-for-device adb push "files" /data/local/tmp adb shell chmod 755 /data/local/tmp/getroot adb shell chmod 755 /data/local/tmp/busybox_file adb shell chmod 755 /data/local/tmp/install.sh adb shell chmod 755 /data/local/tmp/remove_apps_and_bins.sh adb pull /system/app/LGDMSClient.odex ./backup/system/app/LGDMSClient.odex adb pull /system/app/LGDMSClient.apk ./backup/system/app/LGDMSClient.apk adb pull /system/bin/subsystem_ramdump ./backup/system/bin/subsystem_ramdump adb pull /system/bin/dumpstate ./backup/system/bin/dumpstate adb pull /system/bin/fssamond ./backup/system/bin/fssamond adb shell "/data/local/tmp/getroot /data/local/tmp/remove_apps_and_bins.sh" adb wait-for-device adb shell "/data/local/tmp/getroot /data/local/tmp/install.sh" adb wait-for-device adb shell "rm /data/local/tmp/getroot" adb shell "rm /data/local/tmp/busybox_file" adb shell "rm /data/local/tmp/eu.chainfire.supersu-193.apk" adb shell "rm /data/local/tmp/remove_apps_and_bins.sh" adb shell "rm /data/local/tmp/install.sh" adb shell "rm -rf /data/local/tmp/system"
カメラ無音化
/system/media/audio/ui/camera_click.ogg と /system/media/audio/ui/VideoRecord.ogg を退避する.adb shell su mount -o remount,rw /system cd /system/media/audio/ui/ mv camera_click.ogg camera_click.ogg- mv VideoRecord.ogg VideoRecord.ogg- cd sync mount -o remount,ro /system exit exit
#起動音と起動後のパスフレーズ入力時のキークリック音も消したいが見当たらず.
アプリ入れたり
- Androidデバイスマネージャー – Google Play の Android アプリ
落としたりした時に探したりデータ消したり出来るけど,今回のNexus5はバッテリ切れで探せなかった….てことでやっぱ暗号化fs大事 - OsmAnd+ Maps & Navigation – Google Play の Android アプリ
- Ingress – Google Play の Android アプリ
- Googleカメラ – Google Play の Android アプリ
- Google+ – Google Play の Android アプリ
- Picasa (Google+ photo) の完全なツール – Google Play の Android アプリ
:
主に使うアプリはだいたい入ったかな….
- Androidデバイスマネージャー – Google Play の Android アプリ
ibus-mozc から fcitx-mozc に変更したら JOSM で日本語入力できなくなって困る
JOSM はマルチプラットホームでLinux/Windows/Mac で動作しますが,以下の話はLinux固有の問題です.
日本語入力のためのインプットメソッドフレームワークを iBus から fcitx に切り替えたのですが,JOSM で日本語入力ができなくなってしまっていました.Ctrl+Space でトルグするようにしているのですが,他のアプリケーションでは問題ないのにJOSM の場合は無反応で日本語入力ができなくなってしまいました,
そこで一時的にiBus/fcitx の両方が動作するようにしてJOSM 利用時だけiBus を使うようにしていました.
この話を #osckansai で(確か)武山さんに話したところ環境変数か何かが足りないのでは?と教えてもらいました.
少し試したところ XMODIFIERS=”@im=fcitx” を設定するとfcitx でJOSM に日本語入力が出来るようになりました.
% XMODIFIERS=”@im=fcitx” java -jar ~/bin/josm-tested.jar
変換候補がウィンドウの下に表示されちゃいますがまあ許容範囲かなと.
毎回コマンドを打つのもあれなのでこんな感じでショートカットを作成しておきました.
#何気にこっちのほうが時間掛かったorz
##環境変数を指定するには env を付ける.~/, $HOME は使えなかったのでフルパス.
Kobo で mikutter が起動しなくて困る
1月ほど前のオープンソースカンファレンス関西1日目にchroot で debian を起動した Kobo やAndroid を入れた Kobo を展示したりしていたのですが,mikutter を起動しておこうと思ったらエラーを吐いて起動しませんでした.
この時久々に起動したので大量のアップデートを行ったので環境が変わったのでした.デモの前に前もって確認しないとダメですよね….
エラーはKobo のコンソールを流れてしまい,スクロールバックの方法もよくわからない.ssh 経由で確認したいけれど会場のWi-Fi 経由では無理そうだったのでその時は諦めました.(開発者も居たのに!)
てことでさっき確認したのでメモ.
ssh 経由で起動してみるとこんな感じでした.
$ mikutter --confroot=/tmp/mikutter
/usr/share/mikutter/core/mui/cairo_cell_renderer_message.rb: line 10
GLib-GObject-WARNING **:Attempt to add property GtkCellRendererMessage::message-id after class was initialised
/usr/lib/ruby/vendor_ruby/gettext/text_domain.rb:100:in `=~': incompatible encoding regexp match (UTF-8 regexp with ASCII-8BIT string) (Encoding::CompatibilityError)
from /usr/lib/ruby/vendor_ruby/gettext/text_domain.rb:100:in `block in translate_singular_message'
from /usr/lib/ruby/vendor_ruby/gettext/text_domain.rb:99:in `each'
from /usr/lib/ruby/vendor_ruby/gettext/text_domain.rb:99:in `translate_singular_message'
from /usr/lib/ruby/vendor_ruby/gettext/text_domain_manager.rb:104:in `block in translate_singular_message'
from /usr/lib/ruby/vendor_ruby/gettext/text_domain_manager.rb:84:in `block (2 levels) in each_text_domains'
from /usr/lib/ruby/vendor_ruby/gettext/text_domain_manager.rb:83:in `each'
from /usr/lib/ruby/vendor_ruby/gettext/text_domain_manager.rb:83:in `block in each_text_domains'
from /usr/lib/ruby/vendor_ruby/gettext/text_domain_manager.rb:81:in `each'
from /usr/lib/ruby/vendor_ruby/gettext/text_domain_manager.rb:81:in `each_text_domains'
from /usr/lib/ruby/vendor_ruby/gettext/text_domain_manager.rb:103:in `translate_singular_message'
from /usr/lib/ruby/vendor_ruby/gettext.rb:118:in `gettext'
from /usr/share/mikutter/core/plugin/settings/basic_settings.rb:4:in `block in <top (required)>'
from /usr/share/mikutter/core/plugin.rb:21:in `instance_eval'
from /usr/share/mikutter/core/plugin.rb:21:in `create'
from /usr/share/mikutter/core/plugin/settings/basic_settings.rb:3:in `<top (required)>'
from /usr/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /usr/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /usr/share/mikutter/core/plugin/settings/settings.rb:4:in `<top (required)>'
from /usr/share/mikutter/core/miquire_plugin.rb:138:in `load'
from /usr/share/mikutter/core/miquire_plugin.rb:138:in `load'
from /usr/share/mikutter/core/miquire_plugin.rb:130:in `block in load'
from /usr/share/mikutter/core/miquire_plugin.rb:127:in `each'
from /usr/share/mikutter/core/miquire_plugin.rb:127:in `load'
from /usr/share/mikutter/core/miquire_plugin.rb:130:in `block in load'
from /usr/share/mikutter/core/miquire_plugin.rb:127:in `each'
from /usr/share/mikutter/core/miquire_plugin.rb:127:in `load'
from /usr/share/mikutter/core/miquire_plugin.rb:97:in `block in load_all'
from /usr/share/mikutter/core/miquire_plugin.rb:37:in `block in each_spec'
from /usr/share/mikutter/core/miquire_plugin.rb:32:in `each'
from /usr/share/mikutter/core/miquire_plugin.rb:32:in `each'
from /usr/share/mikutter/core/miquire_plugin.rb:35:in `each_spec'
from /usr/share/mikutter/core/miquire_plugin.rb:95:in `load_all'
from /usr/share/mikutter/core/boot/load_plugin.rb:7:in `<top (required)>'
from /usr/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /usr/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /usr/share/mikutter/core/miquire.rb:98:in `miquire_original_require'
from /usr/share/mikutter/core/miquire.rb:95:in `file_or_directory_require'
from /usr/share/mikutter/core/miquire.rb:76:in `block in miquire'
from /usr/share/mikutter/core/miquire.rb:75:in `each'
from /usr/share/mikutter/core/miquire.rb:75:in `miquire'
from /usr/share/mikutter/core/miquire.rb:18:in `miquire'
from /usr/share/mikutter/mikutter.rb:38:in `<main>'
言語環境周りぽいなてことで LANG
を確認してみると空
$ echo $LANG
LANG
に ja_JP.UTF-8
を設定してあげると動きました.
$ LANG=ja_JP.UTF-8 mikutter
/usr/lib/ruby/vendor_ruby/gtk2.rb: line 13
Gtk-WARNING **:Locale not supported by C library.
Using the fallback 'C' locale.
/usr/share/mikutter/core/mui/cairo_cell_renderer_message.rb: line 10
GLib-GObject-WARNING **:Attempt to add property GtkCellRendererMessage::message-id after class was initialised
/usr/share/mikutter/core/plugin/display_requirements/display_requirements.rb:5: warning: already initialized constant CACHE_DIR
/usr/share/mikutter/core/plugin/aspectframe/aspectframe.rb:12: warning: previous definition of CACHE_DIR was here
/usr/share/mikutter/core/plugin/notify/notify.rb:6: warning: already initialized constant DEFINED_TIME
/usr/share/mikutter/core/plugin/extract/extract.rb:8: warning: previous definition of DEFINED_TIME was here
とりあえずは起動メニューにこれを設定してあげると良さそうです.
追記)
最近は $ LC_ALL=ja_JP.UTF-8 mikutter
なのかな?
エラーメッセージCOMEON
— Shimada Hirofumi (@shimadah) 2015, 5月 21
@shimadah continuation.so: warning: callcc is obsolete; と
gettextにあるtext_domain.rb:100:in `=~': incompatible encoding regexp matchっての
— あやふみ (@ayafmy) 2015, 5月 21
@ayafmy うーん、全文見たい気がする
— Shimada Hirofumi (@shimadah) 2015, 5月 21
@shimadah めう http://t.co/JzJG6bZz52
— あやふみ (@ayafmy) 2015, 5月 21
@ayafmy これやね http://t.co/fbcOQqVLzh
— Shimada Hirofumi (@shimadah) 2015, 5月 21
@shimadah 同じエラーでて起動しないめう……
— あやふみ (@ayafmy) 2015, 5月 21
@ayafmy $ LANG=ja_JP.UTF-8 mikutter でも駄目なん?
— Shimada Hirofumi (@shimadah) 2015, 5月 21
@shimadah だめやね
— あやふみ (@ayafmy) 2015, 5月 21
@ayafmy LC_ALL= からはじめてみるとどう?
— Shimada Hirofumi (@shimadah) 2015, 5月 21
@shimadah 起動しためうやっためう〜〜
— あやふみ (@ayafmy) 2015, 5月 21
chroot 環境で `/dev/null’ が使えなくて困る
Kobo の chroot 環境で debian を動かしたりしているのでたまにアップデートを行うのですが,実機だと遅いのでPC のchroot 環境で実行したりします
#アーキテクチャの違いはqemu で吸収. > ユーザーモードエミュレーションqemu を使って Kono on Debian のイメージを Host PC で apt-get とかする | matoken’s meme
そこで今回 apt-get update
中に以下のようなエラーが発生.
/bin/sh: 1: cannot create /dev/null: Permission denied
/dev/null
を確認するとぱっと見デバイスは問題なさそうだけど使えない.
# ls -la /dev/null
crw-rw-rw- 1 root root 1, 3 Sep 2 02:57 /dev/null
# echo hoge > /dev/null
bash: /dev/null: Permission denied
エラーメッセージで検索するとkinnekoさんのページがヒット.
- cannot create /dev/null: Permission denied – kinneko@転職先募集中の日記
調べてみると、chrootしたツリーのあるボリュームのマウントオプションにnodevが入っているのがダメのようだ。
あーなるほど!
chroot 元で確認してみると確かに nodev
が.
% mount |grep rootfs
/dev/sdc1 on /media/mk/rootfs type ext4 (rw,nosuid,nodev,relatime,data=ordered,uhelper=udisks2)
dev
を付けて remount
してみると
% sudo mount -o remount,dev /dev/sdc1
% mount |grep rootfs
/dev/sdc1 on /media/mk/rootfs type ext4 (rw,nosuid,relatime,data=ordered,uhelper=udisks2)
chroot
しなおさなくても使えるようになった.毎回チェックしてるんですかね.
# echo hoge > /dev/null
てことで update 出来た :)
# apt-get install -f
自分のPCにキーロガーを設定する
キーロガー.人のPCに仕掛けるのはまずいけど自分の&自分しか使わないPCで試す分には問題ないだろうということで入れてみてます.
入れているのは以下の logkeys .
- “logkeys – a GNU/Linux keylogger that works! – Google Project Hosting” https://code.google.com/p/logkeys/
導入方法
DebianやUbuntu だとパッケージがあるので logkeys パッケージを導入するだけ.
% sudo apt-get install logkeys
初期設定
/etc/default/logkeys
という設定ファイルを設定します.
ENABLED=1
LOGFILE=/home/mk/.logkeys/`/bin/date +%Y%m%d-%H%M%S-$$`
# This should be updated according to your hardware
# Check README.Debian for more info
DEVICE=/dev/input/event0
- ENABLED : 0 起動しない / 1 起動する
- LOGFILE : ログファイルの指定
- DEVICE : キーボードデバイス指定
自動起動してログファイルの設定,ログするキーボードデバイスの指定をします.
ログファイルは他の人から読まれないようにパーミッションを設定しておきましょう.ファイル名は試しに
/home/mk/.logkeys/`/bin/date +%Y%m%d-%H%M%S-$$`
とか書いてみたら行けました.試してみるもんですね.これで起動毎に新しいログファイルが作成されるはずです.
キーボードデバイスは /proc/bus/input/devices
を見たり,実際のデバイスを cat してキー入力してみたりして見つけます.
詳細は /usr/share/doc/logkeys/README.Debian
に書かれています.
以下の/proc/bus/input/devices
では,頭のがkeyboad のようです.
I: Bus=0011 Vendor=0001 Product=0001 Version=ab54
N: Name="AT Translated Set 2 keyboard"
P: Phys=isa0060/serio0/input0
S: Sysfs=/devices/platform/i8042/serio0/input/input0
U: Uniq=
H: Handlers=sysrq kbd event0
B: PROP=0
B: EV=120013
B: KEY=402000000 3803078f800d001 feffffdfffefffff fffffffffffffffe
B: MSC=10
B: LED=7
I: Bus=0019 Vendor=0000 Product=0005 Version=0000
N: Name="Lid Switch"
P: Phys=PNP0C0D/button/input0
S: Sysfs=/devices/LNXSYSTM:00/device:00/PNP0C0D:00/input/input3
U: Uniq=
H: Handlers=event2
B: PROP=0
B: EV=21
B: SW=1
I: Bus=0019 Vendor=0000 Product=0003 Version=0000
N: Name="Sleep Button"
P: Phys=PNP0C0E/button/input0
S: Sysfs=/devices/LNXSYSTM:00/device:00/PNP0C0E:00/input/input4
U: Uniq=
H: Handlers=kbd event3
B: PROP=0
B: EV=3
B: KEY=4000 0 0
I: Bus=0019 Vendor=0000 Product=0001 Version=0000
N: Name="Power Button"
P: Phys=LNXPWRBN/button/input0
S: Sysfs=/devices/LNXSYSTM:00/LNXPWRBN:00/input/input5
U: Uniq=
H: Handlers=kbd event4
B: PROP=0
B: EV=3
B: KEY=10000000000000 0
I: Bus=0010 Vendor=001f Product=0001 Version=0100
N: Name="PC Speaker"
P: Phys=isa0061/input0
S: Sysfs=/devices/platform/pcspkr/input/input6
U: Uniq=
H: Handlers=kbd event5
B: PROP=0
B: EV=40001
B: SND=6
I: Bus=0019 Vendor=17aa Product=5054 Version=4101
N: Name="ThinkPad Extra Buttons"
P: Phys=thinkpad_acpi/input0
S: Sysfs=/devices/platform/thinkpad_acpi/input/input8
U: Uniq=
H: Handlers=kbd rfkill event6
B: PROP=0
B: EV=33
B: KEY=18040000 0 10000000000000 0 1501b00102004 c000000001104000 e000000000000 0
B: MSC=10
B: SW=a
I: Bus=0003 Vendor=04f2 Product=b217 Version=0854
N: Name="Integrated Camera"
P: Phys=usb-0000:00:1a.0-1.6/button
S: Sysfs=/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.6/1-1.6:1.0/input/input9
U: Uniq=
H: Handlers=kbd event7
B: PROP=0
B: EV=3
B: KEY=100000 0 0 0
I: Bus=0019 Vendor=0000 Product=0006 Version=0000
N: Name="Video Bus"
P: Phys=LNXVIDEO/video/input0
S: Sysfs=/devices/LNXSYSTM:00/device:00/PNP0A08:00/LNXVIDEO:00/input/input10
U: Uniq=
H: Handlers=kbd event8
B: PROP=0
B: EV=3
B: KEY=3e000b00000000 0 0 0
I: Bus=0001 Vendor=14f1 Product=506e Version=0001
N: Name="HDA Digital PCBeep"
P: Phys=card0/codec#0/beep0
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/input/input11
U: Uniq=
H: Handlers=kbd event9
B: PROP=0
B: EV=40001
B: SND=6
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel PCH HDMI/DP,pcm=8"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input18
U: Uniq=
H: Handlers=event10
B: PROP=0
B: EV=21
B: SW=140
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel PCH HDMI/DP,pcm=7"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input17
U: Uniq=
H: Handlers=event11
B: PROP=0
B: EV=21
B: SW=140
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel PCH HDMI/DP,pcm=3"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input16
U: Uniq=
H: Handlers=event12
B: PROP=0
B: EV=21
B: SW=140
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel PCH Headphone"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input15
U: Uniq=
H: Handlers=event13
B: PROP=0
B: EV=21
B: SW=4
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel PCH Dock Headphone"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input14
U: Uniq=
H: Handlers=event14
B: PROP=0
B: EV=21
B: SW=4
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel PCH Dock Mic"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input13
U: Uniq=
H: Handlers=event15
B: PROP=0
B: EV=21
B: SW=10
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel PCH Mic"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input12
U: Uniq=
H: Handlers=event16
B: PROP=0
B: EV=21
B: SW=10
I: Bus=0011 Vendor=0002 Product=0007 Version=01b1
N: Name="SynPS/2 Synaptics TouchPad"
P: Phys=isa0060/serio1/input0
S: Sysfs=/devices/platform/i8042/serio1/input/input7
U: Uniq=
H: Handlers=mouse0 event17
B: PROP=5
B: EV=b
B: KEY=e520 10000 0 0 0 0
B: ABS=660800011000003
I: Bus=0003 Vendor=0000 Product=0000 Version=0004
N: Name="ACPI Virtual Keyboard Device"
P: Phys=
S: Sysfs=/devices/virtual/input/input20
U: Uniq=
H: Handlers=sysrq kbd rfkill event18
B: PROP=0
B: EV=3
B: KEY=ffffffffffffffff ffffffffffffffff ffffffffffffffff fffffffffffffffe
I: Bus=0011 Vendor=0002 Product=000a Version=0000
N: Name="TPPS/2 IBM TrackPoint"
P: Phys=synaptics-pt/serio0/input0
S: Sysfs=/devices/platform/i8042/serio1/serio2/input/input19
U: Uniq=
H: Handlers=mouse1 event19
B: PROP=0
B: EV=7
B: KEY=70000 0 0 0 0
B: REL=3
I: Bus=0003 Vendor=046d Product=0a29 Version=0111
N: Name="Logicool Logicool Wireless Headset"
P: Phys=usb-0000:00:1d.0-1.1/input3
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.3/0003:046D:0A29.000A/input/input27
U: Uniq=000d44b85a7d
H: Handlers=kbd event1
B: PROP=0
B: EV=1b
B: KEY=18000 17800000000 8e000000000000 0
B: ABS=ffffff0000000000
B: MSC=10
H: Handlers=sysrq kbd event0
から実際のデバイスは /dev/input/event0
なので,これをcat して何かキーボード入力して反応があるか確認します.当たりのようです.
% sudo cat /dev/input/event0
�w�S�� �w�S�� �w�S�� �w�S?�w�S?�w�S?p a�w�SK
�w�SK
�w�SK
�w�w�S��.�w�S��.�w�S�� a�w�S(�^C
実際に使ってみると当たり前ですが入力したものがログファイルに吐かれています.もちろんパスワードなどもそのまま.
日本語入力したものなどはローマ字入力なのでローマ字で記録されています.フィルタにかけると読みやすくなりますね.メタ文字も<lctrl><up><down>のような感じで記録されます.
root で動いているのでユーザを変更しても記録されます.
デバイスを指定しているので,外付けのキーボードを接続すると記録されません.
ちなみにプロセスはこんな感じなので色々丸見えですね.
% ps -ef| grep -i logk
root 1433 1 0 6月10 ? 00:00:25 /usr/bin/logkeys -s -u -d /dev/input/event0 -o /home/mk/.logkeys/20140610-222504-1004
キーロガーへの対策
このlogkeys であれば別のキーボードを使えば回避できます.でも全部のデバイスを記録するソフトウェアキーロガーだと回避できません.OS をLiveCD/USB などで別のものを起動してしまえば回避できます.
ソフトウェアでなく,ハードウェアキーロガーもあります.これはUSB やPS/2 ポートのキーボードの間に取り付けてロギングするものです.OS を変えても回避できません.わかりやすいものはPCの裏を見るだけで何かついてるのですぐわかりますが,キーボードの中やPC 筐体の中に仕込まれると一見しただけではわかりません.
仕込んだロガーを回収してログを回収する必要があるのですが,無線方式のものだと現地に行かなくても無線経由で回収できるので犯人の追跡も難しいです.
ちなみにそんなに特殊なものでなく普通にあちこちで売っています.おまけに安価.
- “KeyGrabber – Hardware Keylogger – WiFi USB hardware keyloggers” https://www.keelog.com/
- “Hardware Keylogger | eBay” http://www.ebay.com/sch/i.html?_trksid=p2050601.m570.l1313.TR0.TRC0.H0&_nkw=Hardware+Keylogger&_sacat=0&_from=R40
画面を飛ばすものまであります.テンペストを使うよりずっとお手軽で実用的ですね><
ということで,外の端末ではセンシティブな情報は入力しないくらいしか対策は無さそうです.
Debian でパッケージ導入時のダイヤログを抑制する
Debian でmysql-server 等を導入するとパスワード設定ダイヤログが出てくる.
これを抑制できないか試してみた.
microHOWTO: Perform an unattended installation of a Debian package
export DEBIAN_FRONTEND=noninteractive
apt-get update -q
apt-get install -q -y -o Dpkg::Options::=”—force-confdef” -o Dpkg::Options::=”—force-confold” apache2 mysql-server
これを参考に
% sudo DEBIAN_FRONTEND=noninteractive apt-get install -y mysql-server
でダイヤログ出さずに導入できた.
でもmysql-server の場合パスワード設定しないと結構まずい.
即パスワード設定するとか
% mysqladmin -u root password ‘password’
daemon止めるとかしないとだと思う.
% sudo /etc/init.d/mysql stop
「赤城さんのお風呂タイマー @艦これ」をDebian jessie で試す
赤城さんのお風呂タイマー @艦これ というソフトを見つけて,Linux でも動作するよと書かれていたので気になっていました.
これをDebian jessie 環境でビルドしてみました.(が,動作していませんorz)
ソースコードからビルドすれば、Linux や Mac でも動作することを確認しています。
クリーンな環境でビルドしてないので足りないものもあるかもしれませんが,こんな感じで必要なパッケージを導入します.
% sudo apt-get install liblua5.1-0-dev libyaml-cpp-dev libboost1.53-dev libopencv-highgui-dev libluabind-dev doxygen xdot libcsnd-dev lua5.2 mercurial build-essential
bitbucket からsource を貰ってきます.
% hg clone https://bitbucket.org/satofumi/bath_timer
make します.
% cd bath_timer
% make
実行ファイルを叩いてみます.
% bath_timer/bath_timer
zsh: segmentation fault bath_timer/bath_timer
orz
カレントディレクトリで実行したりテーマファイルをコピーしたりしてみましたがうまく行きませんでした><
テーマはディレクトリ構成とかがよくわからなかったのでWindows のものをCP したりしてみました.
ということで,とりあえずいつものkoedoyoshidaさんの艦これタイマーに戻ります….
ちなみに,どうやってブラウザと通信しているんだろうと疑問だったのですが,こちらに解説が.通信しているわけではなくOCR で読み取っているんですね.眼から鱗.