投稿者「iso」のアーカイブ

cygwinでk4mobidedrm.py

[DeDRM_tools_6.5.5/DeDRM_calibre_plugin/DeDRM_plugin]./k4mobidedrm.py -k kindlekey1.k4i B0xxxxxx_EBOK.azw  .
AlfCrypto not found. Using python PC1 implementation.
Traceback (most recent call last):
  File "./k4mobidedrm.py", line 88, in 
    import topazextract
  File "/cygdrive/d/epub/DeDRM_tools_6.5.5/DeDRM_calibre_plugin/DeDRM_plugin/topazextract.py", line 19, in 
    from alfcrypto import Topaz_Cipher
ImportError: dynamic module does not define init function (initalfcrypto)

となり元のままでは動きません。alfcrypto.pyでなくalfcrypto.dllが読み込まれているようです。
alfcrypto.dll -> alfcrypto32.dll に名前を変更します。
alfcrypto_src.zipを解凍して、cygwin上でdllを作成して、名前をalfcrypto_cygwin.dllにします。
上記修正を反映させるためにalfcrypto.pyを修正

    elif sys.platform.startswith('cygwin'):
        name_of_lib = 'alfcrypto_cygwin.dll'
    elif sys.platform.startswith('win'):
        if pointer_size == 4:
            name_of_lib = 'alfcrypto32.dll'
        else:
            name_of_lib = 'alfcrypto64.dll'

試してみます。

[DeDRM_tools_6.5.5/DeDRM_calibre_plugin/DeDRM_plugin]./k4mobidedrm.py -a map_data_storage.db B0xxxxxx_EBOK.prc .
Using Library AlfCrypto Python
K4MobiDeDrm v5.5.
Copyright c 2008-2017 Apprentice Harper et al.
MobiDeDrm v0.42.
Copyright c 2008-2017 The Dark Reverser, Apprentice Harper et al.
Decrypting Kindle Format 8 ebook: 
Found 10 keys to try after 0.7 seconds
Crypto Type is: 2
File is encoded with PID aYLCZVB7TF.
Decrypting. Please wait . . . done
Decryption succeeded after 0.8 seconds
Saved decrypted book B0xxxxxx_EBOK_nodrm after 0.9 seconds

無事動きました。
-aオプションは
[ -a <AmazonSecureStorage.xml|backup.ab> ]
と表示されますが、2つとも駄目でmap_data_storage.dbで動作しました。

macportsのregistry.db

port rev-upgrade
--->  Scanning binaries for linking errors
Warning: Error parsing file /opt/local/bin/alter.mp_1459228313: Error opening or reading file
Warning: Error parsing file /opt/local/bin/asco.mp_1459228313: Error opening or reading file
Warning: Error parsing file /opt/local/bin/asco-test.mp_1459228313: Error opening or reading file
Warning: Error parsing file /opt/local/bin/log.mp_1459228313: Error opening or reading file
Warning: Error parsing file /opt/local/bin/monte.mp_1459228313: Error opening or reading file
Warning: Error parsing file /opt/local/bin/postp.mp_1459228313: Error opening or reading file
Warning: Error parsing file /opt/local/bin/rosen.mp_1459228313: Error opening or reading file
--->  No broken files found.                             

でWarningが出ていました。無視すれば使えていました。
portのコマンドで修正出来ないようなので直接データベースを操作して該当ファイル部分を削除しました。

registry.dbのバックアップをして、dbファイルを開きデータベースの構成を確認します。

cp /opt/local/var/macports/registry/registry.db .
cp registry.db registry.db.orig
sqlite3 registry.db
sqlite> .fullschema
CREATE TABLE metadata (key UNIQUE, value);
CREATE TABLE dependencies (id INTEGER, name TEXT, variants TEXT, FOREIGN KEY(id) REFERENCES ports(id));
CREATE TABLE portgroups (id INTEGER, name TEXT, version TEXT COLLATE VERSION, size INTEGER, sha256 TEXT, FOREIGN KEY(id) REFERENCES ports(id));
CREATE TABLE ports (id INTEGER PRIMARY KEY, name TEXT COLLATE NOCASE, portfile CLOB, location TEXT, epoch INTEGER, version TEXT COLLATE VERSION, revision INTEGER, variants TEXT, negated_variants TEXT, state TEXT, date DATETIME, installtype TEXT, archs TEXT, requested INT, os_platform TEXT, os_major INTEGER, UNIQUE(name, epoch, version, revision, variants));
CREATE TABLE files (id INTEGER, path TEXT, actual_path TEXT, active INTEGER, binary BOOL, FOREIGN KEY(id) REFERENCES ports(id));
CREATE INDEX dep_name ON dependencies (name);
CREATE INDEX portgroup_id ON portgroups(id);
CREATE INDEX portgroup_open ON portgroups(id, name, version, size, sha256);
CREATE INDEX dep_id ON dependencies(id);
CREATE INDEX port_name ON ports(name, epoch, version, revision, variants);
CREATE INDEX port_state ON ports(state);
CREATE INDEX file_port ON files(id);
CREATE INDEX file_path ON files(path);
CREATE INDEX file_actual ON files(actual_path);
/* No STAT tables available */

対象ファイルが有るか確認します。
WHEREの条件式で正規表現の仕方が判らなかったので対象対象ファイル名をそのまま指定しています。

sqlite> select * from files WHERE actual_path=='/opt/local/bin/asco.mp_1459228313' ;
1665|/opt/local/bin/asco|/opt/local/bin/asco.mp_1459228313|1|1

対象ファイルをすべて削除して、sqlite3を終了させてファイルを更新します。

sqlite> DELETE from files WHERE actual_path=='/opt/local/bin/asco.mp_1459228313' ;
省略
sqlite>.quit
sudo cp registry.db /opt/local/var/macports/registry/
sudo chown root:admin /opt/local/var/macports/registry/registry.db

port installed
port rev-upgrade
で動作を確認したところ、Warningは出なくなりました。
SQLは、ほとんど触った事が無かったのですがネットでコマンドを調べ目的は達成できました。

アミックスからの手紙

封書の表に重要と赤い判が押された手紙が届きました。
>海外からの不正な掲示板への連続投稿について
と題された手紙で私の設置したcgiを使い連続投稿が行われたので、
cgiを停止(パーミッシンを0にしてありました。)したとの連絡でした。

このcgiは、ホームページデザイナーの講座の課題として作成したページをアミックスにアップロードした物でした。
使用していたものでも無いので該当cgiは、削除しました。
攻撃のIPは、ロシアからのものと手紙に記載が有りましたが、
掲示板は日本語で、トップページにリンクが有る訳でも無いのによく利用出来た物だと思いました。

この時のログをダウンロードして、自宅のサーバで動作させた画像です。

SDHCメモリカード

SDメモリが必要になり、楽天で値段の安い8GbyteのSDHCメモリカードを購入しました。
バックアッップしてあったファイルをコピーするとエラーになります。(フォルダが見つからない)
コピーした内容を確認するとフォルダの中が空だったりします。
発売元のメーカからレビューの依頼のメールが来たので上記内容でレビューを書きました。
その後、レビューを見てキャンセル・返金処理しましたとのメールがあり、
翌日楽天からキャンセルメールが届きました。

ChkFlash(windows上のソフトです)で調べると先頭部分以外がエラーになります。
上記ソフトの使い方を解説したwebページの容量偽装の表示と同じです。
パーテションを区切り実際のメモリ量にパーテンションサイズを設定すれば使えるのでないかと思いつきやってみました。
MiniTool Partition Winzardを使い先頭パーテンションを192Mbyteに設定しました。
サイズはChkFlashのOKの位置から決めました。(256Mだとエラーになりました。)
再度ChkFlashを実行するとパスしました。
192Mbyteのメモリカードとして使用出来ました。

販売店の名前は書きませが、対象の商品は現在販売されていません。
容量偽装が本当に有る事にびっくりしました。
人をだまして利益を得るような商売が続くとは思いませんが酷い事です。
アマゾンの商品レビューにも、容量偽装の事が有りました。
大手のサイト経由でも信用できないと言う事が判りました。

ギガパック

料金が安くなるとの事で、メガパック100からギガパックに契約を変更しました。
ルータ(BHR-4GRV2)とハブ(GS105v5)をギガビット対応の物を購入して更新しました。
料金が安くなった分の1年分くらいで購入出来ました。安くなったものですね。
ケーブルは、CAT5e,6を使っていたのでCAT4を使っていた部分と交換しただけで済みました。
ルータは、同じメーカなので設定を変更しなくても大丈夫だと思いましたがいろいろ作業が必要でした。
IPアドレスが192.168.11.1から192.168.12.1になっていたので
192.168.11.1に変更し固定IPの設定を移行しました。
syslogの転送も変更になっていました。

sudo tcpdump -X port 514
17:49:30.307146 IP .syslog > 192.168.11.4.syslog: SYSLOG local0.info, length: 45
	0x0000:  4500 0049 2c36 0000 4011 b718 c0a8 0b01  E..I,6..@.......
	0x0010:  c0a8 0b04 0202 0202 0035 e069 3c31 3334  .........5.i<134
	0x0020:  3e20 4242 522d 3448 475b 3338 365d 3a31  >.BBR-4HG[386]:1
	0x0030:  3932 2e31 3638 2e31 312e 3420 6c6f 6769  92.168.11.4.logi
	0x0040:  6e20 7375 6363 6573 73a1 3554 43         n.success.5TC

13:10:07.000277 IP 192.168.11.1.58658 > 192.168.11.5.syslog: SYSLOG user.info, length: 72
	0x0000:  4500 0064 0000 4000 4011 a332 c0a8 0b01  E..d..@.@..2....
	0x0010:  c0a8 0b05 e522 0202 0050 922b 3c31 343e  ....."...P.+<14>
	0x0020:  4665 6220 3232 2031 333a 3130 3a30 3620  Feb.22.13:10:06.
	0x0030:  7379 736c 6f67 3a20 5b41 5554 4820 4164  syslog:.[AUTH.Ad
	0x0040:  6d69 6e20 6c6f 6769 6e20 6672 6f6d 2073  min.login.from.s
	0x0050:  6f75                                     ou

< と >で囲まれた中の数字を「8」で割ります
134/8=16.75
14/8=1.75
小数点以下はとりあえず置いといて「16,1」という数字がファシリティになります。
1 user-level messages
16 local use 0 (local0)

ファシリティが変わっているので
/etc/syslog.conf
/etc/newsyslog.conf
を変更して、syslogdを再起動し無事ログがとれるようになりました。

ログを見ると外部からpingが来ていました。
Mar 3 12:51:38 192.168.11.1 : [778872.050000] [FIREWALL Block Ping from Internet from 23.210.202.72:n/a to 123.103.136.90:n/a (eth0)]
Mar 3 12:51:46 192.168.11.1 : [778880.060000] [FIREWALL Block Ping from Internet from 104.74.70.46:n/a to 123.103.136.90:n/a (eth0)]
Mar 3 12:51:46 192.168.11.1 : [778880.280000] [FIREWALL Block Ping from Internet from 23.32.3.159:n/a to 123.103.136.90:n/a (eth0)]

ping以外にも
Mar 2 03:28:06 192.168.11.1 : [658659.330000] [FIREWALL Reject IDENT requests from 107.170.255.71:47884 to 123.103.136.90:113 (eth0)]
も有りました。

http://netspeed5beta.studio-radish.com/index.html
の測定で、通信速度も700Mbps以上出ていました。

PPC Macでrtl-sdr

macportsからinstallして、

[~/src/macports]rtl_test
Found 1 device(s):
  0:  Generic, RTL2832U, SN: 77771111153705700
Using device 0: Generic RTL2832U
No supported tuner found	

FC0012 tunerが見つかりません。
gitのソースで試します。
エラーが出るので修正します。
src/rtl_test.c

        struct timespec ts;
#ifdef __unix__
        rv = clock_gettime(CLOCK_MONOTONIC, &ts);
        tg->tv_sec = ts.tv_sec;
        tg->tv_nsec = ts.tv_nsec;
#elif __APPLE__
        struct timeval tv;
        rv = gettimeofday(&tv, NULL);
        ts->tv_sec = tv.tv_sec;
        ts->tv_nsec = tv.tv_usec * 1000;
#endif
        return rv;

ts->をtg->に変更します。これで無事コンパイルできました。

追記 2018.03.25
macportsもupdateされて動くようになりました。
ただ上記部分のパッチが

diff --git a/src/rtl_test.c b/src/rtl_test.c
index 42d2c94..8009c6e 100644
--- a/src/rtl_test.c
+++ b/src/rtl_test.c
@@ -162,8 +162,8 @@ static int ppm_gettime(struct time_generic *tg)
 	struct timeval tv;
 
 	rv = gettimeofday(&tv, NULL);
-	ts->tv_sec = tv.tv_sec;
-	ts->tv_nsec = tv.tv_usec * 1000;
+	ts.tv_sec = tv.tv_sec;
+	ts.tv_nsec = tv.tv_usec * 1000;
 #endif
 	return rv;
 }

tsに代入しても直後にreturnしてどこにも使っていないし、
__unix__定義された場合の動作と異なっていますがいいのかな?

追記 2018.05.14
gitのソースが上記の修正されました。
やぱっりMacPortsのパッチは間違ってうたようです。

commit c403ef0bc1e3ac586495ad0338c56f47e2026b20
Author: Steve Markgraf 
Date:   Thu Apr 26 23:51:15 2018 +0200

    rtl_test: fix build on Mac OS
[rtl-sdr/rtl-sdr/build]/usr/local/bin/rtl_test
Found 1 device(s):
  0:  Generic, RTL2832U, SN: 77771111153705700
Using device 0: Generic RTL2832U
Found Fitipower FC0012 tuner
Supported gain values (5): -9.9 -4.0 7.1 17.9 19.2 
Sampling at 2048000 S/s.

チューナが認識されています。
git logで確認すると

commit 4520f001d85f01d051eaa42af7b18b6ef0837e14 
Author: Steve Markgraf 
Date:   Tue Feb 20 22:09:56 2018 +0100

    lib: fix FC0012 reset GPIO
    
    Since a typo in rtlsdr_set_gpio_output() was fixed,
    FC0012 tuners were not detected anymore, as the reset pin
    is actually 4, not 5.
    
    Thanks to David Basden et al for reporting the bug.

    Signed-off-by: Steve Markgraf 

で修正されたようです。
macportsは、
commit b04c2f9f035c5aede43d731e5d58e4725d2f8bb4
Author: Hoernchen
Date: Tue Sep 19 19:23:00 2017 +0200
です。

FM放送を受信してみます。

[rtl-sdr/rtl-sdr/build]/usr/local/bin/rtl_fm -f 77.8M -s 32k -M wbfm> 0.out
Found 1 device(s):
  0:  Generic, RTL2832U, SN: 77771111153705700
Using device 0: Generic RTL2832U
Found Fitipower FC0012 tuner
Tuner gain set to automatic.
Tuned to 78071000 Hz.
Oversampling input by: 6x.
Oversampling output by: 1x.
Buffer size: 8.03ms
Exact sample rate is: 1020000.026345 Hz
Sampling at 1020000 S/s.
Output at 170000 Hz.

出来上がったファイルをspwaveで再生出来ました。
-s 32kは、spawaveで対応しているサンプリング周波数
最初は-M wbfmを指定していなかったので、うまく再生出来ませんでした。
spwaveの読み込みは
フォーマット raw
ビット/サンプル 16
サンプリング周波数 32000
チャンネル数 1
で再生出来ました。
ハード的には使える事が判ったので、本格的なアプリをinstallしてみます。

Error: SDRplay cannot be installed for the configured build_arch ‘ppc’ because it only supports the arch(s) ‘x86_64’.
Error: gqrx cannot be installed for the configured build_arch ‘ppc’ because it only supports the arch(s) ‘i386 x86_64’.

どちらもPPCは、対象外のようです。

soxをinstallして直接再生してみます。

/usr/local/bin/rtl_fm -f 77.8M -r 32k -M wbfm -E deemp| play -t raw -r 32k --encoding signed-integer -b 16 -c 1 -
Found 1 device(s):
  0:  Generic, RTL2832U, SN: 77771111153705700
Using device 0: Generic RTL2832U
-: (raw)
 File Size: 0         
  Encoding: Signed PCM    
  Channels: 1 @ 16-bit   
Samplerate: 32000Hz      
Replaygain: off         
  Duration: unknown      
In:0.00% 00:00:00.00 [00:00:00.00] Out:0     [      |      ]        Clip:0    Fo

FM放送には、プリエンファシスがかかっているので-E deempを追加しました。

Kobo Firmware 4.6.9960

kobo auraでファームをupdateしようとしたら
重大なエラーが発生しました
と表示され初期化が必要になりました。
初期化して、再度updateしようとしましたが同じでした。
同じ手順で、4.5.9587には出来たので手順には問題ないと思います。

文鎮化する訳ではないのですが、
SDに書き込んだん本の情報が初期化(読了、コレクション)されるのが困ります。

4.5でも読了データが保存されなくて(4.5以前は問題なかった)今回updateを試した訳ですが、
かえって悪くなってしまいました。

追記
SDカードを外したらアップデートできました。
アップデート後にSDを挿入すると重大なエラーが発生しましたが表示されてしまいました。
結局このアップデートは非公開になったようです。
4.6.9995が公開されてこれは問題なくアップデートできました。

epubメタデータ編集

epubのタイト名などを変更したくなる事があります。
unzipして、編集して、zipで出来ますが数が多いと大変です。
今回は曇天文庫のタイト名に曇天文庫の文字を追加します。
kobo auraを使っていますが、コレクションに追加するのに検索で絞り込めるようにするためです。

#/bin/ls -1 *.epub | xargs -I % ./add.sh %
unzip $1 \*.opf
sed ‘s/<\/dc:title>/(曇天文庫)<\/dc:title>/’ < OPS/package.opf >0.opf
mv 0.opf OPS/package.opf
zip -u $1 OPS/package.opf
rm -rf OPS

上記内容でadd.shを作り1行目のコマンド実行で出来ます。
結果数個変換できないファイルは、

unzip $1 \*.opf
sed ‘s/<\/dc:title>/(曇天文庫)<\/dc:title>/’ < OEBPS/content.opf >0.opf
mv 0.opf OEBPS/content.opf
zip -u $1 OEBPS/content.opf
rm -rf OEBPS

で出来ました。

画像の比較

楽天の間違い探しのクイズが有ったので画像処理を試してみました。

問題のページから画像をコピーして
pngtopam false.png > false.pam
pngtopam true.png > true.pam
でnetpbmで扱うフォーマットに変更します。

pamarith -compare true.pam false.pam > compare.ppm
で画像間の演算をします。
最初は二つの画像の差分をとればいいと思い-subしましたが、
true.pam false.pam
false.pam true.pam
の2回して結果を加算となるので、-compareを使います。
-compareは、出力がpamでなくppmです。

ppmtogif compare.ppm > compare.gif
でプレビューで表示できるフォーマットにします。

open compare.gif
結果を表示して、間違い箇所を数えて終わりです。

他の方法として
pamarith -xor true.pam false.pam > xor.pam
pamtopng xor.pam > xor.png
open xor.png
一致部分が0(黒)になるので、色がつく部分が不一致になります。
この方が演算量が少ないと思います。

追記
画像サイズを変えて出題されました。
[~/tmp]pamfile *.pam
false.pam: PPM raw, 640 by 480 maxval 255
true.pam: PPM raw, 800 by 600 maxval 255

サイズが違うとpamarithが使えないので小さい方を拡大します。
[~/tmp]pnmscale 1.25 false.pam >false1.pam

[~/tmp]pamfile *.pam
false.pam: PPM raw, 640 by 480 maxval 255
false1.pam: PPM raw, 800 by 600 maxval 255
true.pam: PPM raw, 800 by 600 maxval 255

間違い箇所の参考程度にはなりました。

MacOS10.4でgit

MacPortsのgitを使っています。
アップデートしたらエラーが出るようになってしまいました。

[github.com/macports/macports-ports]git status
error: sha1 mismatch 8a1abdde9a46af2b26b4f301a72394764e06a4e3
fatal: bad object HEAD

cloneからやり直してみます。

cd /opt/local/var/macports/sources
sudo mkdir -p github.com/macports/macports-ports/
sudo chown -R $USER:admin github.com
git clone https://github.com/macports/macports-ports.git github.com/macports/macports-ports/
Cloning into 'github.com/macports/macports-ports'...
remote: Counting objects: 901062, done.
remote: Compressing objects: 100% (61/61), done.
remote: Total 901062 (delta 33), reused 73 (delta 23), pack-reused 900964
Receiving objects: 100% (901062/901062), 137.74 MiB | 296.00 KiB/s, done.
fatal: pack is corrupted (SHA1 mismatch)
fatal: index-pack failed

またエラーになります。
10.5上で確認すると問題ありません。git自体に問題があるようです。
2.13.2までは問題なく動いていましたが、2.13.3で発生しています。

結局コンパイラを指定してインストールでエラーは出なくなりました。
port install git configure.compiler=macports-gcc-6